使用 mod_authn_alias 从 AD 中的多个域进行 Apache 身份验证

使用 mod_authn_alias 从 AD 中的多个域进行 Apache 身份验证

我正在运行 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>

在 /etc/apache2/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 是可以的。

有谁知道强制 mod_authn_alias 工作的解决方案吗?

答案1

ldap我不知道如何让 Apache 按照你的意愿行事。但是,你可以使用或后端将 OpenLDAP 设置为多个 AD 实例前面的代理meta,这将有效地实现相同的行为。你将 Apache 指向你的 OpenLDAP 代理,然后 OpenLDAP 会与你的 AD 服务器通信。

这里这是我关于使用后端的文章meta。这更像是一个起点,而不是一个实际的解决方案。

实际上,我现在正在使用 OpenLDAP 作为代理来针对三个独立的目录(一个 AD 域、一个远程 LDAP 服务器和一个本地 LDAP 目录)进行身份验证。

答案2

我在这里找到了解决方法:使用过期帐户对多个 ldap 服务器进行 apache httpd 身份验证

我用来测试第二个域中的用户帐户,该帐户在第一个域中具有同名的禁用帐户。删除禁用帐户有帮助,但删除 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>

请注意,此过滤器适用于功能级别为“windows 2000 native”的 AD 域,而不适用于功能级别为“windows server 2003”的 AD 域,我不知道为什么。

相关内容