Аутентифікація засобами 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