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 (или только 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 предпочтителен с точки зрения безопасности.

Пример полного цикла

# 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 при добавлении второго и последующих пользователей — файл будет перезаписан, и все старые записи пропадут.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

Рубрики: Linux