Аутентифікація засобами apache web server - # записки про unix
Для початку давайте розберемося з визначеннями:
Аутентифікація - процедура перевірки відповідності якоїсь особи і його облікового запису в комп'ютерній системі. У найпростішому випадку перевірка відбувається за допомогою пароля.
З визначеннями розібралися, переходимо до сервера.
Apache підтримує 2 види аутентифікації: Basic-аутентифікацію (Базова аутентифікація) та Digest-аутентифікацію (Дайджест аутентифікація). Детально механізми аутентифікації описані в RFC 2617.
Аутентифікацію можна налаштувати безпосередньо в конфігураційному файлі Apache сервера - httpd.conf або в окремому файлі, вміщеному в директорію з index сторінкою сайту. Файл - .htaccess.
При першому випадку, коли зміни вносяться до конфігураційний файл, необхідно перезапустити Apache сервер щоб зміни вступили в силу. У другому випадку зміни застосовуються на льоту, як тільки файлик .htaccess поміщається в директорію.
Увага! Під час налаштування за допомогою .htaccess. необхідно спочатку переконатися, що директива AllowOverride в файлі httpd.conf дозволяє отримання налаштувань з файлу .htaccess. Для подроробностей зверніться до документації Apache.
Розглянемо механізм Basic-аутентифікації:
Клієнт, звертаючись до сторінці захищеного сайту наприклад test.ru відсилає запит типу
GET / site / private HTTP / 1.0
Сервер надсилає відповідь:
HTTP / 1.1 401 Unauthorized
WWW-Authenticate: Basic realm = "private"
Після отримання відповіді, клієнтський браузер відображає вікно з полями введення логіна і пароля.
Вводимо логін - пароль і натискаємо кнопку "Відправити", на що браузер сервер шле запит наступного виду:
GET / site / private HTTP / 1.0
Authorization: Basic YWRtaW46MTIzNDU =
Залежно від правильності введених даних сервер, або дозволить доступ до захищається ресурсу, або заборонить.
Від теорії переходимо до практики.
Створення базової Аутентифікації:
1) Створюємо файл з паролями користувачів htpasswd
2) Прописати захищається ресурс в конфігурацію Apache (в файл httpd.conf або в файлі .htaccess)
3) Створити файл для роботи з групами і налаштувати загальний режим (цей щаг не обов'язковий).
---
1) Для створення файлу з паролямя є в наявності утиліта, що входить в стандартну поставку сервера Apache.
htpasswd -c /var/www/html/site/.htpasswd administrator
розберемо що зробить дана команда:
- створює новий файл .htpasswd в директорії з сайтом site. Якщо файл відсутній, то буде створено новий, якщо файл є, то він затреться, а на його місце запишеться новий із зазначеним користувачем, а даному випадку "administrator". За створення нового файлу відповідає ключ "-з".
Щоб додати в файл ще одного користувача, наприклад: tolik виконуємо попередню команду, але вже без "-з":
htpasswd -c /var/www/html/site/.htpasswd tolik
У процесі додавання користувачів, необхідно вказати для них паролі. Система спочатку попросить ввести пароль і вдруге попросить його підтвердити.
В результаті правильного виконання команд, файл .htpasswd заповниться і набуде вигляду:
користувач: хеш пароля користувача
Розглянемо, інші ключі утиліти htpasswd:
-n Результат роботи htpasswd (псевдо: хеш пароля) буде виведений на екран, а не в файл.
-p Пароль зберігається у вигляді звичайного тексту без жодного шифрування. Даний формат підтримується тільки в операційних системах Windows, Netware і BEOS (не рекомендую).
-d Хеш пароля обчислюється з використанням стандартної Unix-функції CRYPT. Це алгоритм шифрування за умовчанням. Використовується тільки на * nix серверах.
-m Хеш пароля обчислюється за алгоритмом MD5.
-s Хеш пароля обчислюється за алгоритмом SHA1.
-D Заданий користувач видаляється з файлу з паролями.
Всі подробиці можна дізнатися прочитавши manhtpasswd.
2) Прописуємо захищається ресурс в конфігурацію Apache (в файл httpd.conf або в файлі .htaccess)
AuthType - тип аутентифікації Basic / Digest.
AuthUserFile - місцезнаходження файлу з паролями.
AuthGroupFile - місцезнаходження файлу груп.
AuthType Basic
AuthName "Private Area"
AuthUserFile /var/www/html/site/.htpasswd
Require valid-user
AuthType Basic
AuthName "Private Area"
AuthUserFile /var/www/html/secret/.htpasswd
Require user administrator tolik
Приклад схожий на попередній, але є одна відмінність. Доступ до секретної області сайту буде дозволений не для всіх користувачів з файлу .htpasswd. а тільки для користувачів administrator і tolik.
3) Створюємо файл для роботи з групами і налаштовуємо загальний режим.
admins: administrator goga
users: tolik vano
тобто у нас є дві групи користувачів admins і users. Членами групи admins є користувачі administrator і goga. а членами групи users є користувачі tolik. vano.
AuthType Basic
AuthName "Private Area"
AuthUserFile /var/www/html/secret/.htpasswd
AuthGroupFile /var/www/html/secret/.htgroup
Require group admins
У наведеному прикладі доступ до секретної області сайту мають тільки члени групи admins.
Головним мінусом Basic-аутентифікації є те, що всі дані пересилаються через мережу у відкритому вигляді, тобто будь-який бажаючий з твоєї локалки може перехопити ці дані і поиметь доступ до ресурсів, що захищаються. Щоб уникнути подібних казусів рекомендується додатково використовувати SSL-шифрування.
Digest-аутентифікація є більш просунутий і складний вид аутентифікації, ніж Basic-аутентифікація. Головною відмінністю тут є те, що логін-пароль користувача пересилаються через мережу не в відкритому вигляді, а шифруються по алгоритму MD5. Налаштування Digest-аутентифікації схожа на настройку Basic-аутентифікації. Основні кроки залишаються незмінними:
1) Створити файл з паролями.
2) Прописати захищається ресурс в конфігурацію Apache (у файлі httpd.conf або в файлі .htaccess).
3) Створити файл для роботи з групами і налаштувати загальний режим (цей пункт не є обов'язковим).
1) Створюємо файл з паролями.
Файл паролів створюється за допомогою стандартної утиліти htdigest:
htdigest -c [шлях до файлу з паролями] [назва секретної області] [ім'я користувача]
Ключ -c вказується при необхідності створити новий файл, а обов'язковий аргумент [назва секретної області] - це найменування секретної області, яке пізніше буде вказано в директиві AuthName.
Після запуску команди потрібно буде ввести пароль і його підтвердження. В результаті, ми отримаємо файл /var/www/html/secretplace/.htpasswd схожого змісту
Хеш вважається за алгоритмом MD5.
2) Прописуємо захищається ресурс в конфігурацію Apache (файл .htaccess).
AuthType Digest
AuthName private
AuthUserFile /var/www/html/site/.htpasswd
Require user administrator
Доступ до ресурсу site матиме тільки користувач administrator.
3) Налаштовуємо загальний режим.
Створюємо файл .htgroups такого змісту:
Доступ до ресурсу site зможуть отримати тільки члени групи admins. тобто користувачі administrator і goga