我正在为通过 RHEL 5 系统上的 Apache 托管的 Subversion 存储库设置 LDAP 身份验证。当我尝试针对 Active Directory 进行身份验证时,我遇到了两个不同的问题。
<Location /svn/>
Dav svn
SvnParentPath /srv/subversion
SVNListParentPath On
AuthType Basic
AuthName "Subversion Repository"
AuthBasicProvider ldap
AuthLDAPBindDN "cn=userfoo,ou=Service Accounts,ou=User Accounts,dc=my,dc=example,dc=com"
AuthLDAPBindPassword "mypass"
AuthLDAPUrl "ldap://my.example.com:389/ou=User Accounts,dc=my,dc=example,dc=com?sAMAccountName?sub?(objectClass=user)" NONE
Require valid-user
</Location>
如果我使用上述配置,它会不断提示我基本提示,最终我必须选择取消,这将返回 401(需要授权)。如果我注释掉绑定部分,它会返回 500(内部服务器错误),提示身份验证失败:
[Mon Nov 02 12:00:00 2009] [warn] [client x.x.x.x] [10744] auth_ldap authenticate: user myuser authentication failed; URI /svn [ldap_search_ext_s() for user failed][Operations error]
当我使用 ldapsearch 和 filter 对简单属性执行绑定时,它会正确返回:
ldapsearch -h my.example.com -p 389 -D "cn=userfoo,ou=Service Accounts,ou=User Accounts,dc=my,dc=example,dc=com" -b "ou=User Accounts,dc=my,dc=example,dc=com" -w - "&(objectClass=user)(cn=myuser)" sAMAccountName
不幸的是,我无法控制或了解系统的 AD 部分,只能控制 RHEL 服务器。有人知道这里挂断了什么吗?
答案1
我遇到了同样的问题。我在 Ubuntu 上测试的相同配置在 RHEL5 上不起作用。我最终将端口从 389 更改为 3268读完此文后这解决了我的问题。
答案2
将您的配置与 Apache 2.2.3 上的 Active Directory 的工作配置进行比较,我看到的唯一区别是:
- 我使用“DOMAIN\sAMAccountName”样式的用户名作为我的
AuthLDAPBindDN
NONE
我没有AuthLDAPURL
除了这些建议之外,我还建议运行tcpdump
Apache 和 Active Directory 之间的对话,以查看那里可能发生的事情。
答案3
我不了解 LDAP,因为我的设置使用了 SSPI 身份验证。但我发现这些页面提供了有关 LDAP 配置的详细信息。(以防您还没有找到它们):
http://blogs.open.collab.net/svn/2009/03/subversion-with-apache-and-ldap-updated.html
Apache 版本似乎对语法有所影响。
还有 LDAP 模块的加载顺序。
答案4
事实证明我几乎已经做到了。我只是错过了AuthzLDAPAuthoritative off
特定于我的实例的指令。
另外需要注意的是,我们还希望将 repo 限制为仅识别的用户,因此我们也将身份验证与文件链接起来。示例如下:
RedirectMatch ^(/repos)$ $1/
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /repos/>
DAV svn
SVNParentPath /var/svn/repos
SVNListParentPath On
SVNAutoversioning On
AuthType Basic
AuthName "Subversion Repository"
AuthBasicProvider file ldap
AuthzLDAPAuthoritative off
AuthLDAPBindDN "OU=Service Accounts,OU=User Accounts,DC=example,DC=com"
AuthLDAPBindPassword xXxXxXx
AuthLDAPUrl "ldap://ldap.example.com:389/OU=User Accounts,DC=example,DC=com?sAMAccountName?sub?(objectClass=user)"
AuthzSVNAccessFile /etc/svn-authn
SVNIndexXSLT "/styles/svnindexICore.xsl"
AuthUserFile /etc/svn-auth-file
#AuthBasicProvider file ldap
Require valid-user
</Location>