Апач-аутентификация из нескольких доменов в AD с помощью mod_authn_alias
Я использую Apache 2 и мне нужно аутентифицировать пользователей из нескольких доменов AD в одном <Location/>
, Я пытался использовать mod_authn_alias
ОС: Debian GNU / Linux Squueze с последними обновлениями
Apache/2.2.16
Модули
/etc/apache2/apache.conf:
<AuthnProviderAlias ldap first-ldap>
AuthLDAPURL "ldap://win2003server:389/DC=first,DC=domain?sAMAccountName?sub?(objectClass=*)" NONE
AuthLDAPBindDN "cn=user1,cn=Users,dc=first,dc=domain"
AuthLDAPBindPassword "user1"
</AuthnProviderAlias>
<AuthnProviderAlias ldap second-ldap>
AuthLDAPURL "ldap://win2008server:3268/DC=second,DC=domain?sAMAccountName?sub?(objectClass=*)" NONE
AuthLDAPBindDN "cn=user2,cn=Users,dc=second,dc=domain"
AuthLDAPBindPassword "user2"
</AuthnProviderAlias>
/ и т.д. / apache2 / сайты с поддержкой /000default:
<Location /test>
Order allow,deny
Allow from all
Authtype Basic
AuthBasicProvider first-ldap second-ldap
AuthName "TEST"
AuthzLDAPAuthoritative off
require valid-user
</Location>
При такой конфигурации он аутентифицирует пользователей из первого домена, а для пользователей из второго домена - ошибку:
[Fri Sep 16 20:54:39 2011] [info] [client 10.0.0.62] [25672] auth_ldap authenticate: user2 user2 authentication failed; URI /test/ [ldap_simple_bind_s() to check user2 credentials failed][Invalid credentials]
Когда я ухожу только AuthBasicProvider second-ldap
пользователи из второго домена могут успешно пройти аутентификацию, поэтому LDAP второго домена в порядке.
Кто-нибудь знает решение заставить mod_authn_alias работать?
2 ответа
Я нашел способ решения здесь: аутентификация-apache-httpd-против-нескольких-ldap-Servers-with-expired-account
Я использовал для тестирования учетную запись пользователя из второго домена, у которого была отключена одноименная учетная запись в первом домене. Удаление отключенной учетной записи помогло, но удаление учетных записей в домене AD является плохой практикой: вы можете получать объекты с неизвестными дескрипторами безопасности. Я создал LDAP фильтр для устранения отключенных пользователей, и теперь все работает отлично:)
файл /etc/apache2/apache2.conf:
<AuthnProviderAlias ldap first-ldap>
AuthLDAPURL "ldap://win2003server:389/DC=first,DC=domain?sAMAccountName?sub?(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" NONE
AuthLDAPBindDN "cn=user1,cn=Users,dc=first,dc=domain"
AuthLDAPBindPassword "user1"
</AuthnProviderAlias>
<AuthnProviderAlias ldap second-ldap>
AuthLDAPURL "ldap://win2008server:3268/DC=second,DC=domain?sAMAccountName?sub?(&(objectCategory=person)(objectClass=user))" NONE
AuthLDAPBindDN "cn=user2,cn=Users,dc=second,dc=domain"
AuthLDAPBindPassword "user2"
</AuthnProviderAlias>
Обратите внимание, что этот фильтр работает для домена AD с функциональным уровнем "Windows 2000 native" и не работает для домена AD с функциональным уровнем "Windows Server 2003", я не знаю почему.
Я не знаю, как заставить Apache делать то, что вы хотите. Однако вы можете настроить OpenLDAP в качестве прокси-сервера перед несколькими экземплярами AD, используя ldap
или же meta
бэкэнды, и вы получите такое же поведение. Вы указываете Apache на свой прокси OpenLDAP, а затем OpenLDAP связывается с вашими серверами AD.
Вот моя статья об использовании meta
бэкенд. Это скорее отправная точка, чем реальное решение.
Сейчас я на самом деле использую OpenLDAP в качестве прокси-сервера для аутентификации в трех отдельных каталогах - одном домене AD, одном удаленном сервере LDAP и локальном каталоге LDAP.