Что такое .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 |
Основные команды htpasswd
1. Создать новый файл и добавить первого пользователя
htpasswd -c /path/to/.htpasswd username
-c— создать файл (если файл уже есть, он будет перезаписан).- После ввода команды утилита запросит пароль дважды.
Пример:
htpasswd -c /etc/nginx/.htpasswd admin
2. Добавить ещё одного пользователя (не перезаписывая файл)
htpasswd /path/to/.htpasswd anotheruser
- Без флага
-c— добавляет или обновляет запись пользователя.
Пример:
htpasswd /etc/nginx/.htpasswd user2
3. Добавить пользователя с паролем из командной строки (небезопасно, но удобно в скриптах)
htpasswd -b /path/to/.htpasswd username password
-b— взять пароль из аргумента команды, а не из интерактивного ввода.
Пример:
htpasswd -b /etc/nginx/.htpasswd user3 'Str0ngP@ss!'
⚠️ Пароль будет виден в истории команд (history) и в логах процессов.
4. Создать файл + добавить пользователя в одну команду (с паролем)
htpasswd -cb /path/to/.htpasswd username password
-c+-b— создать файл и сразу записать пользователя с паролем.
Пример:
htpasswd -cb /etc/nginx/.htpasswd admin 'AdminP@ss123'
5. Удалить пользователя
htpasswd -D /path/to/.htpasswd username
-D— удалить запись указанного пользователя.
Пример:
htpasswd -D /etc/nginx/.htpasswd user2
6. Проверить пароль пользователя
htpasswd -v /path/to/.htpasswd username
-v— запросит пароль и проверит, совпадает ли он с записью в файле.
Пример:
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 предпочтителен с точки зрения безопасности.
Пример полного цикла
# 1. Создать файл и первого пользователя
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при добавлении второго и последующих пользователей — файл будет перезаписан, и все старые записи пропадут. - Храните
.htpasswdвне публичной директории веб-сервера (например,/etc/nginx/.htpasswd, а не/var/www/html/.htpasswd). - Используйте bcrypt (
-B) для лучшей защиты паролей. - Проверяйте права на файл:
sudo chmod 640 /etc/nginx/.htpasswd
sudo chown root:root /etc/nginx/.htpasswd