четверг, 2 декабря 2010 г.

Apache и авторизация в LDAP

В общем openldap уже установлен, не настроены резервные копии, синхронизации, защита доступ =), но для тестовых целей вполне себе работоспособный. При установке apache обратите внимание на наличие USE-флагa ldap (напоминаю: речь идет о Gentoo) и APACHE2_MODULES="auth_basic", остальное по вкусу.

После установки apache необходимо подключить модули ldap через конфигурацию стартового скрипта. В файле /etc/conf.d/apache2 необходимо домбавить к ключам запуска APACHE2_OPTS следующие параметры -D AUTHNZ_LDAP -D LDAP.

Настройку самого apache я опускаю, т.к. это не принципиально. Ключевым в авторизации являются параметры для ldap модулей. Это можно делать в основых файлах конфигурации и/или в файле .htaccess. Для настройки я создал каталог в корне сайта и в нем создал файл .htaccess. Таким образом доступ к содержимому этого каталога и его подкаталогов будет возможно только при успешной базовой автризации.

Для тестов у меня уже создан пользователь U1 входящий в группу G1 в подразделении O1 дерева ldap site.local.

Для базовой авторизации создал файл .htaccess:

# .htaccess
# Это сообщение будет появляться в окне базовой авторизации для ввода имени и пароля
AuthName "restricted"
# Тип авторизации базовый
AuthType Basic
# Авторизация будетп производится через ldap
AuthBasicProvider ldap
# Ветка каталога ldap для поиска и авторизации пользователей
AuthLDAPURL "ldap://localhost/ou=Users,ou=OWN,dc=site,dc=local"
# Имя пользователя и пароль с которым apache будет обращаться к ldap
# для работы
AuthLDAPBindDN cn=glav,dc=site,dc=local
AuthLDAPBindPassword пароль


Теперь можно проверять и искать ошибки =). Описанная конфигурация проверят наличие пользователя в ветке каталога ldap и его пароль.

Дальше будет чуть чуть интереснее . Надо убедиться, что пользоатель не просто находится в каталоге ldap и пароль верен, но состоит в нужной группе. Для этого добавляем к нашему .htaccess еще несколько строк:

# Атрибут группы в которой надо проверять наличие пользователя
AuthLDAPGroupAttribute uniqueMember
# Указываем, что пользователи в группе записаны с полным именем dn
AuthLDAPGroupAttributeIsDN on
# Требуем обязательно проверки по группе g1
Require ldap-group cn=o1,ou=o1,dc=site,dc=local


После этого я наступил на шикарные грабли. Так как apache выполняет поиск в ldap-каталоге, необходимо соответствующие поля поиска проиндексировать. В нашем случае проиндексированными должны быть: cn, uid, uniqueMember. Для этого добавляем в файл конфигурации openldap /etc/openldap/slapd.conf следующие параметры:

index uid eq
index cn eq
index uniqueMember eq

Далее останавливаем сервер ldap и индексируем базы:

#/etc/init.d/slapd stop
#slapindex -f /etc/openldap/slapd.conf

После индексации (Важно!) не забудьте установить права для ldap на все файлы базы:

#chown ldap:ldap /var/lib/openldap-data/*

Запустите заново openldap и проверяйте как все это хозяйство работает.

Комментариев нет: