LDAP 身份验证失败,错误代码为 500 或 401,具体取决于 Apache2 的绑定

LDAP 身份验证失败,错误代码为 500 或 401,具体取决于 Apache2 的绑定

我正在为通过 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

除了这些建议之外,我还建议运行tcpdumpApache 和 Active Directory 之间的对话,以查看那里可能发生的事情。

答案3

我不了解 LDAP,因为我的设置使用了 SSPI 身份验证。但我发现这些页面提供了有关 LDAP 配置的详细信息。(以防您还没有找到它们):

http://blogs.open.collab.net/svn/2009/03/subversion-with-apache-and-ldap-updated.html

http://www.novell.com/communities/node/5679/installing-and-configuring-subversion-server-and-apache2-ldap-authentication-against-edire

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>

相关内容