Dormestmass: Админ — это состояние души

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

  • Да работает «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

Вы можете следить за обсуждением с помощью RSS 2.0 ленты.