![]() |
Настройка средств аутентификации и авторизации в веб-сервере Apache
Введение
Сначала, давай, вспомним, что же подразумевается под понятиями "аутентификация" и "авторизация". "Аутентификацией" называется процесс проверки подлинности пользователя, т.е. пользователь Вася Иванов, каким-то способом подтверждает, что за компьютером в настоящий момент находится действительно он, а не кто-нибудь другой. Для этого чаще всего используется пара логин-пароль, но для реально секретных ресурсов могут применяться и более надёжные способы, например, сканирование отпечатка пальца или сетчатки глаза. "Авторизация" происходит после успешного входа пользователя в систему и определяет к каким именно ресурсам может получить доступ данный пользователь. Так, например, Вася Иванов может, иметь доступ к модерированию раздела "Статьи" на сайте www.example.com, но доступ к модерированию раздела "Вопрос-Ответ" для него будет закрыт. Apache поддерживает 2 вида аутентификации: Basic-аутентификацию (Базовая аутентификация) и Digest-аутентификацию (Дайджест аутентификация). Подробно механизмы аутентификации описаны в RFC 2617, здесь будет дано только краткое описание. Настраивается аутентификация либо в файле httpd.conf, либо в файле .htaccess. При настройке посредством .htaccess, необходимо сначала убедиться, что директива AllowOverride в файле httpd.conf разрешает получение настроек из файла .htaccess. Директива AllowOverride может принимать следующие значения: AllowOverride None - файлы .htaccess игнорируются веб-сервером. Данное значение оказывает положительное влияние на быстродействие веб-сервера. AllowOverride All - обрабатываются все без исключения директивы из файлов .htaccess. AllowOverride AuthConfig - разрешены директивы аутентификации-авторизации, такие как AuthName, AuthType, AuthUserFile, AuthGroupFile, Require и т.д. Так же, директива AllowOverride может принимать ряд других значений, но к аутентификации-авторизации они отношения не имеют. 1. Basic-аутентификация Basic-аутентификация работает так - клиент шлёт запрос на доступ к защищённой области Код:
GET /site/private HTTP/1.0Код:
HTTP/1.1 401 Unauthorizedкуда нужно ввести логин и пароль. После ввода логина и пароля на сервер отправляется такой запрос Код:
GET /site/private HTTP/1.0Главным минусом Basic-аутентификации является то, что все данные пересылаются через сеть в открытом виде, т.е. любой желающий из твоей локалки может отснифать эти данные и поиметь доступ к тем же ресурсам, что и ты. Во избежание подобных казусов рекомендуется дополнительно использовать SSL-шифрование. Если ты внимательно посмотришь на последний пример, то заметишь, что строчка Код:
YWRtaW46MTIzNDU=Код:
admin:12345Теперь, попробуем замутить такую аутентификацию на практике. Для этого потребуется: + Создать файл с паролями. + Прописать защищаемый ресурс в конфигурацию Apache (в файле httpd.conf или в файле .htaccess). + Создать файл для работы с группами и настроить групповой доступ (этот пункт не является обязательным). +Создаём файл с паролями. Для этой цели используется утилита htpasswd, входящая в стандартную поставку сервера Apache. Запускается она так: Код:
htpasswd -c [путь к файлу с паролями] [имя пользователя]Пример: Код:
htpasswd -c /var/www/html/secret/.htpasswd admПосле запуска команды, будет дважды запрошен пароль для пользователя adm, после чего будет создан файл /var/www/html/secret/.htpasswd содержащий такую строчку Код:
adm:хеш пароля-n Результат работы htpasswd (имя пользователя:хеш пароля) будет выведен на экран, а не в файл. -p Пароль хранится в виде обычного текста безо всякого шифрования. Данный формат поддерживается только в операционных системах Windows, Netware и BEOS. Пример: Код:
adm:12345Пример: Код:
adm:sCRPeQ4DXDQqg-m Хеш пароля вычисляется по алгоритму MD5. Пример: Код:
adm:$apr1$kCYEN/..$Ii.SRRJ77C.bB2.nOSZHI1Пример: Код:
adm:{SHA}jLIjfQZ5yojbZGTqxg2pY0VROWQ=+Прописываем защищаемый ресурс в конфигурацию Apache (файл httpd.conf). Теперь нужно прописать защищаемый ресурс в конфигурацию сервера Apache. Делается это при помощи следующих директив: AuthType - тип аутентификации Basic/Digest. AuthName - название для области, требующей авторизации. Это название появится в диалоговом окне ввода логина и пароля. AuthUserFile - местонахождение файла с паролями. AuthGroupFile - местонахождение файла групп. Require - требования, необходимые для доступа к защищённой области. Так, значение valid-user позволит произвести авторизацию для любого пользователя, прописанного в файле .htpasswd. Следующий код позволит нам защитить область http://www.example.com/secret от несанкционированного доступа. Пример: Код:
<Directory "/var/www/html/secret">+Прописываем защищаемый ресурс в конфигурацию Apache (файл .htaccess). Настройка конфигурации Apache через файл .htaccess проводится аналогично предыдущему способу c тем отличием, что изменения вносятся "на лету" и httpd-демон перезапускать не придётся, так как Apache заново считывает содержимое файла .htaccess при каждом обращении к защищённой области. Пример: Код:
AuthType Basic+Настраиваем групповой доступ Для большей гибкости в Apache был введён механизм групп, т.е. авторизация производится не на уровне отдельных пользователей, а на уровне групп пользователей. Для работы с группами создадим файл .htgroup такого вида Код:
admins: ivanov petrovПример: Код:
AuthType Basic2. Digest-аутентификация. Digest-аутентификация представляет собой более продвинутый и сложный вид аутентификации, чем Basic-аутентификация. Главным отличием здесь является то, что логин-пароль пользователя пересылаются через сеть не в открытом виде, а шифруются по алгоритму MD5. Настройка Digest-аутентификации похожа на настройку Basic-аутентификации. Основные шаги остаются прежними: + Создать файл с паролями. + Прописать защищаемый ресурс в конфигурацию Apache (в файле httpd.conf или в файле .htaccess). + Создать файл для работы с группами и настроить групповой доступ (этот пункт не является обязательным). +Создаём файл с паролями. Файл паролей создаётся при помощи стандартной утилиты htdigest Код:
htdigest -c [путь к файлу с паролями] [название секретной области] [имя пользователя]Пример: Код:
htdigest -c /var/www/html/secretplace/.htpasswd private admКод:
adm:private:58b799bb9a734fc5948ebb6cf5c25f3e+Прописываем защищаемый ресурс в конфигурацию Apache (файл .htaccess). Пример: Код:
AuthType DigestДоступ к ресурсу http://www.example.com/secretplace будет иметь только пользователь adm. +Настраиваем групповой доступ Создаем файл .htgroups следующего содержания Код:
admins: ivanov petrovКод:
AuthType DigestДоступ к ресурсу http://www.example.com/secretplace смогут получить только члены группы admins, т.е. пользователи ivanov и petrov. |
| Время: 23:58 |