mod_authnz_ldap:使用 userPrincipalName 和 sAMAccountName 与 AuthzSVNAccessFile

mod_authnz_ldap:使用 userPrincipalName 和 sAMAccountName 与 AuthzSVNAccessFile

这是我在这里的第一篇帖子,所以请善待我......

我们的 subversion 服务器由 apache 管理访问。目前用户只能使用 sAMAccountName 登录,但由于 userPrincipalName(电子邮件地址)正逐渐成为大多数登录的主要 ID,我们希望支持该 ID 并继续支持 sAMAccountName。

当前方法如下所示,其缺点是必须在 svnaccessfile 中指定两个用户名 - sAMAccountName 和 userPrincipalName:

<AuthnProviderAlias ldap ldap-sAMAccountName>
    AuthLDAPBindDN "CN=d-svn-ldap,OU=IT-050,OU=Service Accounts,OU=Accounts,OU=Domain Administration,DC=cds,DC=company"
    AuthLDAPBindPassword ***
    AuthLDAPUrl "ldap://server.company:3268/DC=cds,DC=company?sAMAccountName?sub?(objectclass=user)"
</AuthnProviderAlias>
<AuthnProviderAlias ldap ldap-userprincipalname>
    AuthLDAPBindDN "CN=d-svn-ldap,OU=IT-050,OU=Service Accounts,OU=Accounts,OU=Domain Administration,DC=cds,DC=company"
    AuthLDAPBindPassword ***
    AuthLDAPUrl "ldap://server.company:3268/DC=cds,DC=company?userPrincipalName?sub?(objectclass=user)"
</AuthnProviderAlias>

<Location "/our_repo">
DAV svn
SVNPath /svn/repos/our_repo
SVNListParentPath on

AuthzSVNAccessFile /etc/apache2/conf-available/authz_repository_our_repo
Options Indexes Followsymlinks

AuthBasicProvider ldap-sAMAccountName  ldap-userprincipalname

AuthType Basic
AuthName "LDAP authentication"
Require valid-user
# Note that Require ldap-* would not work here, since the
# AuthnProviderAlias does not provide the config to authorization providers
# that are implemented in the same module as the authentication provider.
</Location>

因此,我正在寻找一种能够在 svnaccessfile 中仅指定 userPrincipalNames 的方法。我希望 AuthLDAPRemoteUserAttribute 可以在这里提供帮助,因此我添加了 AuthLDAPRemoteUserAttribute userPrincipalNameldap-sAMAccountName,这导致 error.log 中出现此消息:

auth_ldap 验证:REMOTE_USER 应设置属性“userPrincipalName”,但用户的 LDAP 查询中未请求此属性。REMOTE_USER 将根据需要恢复为用户名或 DN。

这是正确的方法吗?这有可能吗?

谢谢

弗洛

答案1

灵感来自https://svn.haxx.se/users/archive-2010-04/0011.shtml我们再次尝试并找到了如何查询 ldap 两个字段的解决方案:

<AuthnProviderAlias ldap ldap-sAMAccountName>
    AuthLDAPBindDN "CN=d-svn-ldap,OU=IT-050,OU=Service Accounts,OU=Accounts,OU=Domain Administration,DC=cds,DC=company"
    AuthLDAPBindPassword ***
    AuthLDAPRemoteUserIsDN on
    AuthLDAPUrl "ldap://server.company:3268/DC=cds,DC=company?sAMAccountName,userPrincipalName?sub?(objectclass=*)"
    AuthLDAPRemoteUserAttribute userPrincipalName
</AuthnProviderAlias>

最后一行将REMOTE_USER变成了userPrincipalName的内容。

由于我们公司的 userPrincipalName 包含带有一些大写字母的电子邮件地址,因此我们必须在 svnaccessfile 中使用完全相同的电子邮件地址大小写。

为了仅使用 userPrincipalName 而不使用用户输入的内容(REMOTE_USER),我们还必须为其他 AutnProviderAlias 指定 AuthLDAPRemoteUserAttribute:

<AuthnProviderAlias ldap ldap-userprincipalname>
    AuthLDAPBindDN "CN=d-svn-ldap,OU=IT-050,OU=Service Accounts,OU=Accounts,OU=Domain Administration,DC=cds,DC=company"
    AuthLDAPBindPassword ***
    AuthLDAPUrl "ldap://server.company:3268/DC=cds,DC=company?userPrincipalName?sub?(objectclass=user)"
    AuthLDAPRemoteUserAttribute userPrincipalName
</AuthnProviderAlias>

我们还必须改变提供商的顺序:

AuthBasicProvider ldap-userprincipalname ldap-sAMAccountName  

附注:error.log 仅显示由于 ldap 结果而导致的拒绝,svnaccessfile 中缺少的权限不会显示在那里。因此,无需重新启动 apache 或删除浏览器登录即可看到 svn accessfile 中的更改。

相关内容