Задание №10: Web-аутентификация в Nginx (.htpasswd)
В данном задании на пограничном маршрутизаторе провайдера (ISP) настраивается механизм парольной защиты веб-ресурса HTTP Basic Authentication (auth_basic) для сайта web.au-team.irpo.
Для хранения учётных данных генерируется файл /etc/nginx/.htpasswd с хэшированным паролем пользователя WEB. При попытке открыть сайт клиенту выводится стандартное системное окно ввода логина и пароля; доступ к страницам предоставляется только после успешной проверки реквизитов.
Место выполнения
- Настройка утилиты и генерация пароля выполняются под
rootна маршрутизаторе ISP (isp.au-team.irpo). - Проверка доступа через браузер выполняется с рабочей станции HQ-CLI.
1. Теоретическая справка: HTTP Basic Authentication
HTTP Basic Authentication — стандартный протокол аутентификации на уровне протокола HTTP (RFC 7617):
- При первом обращении клиента веб-сервер Nginx отправляет заголовок
HTTP/1.1 401 Unauthorizedс полемWWW-Authenticate: Basic realm="Restricted Access". - Браузер перехватывает этот ответ и отображает встроенное модальное окно авторизации.
- Клиент вводит логин и пароль, которые кодируются в Base64 и передаются в заголовке
Authorization: Basic ...при каждом последующем запросе. - Nginx сверяет полученные данные с базой хэшей в файле
.htpasswd.
Утилита htpasswd в ALT Linux
В ALT Linux утилита создания и управления файлами паролей поставляется отдельным пакетом apache2-htpasswd.
Ключ -c (Create) указывает утилите создать новый файл.
Осторожно с флагом -c
Флаг -c перезаписывает файл заново! Если в будущем потребуется добавить второго пользователя, команду вызывают без ключа -c (htpasswd /etc/nginx/.htpasswd User2), иначе предыдущие учётные записи будут стёрты.
2. Настройка файла паролей на маршрутизаторе ISP
Выполняем команды под пользователем root на машине ISP:
Шаг 1. Установка утилиты apache2-htpasswd
# Устанавливаем пакет с утилитой htpasswd:
apt-get update && apt-get install apache2-htpasswd -yШаг 2. Генерация файла /etc/nginx/.htpasswd
Создаём файл паролей для пользователя WEB:
htpasswd -c /etc/nginx/.htpasswd WEBКонсоль дважды запросит пароль:
New password:
Re-type new password:
Adding password for user WEBВводим пароль: P@ssw0rd (символы при вводе в целях безопасности не отображаются).
Неинтерактивный вариант создания (в одну строчку)
С помощью флага -b (batch) пароль можно передать сразу в командной строке:
htpasswd -b -c /etc/nginx/.htpasswd WEB P@ssw0rdШаг 3. Проверка созданного файла паролей
Выводим содержимое файла:
cat /etc/nginx/.htpasswdПример корректного вывода:
WEB:$apr1$k8x1a...$QZ0v4LpW7.h3k1j9L4m1q0(Пароль надёжно защищён криптографическим хэшем APR1 / MD5-Crypt).
Шаг 4. Проверка конфигурации и перезапуск веб-сервера Nginx
Директивы auth_basic "Restricted Access"; и auth_basic_user_file /etc/nginx/.htpasswd; были внесены в конфигурацию /etc/nginx/sites-available.d/r-proxy.conf в Задании №9.
Теперь, когда файл физически создан, тестируем и перезапускаем службу:
# Проверяем синтаксис Nginx
nginx -t
# Перезапускаем веб-сервер для применения изменений
systemctl restart nginx3. Проверка авторизации с рабочей станции HQ-CLI
Переходим на рабочую станцию HQ-CLI и открываем веб-браузер:
1. Проверка защищенного сайта web.au-team.irpo:
В адресной строке вводим:
http://web.au-team.irpo/Что происходит:
- Браузер выводит диалоговое окно «Требуется аутентификация» (Restricted Access).
- Вводим реквизиты:
- Имя пользователя:
WEB - Пароль:
P@ssw0rd
- Имя пользователя:
- Нажимаем Войти (Sign in).
Ожидаемый результат: страница успешно авторизуется и открывает корпоративный сайт Apache с логотипом и базой данных webdb!
2. Проверка открытого сайта docker.au-team.irpo:
В соседней вкладке браузера переходим по адресу:
http://docker.au-team.irpo/Ожидаемый результат: сайт приложения tespapp из Docker-контейнера на BR-SRV открывается свободно, без каких-либо запросов логина и пароля.
Итог выполнения Задания №10
Парольная защита сайта web.au-team.irpo успешно активирована через Nginx Basic Auth, закрытый доступ открывается строго по логину WEB, а сайт docker.au-team.irpo остаётся общедоступным.
