LINUX.ORG.RU
решено ФорумAdmin

Apache LDAP авторизация 2-х AD trusted domains


0

1

Имеем: 2 домена AD, установлено взаимное доверие, пользователи одного могут авторизовываться в другом и наоборот. Apache с LDAP авторизацией. Вопрос: как сделать авторизацию на определённый Location так, чтобы там могли авторизовываться пользователи обоих доменов? Для одного домена всё выглядит просто:

Authtype Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthName "ENTER YOUR WINDOWS LOGIN"

AuthLDAPURL "ldap://dc:389/DC=domain,DC=name?sAMAccountName?sub?(objectClass=*)" NONE
AuthLDAPBindDN "cn=ldap_user,cn=Users,dc=domain.name"
AuthLDAPBindPassword "ldap_password"
require valid-user

А как сделать для двух не знаю. Пробовал

AuthBasicProvider ldap ldap
и потом указывать по два варианта AuthLDAPURL, AuthLDAPBindDN и AuthLDAPBindPassword - не подходит, последний вариант тупо перекрывает первый.

★★★
Ответ на: комментарий от no-dashi

Вариант, но очень уж хитро. Никак нельзя сказать apache, чтобы при фейле попытки авторизации через один LDAP, он повторял попытку авторизации через второй?

selivan ★★★
() автор топика

Нашлось решение: http://httpd.apache.org/docs/2.2/mod/mod_authn_alias.html. К сожалению, у меня не работает :(

ОС: Debian GNU/Linux Squueze
Apache/2.2.16

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>

sites-enabled/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 второго домена в порядке.

Куда копать дальше?

selivan ★★★
() автор топика

Всё, работает :)

Проблема была в том, что для я использовал аккаунт пользователя из второго домена, для которого есть одноимённый disabled аккаунт в первом. А если в первом находится disabled аккаунт, то mod_authn_alias считает, что authentification failed, и не дёргает второй auth provider. Добавил фильтр для отсеивания disabled пользователей, теперь мои волосы всегда гладкие и шелковистые :)

Внимание: фильтр работает для AD домена функционального уровня «windows 2000 native», и не работает для уровня «windows server 2003».

    <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>
selivan ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.