Аутентификация в Apache из LDAP
Продолжая тему 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 — всё работает.
Вот собственно и всё.
Популярность: 7%
Похожие заметки
Squid и LDAP-аутентификация из Active DirectoryAутентификация Squid+Kerberos c LDAP авторизацией в Active Directory
Squid: привязка имени пользователя к IP
Фильтры для поиска в LDAP
Roman Shramko
5 Сен, 2011
Да работает «require group», правда, в этом случае «require ldap-group». Например так:
AuthName «Auth LDAP»
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPURL «ldap://[Host]/ou=directory,dc=domain,dc=com?sAMAccountName?sub?(objectclass=user)»
AuthLDAPBindDN [Domain\\Username]""
AuthLDAPBindPassword [Password]""
Require ldap-group cn=group1,ou=subdirectory,ou=directory,dc=domain,dc=com
Require ldap-group cn=group2,ou=subdirectory,ou=directory,dc=domain,dc=com