Настройка аутентификации и авторизации в веб-сервере Apache

26.10.2008, рубрики: how-to | Теги: | 3 комментариев »

Привет, сегодня я расскажу как с помощью веб-сервера Apache у себя на компьютере (сервере) настроить аутентификацию и авторизацию.
Начнем пожалуй с того, что такое авторизация, и что такое аутентификация?

Аутентифика́ция (англ. Authentication) или подтверждение подлинности — процедура проверки соответствия субъекта и того, за кого он пытается себя выдать, с помощью некой уникальной информации, в простейшем случае — с помощью имени и пароля, в сложнейшем случае — с помощью проверки радужной оболочки глаза или отпечатков пальцев или ладони.

Авториза́ция (англ. authorization) — процесс, а также результат процесса проверки необходимых параметров и предоставление определённых полномочий лицу или группе лиц (прав доступа) на выполнение некоторых действий в различных системах с ограниченным доступом.

Настройка

Настраивается аутентификация либо в файле httpd.conf, и с помощью файла .htaccess. При настройке посредством .htaccess, необходимо сначала убедиться, что директива AllowOverride в файле httpd.conf разрешает получение настроек из файла .htaccess. Директива AllowOverride может принимать следующие значения:

- AllowOverride None – файлы .htaccess игнорируются веб-сервером. Данное значение оказывает положительное влияние на быстродействие веб-сервера.
- AllowOverride All – обрабатываются все без исключения директивы из файлов .htaccess.
- AllowOverride AuthConfig – разрешены директивы аутентификации-авторизации, такие как AuthName, AuthType, AuthUserFile, AuthGroupFile, Require и т.д.

Теперь пробуем все это сделать, для этого нужно:

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

Реализация

Преступим!
Установим сам сервер:

  1. sudo aptitude install apache2

Если вы все это делаете на Ubuntu то расположение папок будет примерно таким:

/etc/apache2/ – тут лежат конфиги и необходимый нам httpd.conf
/var/www/ – (это и есть папка вашего сервера) там будет лежать файл вида Index.html, его стоит убить и создать там нужные вам папки, например:

  1. mkdir /var/www/Public
  2. mkdir /var/www/Secret
  3. mkdir /var/www/Wordpress

Теперь проверим, введите в браузере http://localhost/ должны увидеть следующее:

Apache auth

Apache auth

Создаём файл с паролями, для этого используется утилита htpasswd, входящая в стандартную поставку сервера Apache. Запускается она так:

  1. sudo htpasswd -c [путь к файлу с паролями] [имя пользователя]

Ключ используется при первом запуске htpasswd и указывает на то, что нужно создать новый файл, подробнее о htpasswd:

  1. man htpasswd

Если файл с таким именем уже существует – он будет затёрт.

Создаем файл:

  1. htpasswd -c /home/booch/.htpasswd mothes

После запуска команды, будет дважды запрошен пароль для пользователя mothes, после чего будет создан файл /home/booch/.htpasswd

Вывод файла:

  1. cat /home/booch/.htpasswd
  2. mothes:Uj3b8m6b0Xssc (логин и хеш пароля)

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

Следующий код позволит нам защитить папку Secret от несанкционированного доступа. У меня после установки сервера, файл httpd.conf являлся пустым, по этому все необходимые настройки нужно вбивать самому, и делать это правильно!
Открываем файл httpd.conf:

  1. sudo gedit /etc/apache2/httpd.conf

Вносим в него следующие строки:

  1. AccessFileName .htaccess
  2.  
  3. Files ~ "^.ht"
  4.        Order allow,deny
  5.        Deny from all
  6. /Files
  7.  
  8. Directory "/var/www/Secret"
  9.       AuthType Basic
  10.       "Private Area"
  11.       AuthUserFile /home/booch/.htpasswd
  12.       Require valid-user
  13.       AllowOverride AuthConfig
  14.       Options Indexes FollowSymLinks
  15. /Directory

После внесения изменений в файл httpd.conf, необходимо перезапустить Apache:

  1. sudo /etc/init.d/apache2 restart

Прописываем защищаемый ресурс в конфигурацию Apache (файл .htaccess) файл .htaccess должен храниться в той папке, которую мы защищаем.

Так как мы хотим защитить папку Secret от постороннего вмешательства логином\паролем, создаем в ней файл:

  1. su root
  2. cd /var/www/Secret/
  3. touch .htaccess

далее ….

в этот файл вписываем следующее строки и сохраняем файл:

  1. sudo nano /home/booch/.htaccess
  2.  
  3. AuthType Basic
  4. AuthName "Private Area"
  5. AuthUserFile /home/booch/.htpasswd
  6. Require user mothes

Перезапуститe Apache:

  1. sudo /etc/init.d/apache2 restart

Теперь проверьте:
введите в браузере http://localhost/

теперь вы будете видеть только те папки, которые мы не защищали, т.е.

  • Public
  • WordPress

а папка Secret исчезнет из списка
чтобы получить к ней доступ введите в браузере http://localhost/Secret

после чего вылетит окно с запросом ввода логина и пароля такого вида:

Apache auth

Apache auth

Чтобы настроить групповой доступ, необходимо создать файл .htgroup такого вида:

  1. admins: alex peps
  2. users: anna dmitriy

т.е. теперь мы имеем две группы: admins и users. В группу admins входят пользователи alex и peps, в группу users – anna и dmitriy.

Далее видоизменяем файл .htaccess приводя его к виду:

  1. AuthType Basic
  2. AuthName "Private Area"
  3. AuthUserFile /home/booch/.htpasswd
  4. AuthGroupFile /home/booch/.htgroup
  5. Require group admins

Digest-аутентификация

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

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

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

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

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

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

Делаем:

  1. sudo htdigest -c /home/booch/.htpasswd personal mothes

После запуска команды нужно будет ввести пароль и его подтверждение.
В результате, мы получим файл /home/booch/.htpasswd

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

  1. sudo nano /var/www/Secret/.htaccess
  2. AuthType Digest
  3. AuthName personal
  4. AuthUserFile /home/booch/.htpasswd
  5. Require user mothes

Доступ к папке http://localhost/Secret будет иметь только пользователь mothes.

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

Создаем файл .htgroups следующего содержания

  1. admins: alex peps
  2. users: anna dmitriy

Далее видоизменяем файл .htaccess приводя его к виду:

  1. AuthType Digest
  2. AuthName personal
  3. AuthUserFile /home/booch/.htpasswd
  4. AuthGroupFile /home/booch/.htgroup
  5. Require group admins

РЕСУРСЫ:
1) http://httpd.apache.org/docs/2.2/ – документация на англ. языке.
2) http://httpd.apache.org/docs/2.2/howto/auth.html – настройка аутентификации и авторизации на англ. языке.

ФАЙЛЫ:
1) Пример файла httpd.conf
2) Перевод файла http.conf (pdf)
3) Пример файла .htaccess (tar.bz)


3 комментариев на запись “Настройка аутентификации и авторизации в веб-сервере Apache”

  1. 1 Anton сказала в 21:35, 11.11.2008:

    +1 информативно!

  2. 2 Vlad сказала в 13:35, 13.11.2008:

    Спасибо, без воды и по сути дела. Мне помогло!

  3. 3 Eugene сказала в 19:55, 14.04.2009:

    Кратко и по делу.