- Главная... arrow - Статьи... arrow | - Web arrow Аутентификация средствами Apache Web Server

#Записки о Unix/Linux/BSD/Solaris

Аутентификация средствами Apache Web Server
Автор H@wk!   
16:02:2009 г.
Apache Web Server предоставляет такую удобную вещь, как "Аутентификация" пользователя и "Авторизация". Считаю данные возможности очень удобными с точки зрения администратора, которому не зачем знать все премудрости языков программирования, чтобы закрыть доступ к той или иной директории сервера.

Для начала давайте разберемся с определениями:

Аутентификация -  процедура проверки соответствия некоего лица и его учетной записи в компьютерной системе. В простейшем случае проверка происходит с помощью пароля.

Аутентификацию не следует путать с идентификацией и авторизацией:
идентификация — это установление личности самого физического лица (а не его виртуальной учетной записи, коих может быть много); а авторизация — это предоставление лицу прав на какие-то действия в системе.
Подробнее, можете ознакомится здесь...

С определениями разобрались, переходим к серверу.

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 Заданный пользователь удаляется из файла с паролями.

Все подробности можно узнать прочитав man htpasswd.

2) Прописываем защищаемый ресурс в конфигурацию Apache (в файл httpd.conf или в файле .htaccess)

AuthType - тип аутентификации Basic/Digest.

AuthName - название для области, требующей авторизации. Это название появится в диалоговом окне ввода логина и пароля.

AuthUserFile - местонахождение файла с паролями.

AuthGroupFile - местонахождение файла групп.

Require - требования, необходимые для доступа к защищённой области. Так, значение valid-user позволит произвести авторизацию для любого пользователя, прописанного в файле .htpasswd.

Пример: 

< Directory "/var/www/html/secret">  
   AuthType Basic
   AuthName "Private Area"
   AuthUserFile /var/www/html/site/.htpasswd
   Require valid-user
< /Directory>

После внесения изменений в файл httpd.conf необходимо перезапустить демон httpd.
---
Теперь проделываем все тоже самое, но в варианте с  файлом .htaccess.
Содержание файла для нашего примера будет следующим:

  AuthType Basic
  AuthName "Private Area"
  AuthUserFile /var/www/html/secret/.htpasswd
  Require user administrator tolik


Пример похож на предыдущий, но есть одно отличие. Доступ к секретной области сайта будет разрешён не для всех пользователей из файла .htpasswd, а только для пользователей administrator и tolik.

3) Создаем файл для работы с группами и настраиваем групповой доступ.

Для большей гибкости в Apache был введён механизм групп, т.е. авторизация производится не на уровне отдельных пользователей, а на уровне групп пользователей. Для работы с группами создадим файл .htgroup такого вида:

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-аутентификация.

Digest-аутентификация представляет собой более продвинутый и сложный вид аутентификации, чем Basic-аутентификация. Главным отличием здесь является то, что логин-пароль пользователя пересылаются через сеть не в открытом виде, а шифруются по алгоритму MD5. Настройка Digest-аутентификации похожа на настройку Basic-аутентификации. Основные шаги остаются прежними:

1) Создать файл с паролями.
2) Прописать защищаемый ресурс в конфигурацию Apache (в файле httpd.conf или в файле .htaccess).
3) Создать файл для работы с группами и настроить групповой доступ (этот пункт не является обязательным).


---

1) Создаём файл с паролями.

Файл паролей создаётся при помощи стандартной утилиты htdigest:

htdigest -c [путь к файлу с паролями] [название секретной области] [имя пользователя]

Ключ -c указывается при необходимости создать новый файл, а обязательный аргумент [название секретной области] - это наименование секретной области, которое позже будет указано в директиве AuthName.

htdigest -c /var/www/html/site/.htpasswd private administrator

После запуска команды нужно будет ввести пароль и его подтверждение. В результате, мы получим файл /var/www/html/secretplace/.htpasswd похожего содержания
administrator:private:58b799bb9a734fc5948ebb6cf5c25f3e
Хеш считается по алгоритму MD5.

2) Прописываем защищаемый ресурс в конфигурацию Apache (файл .htaccess).

AuthType Digest
AuthName private
AuthUserFile /var/www/html/site/.htpasswd
Require user administrator
 

Результат:

Доступ к ресурсу site будет иметь только пользователь administrator.

3) Настраиваем групповой доступ.

Создаем файл .htgroups следующего содержания:
admins: administrator goga
users: tolik vano


пример:
AuthType Digest
AuthName private
AuthUserFile /var/www/html/site/.htpasswd
AuthGroupFile /var/www/html/site/.htgroup
Require group admins

Результат:

Доступ к ресурсу site смогут получить только члены группы admins, т.е. пользователи administrator и goga

// Блок посвященный Apache.
// В последующих статьях будут затронуты вопросы виртуальных хостов.
// Установка и настройка Web-Server Apache+php+MySql (LAMP).

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code


Просмотров: 59665

  Коментарии (11)
RSS комментарии
 1 Написал(а) Лиза, в 13:06 28.03.2017
подскажите как писать пороль цифры ?пж! :sigh
 2 Написал(а) НеЖидкий, в 22:24 29.03.2016
Для apache2.2 вместо директивы AuthDigestFile всё-таки нужно писать AuthUserFile. Видимо, статья писалась именно про апач2.2
 3 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 19:53 25.10.2015
спасибо, всё завелось с первого раза :)
 4 Написал(а) Алексей, в 15:57 20.07.2011
Для Digest директива, указывающая на файл, не AuthUserFile, а AuthDigestFile: 
… 
AuthDigestFile /var/www/html/site/.htpasswd 
 5 Написал(а) H@wk!, в 09:36 19.04.2011
Посредством комментариев, это сделать проблемно. 
Можете написать вопрос через "Контакты", в ответ вышлю секции конфига отвечающие за htaccess
 6 Написал(а) Игорь, в 00:28 19.04.2011
А вы бы не могли выложить скрочки касаюшиеся htaccess с вашего конфига apache.
 7 Написал(а) Игорь, в 21:14 15.04.2011
дааа чудеса у меня какие то... 3 раза перепроверил пути все идеально... но ошибка 500 а если basic аутентификация, то все норм... дааааа чет значит у меня с апачем... ((( ну значит буду дальше ковыряться...  
Спасибо за помощь.
 8 Написал(а) H@wk!, в 12:14 15.04.2011
Создал  
# less .htpasswd 
test : private:d718a9e4391f2412846368843ce20162 
 
# less .htaccess 
AuthType Digest 
AuthName private 
AuthUserFile /path/.htpasswd 
Require user test 
 
Работает. Обратите внимание на путь AuthUserFile /path/.htpasswd, вот если он не верный, будет ошибка 500. Т.е. путь должен быть до вашего созданного .htpasswd
 9 Написал(а) Игорь, в 11:06 15.04.2011
к сожалению тоже самое 500-я ошибка
 10 Написал(а) H@wk!, в 09:16 15.04.2011
А если вот так: 
-- 
AuthType Digest  
AuthName "private"  
AuthUserFile /var/site/.htpasswd  
Require admin  
-- 
Вместо private можно что угодно писать - это нейм обычно сервиса, т.е. если защищаете таким образом вебалайзер, то можно написать: 
AuthName "Webalizer"
 11 Написал(а) Игорь, в 01:28 15.04.2011
Спасибо за статью хоть вспомнил что да как ))) 
пробую digest авторизацию но при проверке в браузере вижу 500 ошибку, делаю так 
htdigest -c /var/site/.htpasswd private admin 
ну и htaccess 
AuthType Digest 
AuthName private 
AuthUserFile /var/site/.htpasswd 
Require user admin 
 
может вместо private надо писать чтото другое ?
 
« MySQL настройка

#COMMENT

Блокируем Ylmf-pc на Exim, Bru...
Благодарю за кучу уцелевших нервов:) постоянно приходилось б...
30/05/17 00:02 More...
By Mus

Установка даты и времени в кон...
Спасибо
12/05/17 17:49 More...
By dushka

Раскладка в rdesktop
Огромное спасибо!
28/04/17 14:01 More...
By Виктор

Аутентификация средствами Apac...
подскажите как писать пороль цифры ?пж! :sigh
28/03/17 13:06 More...
By Лиза

Logwatch - мониторинг журналов...
Отлично, очень не хватало. Автору большое спасибо, пиши еще.
25/01/17 02:44 More...
By Gregg

Сейчас на сайте находятся:
4 гостей