Защита папки сайта паролем через .htaccess и .htpasswd

Базовая HTTP-аутентификация — самый быстрый способ закрыть от посторонних часть сайта: административную панель, тестовую версию, каталог со служебными файлами. Браузер покажет окно с запросом логина и пароля ещё до загрузки страницы, а боты, перебирающие пароли к админке, даже не доберутся до формы входа.
Как это работает
Нужны два файла:
.htpasswd— список пользователей с хешами паролей;.htaccess— файл в защищаемом каталоге, который включает проверку и указывает путь к.htpasswd.
Способ работает на веб-сервере Apache и совместимом с ним LiteSpeed — они используются на большинстве тарифов виртуального хостинга. Для Nginx настройка описана в конце статьи.
Шаг 1. Создайте файл с паролями
На сервере с доступом по SSH используйте утилиту htpasswd. Она входит в пакет apache2-utils (Debian, Ubuntu) или httpd-tools (AlmaLinux, Rocky Linux).
htpasswd -c -B /home/user/.htpasswd admin
-cсоздаёт новый файл;-Bиспользует стойкий алгоритм bcrypt;admin— имя пользователя.
Утилита дважды запросит пароль. Чтобы добавить ещё одного пользователя, выполните команду без ключа -c — иначе файл будет перезаписан:
htpasswd -B /home/user/.htpasswd editor
Удалить пользователя:
htpasswd -D /home/user/.htpasswd editor
Если доступа по SSH нет, воспользуйтесь разделом защиты каталогов в панели управления хостингом: она создаст оба файла сама.
Шаг 2. Создайте .htaccess
В каталоге, который нужно закрыть, создайте файл .htaccess:
AuthType Basic
AuthName "Restricted area"
AuthUserFile /home/user/.htpasswd
Require valid-user
AuthName— текст, который браузер может показать в окне входа;AuthUserFile— абсолютный путь к файлу паролей на сервере;Require valid-user— доступ для любого пользователя из файла.
Защита распространяется на каталог и все вложенные в него. Узнать абсолютный путь можно командой pwd в нужном каталоге.
Доступ только для отдельных пользователей
Require user admin editor
Защита одного файла
Чтобы закрыть паролем один файл, например страницу входа WordPress, оберните директивы в блок Files:
<Files "wp-login.php">
AuthType Basic
AuthName "Restricted area"
AuthUserFile /home/user/.htpasswd
Require valid-user
</Files>
Это заметно снижает нагрузку от ботов, перебирающих пароли: запросы отсекаются веб-сервером и не доходят до PHP.
Пароль или доверенный IP-адрес
Удобный вариант для офиса: с рабочего адреса пускать без пароля, остальных — только по паролю.
AuthType Basic
AuthName "Restricted area"
AuthUserFile /home/user/.htpasswd
<RequireAny>
Require ip 198.51.100.7
Require valid-user
</RequireAny>
Чтобы требовать и адрес, и пароль одновременно, замените RequireAny на RequireAll.
Проверка
Откройте защищённый адрес в приватном окне браузера — должно появиться окно с запросом логина и пароля. Из консоли:
curl -I https://example.com/admin/
curl -I -u admin:пароль https://example.com/admin/
Первая команда должна вернуть код 401, вторая — 200.
Если не работает
- Ошибка 500. Опечатка в
.htaccessили неверный путь вAuthUserFile. Подробности — в журнале ошибок веб-сервера. - Пароль не запрашивается. Обработка
.htaccessотключена. В конфигурации Apache для каталога сайта должна быть директиваAllowOverride Allили хотя быAllowOverride AuthConfig. - Пароль не подходит. Проверьте путь к файлу и права на чтение для веб-сервера:
chmod 644 .htpasswd. - Окно входа появляется повторно. Неверный логин или пароль; регистр символов учитывается.
Аналог для Nginx
Nginx не читает .htaccess. Защита задаётся в конфигурации сайта:
location /admin/ {
auth_basic "Restricted area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Файл паролей создаётся той же утилитой htpasswd. После изменения выполните sudo nginx -t && sudo systemctl reload nginx. Остальные примеры конфигурации — в статье о виртуальных хостах Nginx.
Ограничения способа
- Только вместе с HTTPS. При базовой аутентификации пароль передаётся при каждом запросе почти в открытом виде. Без SSL-сертификата его может перехватить любой, кто видит трафик.
- Нет выхода из системы. Браузер помнит пароль до закрытия.
- Нет защиты от перебора. Сам веб-сервер не ограничивает число попыток — на своём сервере дополните защиту Fail2Ban.
Базовая аутентификация хороша как дополнительный барьер перед админкой или тестовым сайтом, но не заменяет полноценную систему учётных записей.
Видеоинструкция



