Ключевые слова:apache, auth, ldap, (найти похожие документы)
From: Roman Shramko <http://dormestmass.blogspot.com>
Date: Mon, 30 Dec 2007 14:31:37 +0000 (UTC)
Subject: Аутентификация в Apache из LDAP
Оригинал: http://dormestmass.blogspot.com/2006/10/apache-ldap.html
Продолжая тему LDAP-аутентификации...
Подключив squid к ActiveDirectory, захотелось использовать подобную
аутентификацию в апаче.
Сам apache (я использую Apache 2.0) должен быть собран с поддержкой
LDAP. Для аутентификации служит модуль mod_auth_ldap.
Немного теории из документации.
Процесс предоставления доступа пользователю к ресурсу включает в себя
две фазы.
Первая фаза - аутентификация, при которой mod_auth_ldap проверяет пару
имя_пользователя/пароль на правильность. Она называеться search/bind
фаза.
Вторая фаза - авторизация. Модуль проверяет, разрешен ли
аутентифицированному пользователю доступ к запрошенному ресурсу. Эта
фаза называеться compare.
Фаза аутентификации.
Во время этой фазы mod_auth_ldap ищет в каталоге запись,
соответствующую имени пользователя, которое передал HTTP клиент. Если
найдено уникальное единичное соответствие, модуль пытаеться
прибиндиться к серверку каталога, используя DN вхождения и пароль,
переданный HTTP клиентом.
Если привязка не удалась, то доступ запрещается или отклоняется.
Фаза авторизации.
На этом этапе модуль пытается определить, авторизирован ли
пользователь для доступа к запрашиваему ресурсу.
Модуль принимает следующие директивы Require для определения доступа к
ресурсу:
* Разрешить доступ, если есть директива require valid-user;
* Разрешить доступ, если есть директива require user и имя
пользователя в директиве совпадает с именем пользователя, переданным
клиентом;
* Разрешить доступ, если есть директива require dn и DN, указанный в
директиве, совпадает с DN, полученным из каталога;
* Разрешить доступ, если есть директива require group и DN, полученный
из каталога, входит в указанную LDAP группу;
* Разрешить доступ, если есть директива require ldap-attribute и
атрибут, полученный из каталога, совпадает с указанным атрибутом;
* В иных случаях запретить доступ.
Полная документация по модулю расположена здесь
Итак, убеждаемся, что модуль у нас подключен, т.е. присутствует
директивы
LoadModule ldap_module _path_to_module_/mod_ldap.so
LoadModule auth_ldap_module _path_to_module_/mod_auth_ldap.so
в файле конфигурации апача.
Создаём в защищаемом каталоге файл .htaccess. Предполагаю, что в
настойках сервера разрешено переопределение директив, которые
относяться к аутентификации/авторизации (Директива AllowOverride).
Содержимое файла приблизительно следующее:
# cat .htaccess
AuthType Basic
AuthName "Our protected resource"
AuthLDAPURL ldap://ad.domain.com/dc=domain,dc=com?sAMAccountName
AuthLDAPBindDN _valid_DN_to_bind_with_
AuthLDAPBindPassword _valid_password_
require user user1 user2
К сожалению директива require group применительно к ActiveDirectory не
работает. Поиск решения этой проблемы результатов не дал. Однако ради
интереса попробовал аутентифицировать с Netscape Directory Server -
всё работает.
в Active Directory работает по группам:
AuthLDAPURL ldap://dc.dom.local:389/ou=Company1,dc=dom,dc=local?sAMAccountName
AuthLDAPBindDN cn=auto,cn=Users,dc=dom,dc=local
AuthLDAPBindPassword war
require group cn=Nagios_Users,cn=Users,dc=dom,dc=local