Русский (Russian)

Защита каталога паролем (htpasswd) на Linux VPS

2 min
VPS/VDS-хостинг

Базовая аутентификация — самый быстрый способ спрятать тестовый сайт, каталог администрирования или приватный инструмент за окном входа. Это руководство охватывает Apache и Nginx на вашем VPS Linux Infrawire с файлом паролей, созданным через htpasswd.

📋 Требования

  • Linux VPS (Ubuntu 24.04 / Debian 12 или AlmaLinux 9 / Rocky 9) с root-доступом по SSH. IP-адрес и root-пароль находятся в личном кабинете.
  • Apache или Nginx, уже обслуживающий сайт.
  • Действующий сертификат HTTPS для example.com. Базовая аутентификация передаёт пароль в кодировке Base64, а это не шифрование: никогда не используйте её по обычному HTTP.

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

Команда htpasswd входит в небольшой пакет, даже если вы используете Nginx:

Bash
# Debian / Ubuntu sudo apt install -y apache2-utils # AlmaLinux / Rocky sudo dnf install -y httpd-tools

🔐 Создание файла паролей

Храните файл вне корня веб-сервера, чтобы его нельзя было скачать:

Bash
sudo mkdir -p /etc/htpasswd sudo htpasswd -c -B /etc/htpasswd/example.com USER

-B использует bcrypt. -c создаёт файл: применяйте его только для первого пользователя, так как для существующего файла он перезапишет всё (разрушительная операция). Остальных пользователей добавляйте без -c:

Bash
sudo htpasswd -B /etc/htpasswd/example.com USER2

Веб-сервер должен иметь возможность читать файл:

Bash
# Debian / Ubuntu (Apache и Nginx работают от www-data) sudo chown root:www-data /etc/htpasswd/example.com # AlmaLinux / Rocky: группа apache (Apache) или nginx (Nginx) sudo chmod 640 /etc/htpasswd/example.com

Чтобы удалить пользователя: sudo htpasswd -D /etc/htpasswd/example.com USER2.

🪶 Вариант A: Apache с .htaccess

Поместите файл .htaccess в защищаемый каталог, например /var/www/example.com/private/.htaccess:

Apache
AuthType Basic AuthName "Закрытая зона" AuthUserFile /etc/htpasswd/example.com Require valid-user

Файлы .htaccess игнорируются, пока виртуальный хост их не разрешит. В блоке <Directory> (файл в /etc/apache2/sites-available/ в Debian/Ubuntu, /etc/httpd/conf.d/ в AlmaLinux/Rocky):

Apache
<Directory /var/www/example.com> AllowOverride AuthConfig </Directory>

Затем проверьте и перезагрузите:

Bash
sudo apachectl configtest sudo systemctl reload apache2 # Debian / Ubuntu sudo systemctl reload httpd # AlmaLinux / Rocky

Если не хотите использовать .htaccess, поместите четыре строки аутентификации прямо в блок <Directory> или <Location>: так быстрее и безопаснее.

🚀 Вариант B: Nginx с auth_basic

Nginx не читает .htaccess. Добавьте директивы в блок server:

Nginx
1server { 2 listen 443 ssl; 3 server_name example.com; 4 # строки ssl_certificate здесь 5 6 location /private/ { 7 auth_basic "Закрытая зона"; 8 auth_basic_user_file /etc/htpasswd/example.com; 9 } 10}

Чтобы защитить весь сайт, поместите эти две строки в блок server. Чтобы оставить открытым один путь внутри защищённого сайта (например, вебхук), добавьте auth_basic off; в его собственный location. Затем:

Bash
sudo nginx -t && sudo systemctl reload nginx

✅ Проверка

Без учётных данных вы должны получить 401, с учётными данными — 200:

Bash
curl -I https://example.com/private/ curl -I -u USER https://example.com/private/

Ожидаемый первый ответ:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Закрытая зона"

curl запрашивает пароль, если указать только -u USER, и он не попадает в историю оболочки.

🛠️ Устранение неполадок

В Apache не появляется окно входа. AllowOverride всё ещё None либо .htaccess лежит не в том каталоге. Перепроверьте блок <Directory> и перезагрузите.

Всегда 401 при верном пароле. Веб-сервер не может прочитать файл (проверьте chown и chmod) либо путь в AuthUserFile или auth_basic_user_file указан неверно. Причина видна в журнале ошибок: /var/log/apache2/error.log, /var/log/httpd/error_log или /var/log/nginx/error.log.

Ошибка 500 после добавления .htaccess. Директива некорректна или не хватает модуля. Выполните sudo apachectl configtest и прочитайте сообщение.

Запрос пароля по HTTP. Сначала настройте редирект с HTTP на HTTPS, чтобы учётные данные никогда не передавались открыто.


🎉 Ваш приватный каталог теперь требует вход: пароли хранятся в виде хешей вне досягаемости и передаются только по HTTPS.

Следите за последними предложениями, скидками и специальными акциями.

Смотреть акции

Мы используем файлы cookie

Аналитические cookie улучшают работу сайта. Данные не продаются третьим лицам. Подробнее в политике конфиденциальности.