В цілях безпеки нам іноді доводиться «запаролювати» певні веб-директорії. Кажучи академічно, застосувати HTTP аутентифікацію, як додатковий рівень захисту. Найчастіше її налаштовують до публічних URL адрес адміністрування популярних CMS, форумів, серверних панелей тощо. Найпростіший спосіб зробити це, скористатися базовою HTTP аутентифікацію (Basic HTTP Authentication). Існують й інші, менш поширені схеми: Bearer, Digest, Mutual, HOBA, AWS4-HMAC-SHA256, які не є темою цього огляду. Оскільки дані аутентифікації (user, password) передаються безпосередньо у заголовках запиту, такий тип захисту не можна вважати безпечним без використання захищеного HTTPS з’єднання з застосуванням дійсних SSL сертифікатів.
Усі дані доступу прийнято зберігати в системному файлі .htpasswd. Це не строга вимога, а лише усталене правило системного адміністрування. Ім’я користувача та пароль зазначаються у форматі username:password. Кожна така пара вводяться з ново рядка. У якості username використовується будь-яке ім’я (наприклад, «admin», «guest», «client468», «root» тощо). А ось гасло (password) в чистому виді вводити не можна. Спершу його потрібно закодувати у base64 форматі. Існують різні способи, щоб закодувати текстовий рядок в base64 кодуванні. Найпростіший, на мою думку — співзвучна php функція base64_encode(). Виконуємо простий скрипт:
<?php echo base64_encode(‘qwerty’); ?>
Замість “qwerty” вписуємо власне гасло. Отримаємо щось на кшталт “cXdlcnR5”. Зберігаємо .htpasswd файл.
Для захисту директорії розміщюємо в ній файл .htaccess з наступними директивами:
AuthType Basic AuthName "Access to the site" AuthUserFile /path/to/.htpasswd Require valid-user
Як бачимо, шлях до .htpasswd задає директива AuthUserFile. Бажано не розміщувати файл .htpasswd в директорії чи піддиректоріях DOCUMENT_ROOT, щоб його не прочитали web-користувачі. В іншому разі переконайтесь, що файл закритий від читання і недоступний за посиланням в браузері.
Відкрийте конфігурацію сайту та доповніть налаштуваннями директорії, що бажаєте запаролити:
location /my_dir { auth_basic "Access to the site"; auth_basic_user_file /path/to/.htpasswd; }
Після збереження конфігурації не забудьте перезавантажити Nginx. Ось і все, тепер при введені зазначеної URL в браузері сервер запитає дані доступу.
P.S. Також можна користуватися посилання типу https://username:password@www.example.com/, щоб не вводити дані кожен раз.