我正在运行 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 域,我不知道为什么。