Апач-аутентификация из нескольких доменов в 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.

Другие вопросы по тегам