TimVin

Что такое .htpasswd

Файл .htpasswd — это текстовый файл, в котором хранятся имена пользователей и хеши паролей для Basic Authentication в веб-серверах (Apache, Nginx, Caddy и др.)

Каждая строка имеет вид:

username:hashed_password

Установка утилиты htpasswd

ОС / ДистрибутивКоманда установки
Debian/Ubuntusudo apt install apache2-utils
RHEL/CentOS/Fedorasudo dnf install httpd-tools
Alpineapk 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$). Можно явно указать другой:

ФлагАлгоритмПример
-mApache MD5 ($apr1$)htpasswd -m ...
-Bbcrypt (рекомендуется)htpasswd -B ...
-sSHA1htpasswd -s ...
-pplain 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
Рубрики: Linux