Что такое .htpasswd
Файл .htpasswd — это текстовый файл, в котором хранятся имена пользователей и хеши паролей для Basic Authentication в веб-серверах (Apache, Nginx, Caddy и др.)
Каждая строка имеет вид:
username:hashed_password
Установка утилиты htpasswd
| ОС / Дистрибутив | Команда установки |
|---|---|
| Debian/Ubuntu | sudo apt install apache2-utils |
| RHEL/CentOS/Fedora | sudo dnf install httpd-tools |
| Alpine | apk add apache2-utils |
| macOS (Homebrew) | brew install httpd (или только apache2-utils, если доступен) |
Основные команды htpasswd
1. Создать новый файл и добавить первого пользователя
htpasswd -c /path/to/.htpasswd username
-c— создать файл (если файл уже есть, он будет перезаписан).httpd.apache+2После ввода команды утилита запросит пароль дважды.
Пример:
htpasswd -c /etc/nginx/.htpasswd admin
2. Добавить ещё одного пользователя (не перезаписывая файл)
htpasswd /path/to/.htpasswd anotheruser
Без флага
-c— добавляет или обновляет запись пользователя.httpd.apache+2
Пример:
htpasswd /etc/nginx/.htpasswd user2
3. Добавить пользователя с паролем из командной строки (небезопасно, но удобно в скриптах)
htpasswd -b /path/to/.htpasswd username password
-b— взять пароль из аргумента команды, а не из интерактивного ввода.httpd.apache+2
Пример:
htpasswd -b /etc/nginx/.htpasswd user3 'Str0ngP@ss!'
Пароль будет виден в истории команд (
history) и в логах процессов.
4. Создать файл + добавить пользователя в одну команду (с паролем)
htpasswd -cb /path/to/.htpasswd username password
-c+-b— создать файл и сразу записать пользователя с паролем.access.redhat+2
Пример:
htpasswd -cb /etc/nginx/.htpasswd admin 'AdminP@ss123'5. Удалить пользователя
htpasswd -D /path/to/.htpasswd username
-D— удалить запись указанного пользователя.httpd.apache+3
Пример:
htpasswd -D /etc/nginx/.htpasswd user2
6. Проверить пароль пользователя
htpasswd -v /path/to/.htpasswd username
-v— запросит пароль и проверит, совпадает ли он с записью в файле.httpd.apache+1
Пример:
htpasswd -v /etc/nginx/.htpasswd admin
Алгоритмы хеширования
По умолчанию используется Apache MD5 ($apr1$). Можно явно указать другой:
| Флаг | Алгоритм | Пример |
|---|---|---|
-m |
Apache MD5 ($apr1$) |
htpasswd -m ... |
-B |
bcrypt (рекомендуется) | htpasswd -B ... |
-s |
SHA1 | htpasswd -s ... |
-p |
plain text (не шифровать, только для отладки) | htpasswd -p ... |
| без флага | по умолчанию (обычно MD5) | htpasswd ... |
Пример с bcrypt:
htpasswd -cBb /etc/nginx/.htpasswd admin 'Str0ngP@ss!'
Bcrypt предпочтителен с точки зрения безопасности.
Пример полного цикла
htpasswd -cBb /etc/nginx/.htpasswd admin 'AdminP@ss123'
# 2. Добавить ещё пользователей
htpasswd -Bb /etc/nginx/.htpasswd user1 'User1P@ss' htpasswd -Bb /etc/nginx/.htpasswd user2 'User2P@ss'
# 3. Проверить пароль
htpasswd -v /etc/nginx/.htpasswd admin
# 4. Удалить пользователя
htpasswd -D /etc/nginx/.htpasswd user2
# 5. Посмотреть содержимое (только имена, пароли зашифрованы)
cat /etc/nginx/.htpasswd
Пример .htaccess (Apache)
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Пример конфига Nginx
location /protected {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Частые ошибки и советы
-
Не используйте
-cпри добавлении второго и последующих пользователей — файл будет перезаписан, и все старые записи пропадут.httpd.apache+2 -
Храните
.htpasswdвне публичной директории веб-сервера (например,/etc/nginx/.htpasswd, а не/var/www/html/.htpasswd).runebook+1 -
Используйте bcrypt (
-B) для лучшей защиты паролей.access.redhat+2 -
Проверяйте права на файл:
sudo chmod 640 /etc/nginx/.htpasswd
sudo root:root /etc/nginx/.htpasswd