Apache httpd LDAP 集成

Apache httpd LDAP 集成

我正在配置 CollabNet Subversion 集成。我有以下collabnet_subversion.conf文件:

<Location /svn>
  DAV svn
  SVNParentPath /mnt/svn/new_repos
  SVNListParentPath on
  AuthName "VegiBanc Source Repository"
  AuthType basic
  AuthzLDAPAuthoritative off
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldap.vegibanc.com/dc=vegibanc,dc=com?sAMAccountName" NONE
  AuthLDAPBindDN "CN=SVN-Admin,OU=Service Accounts,OU=VegiBanc Users,OU=vegibanc,DC=vegibanc,DC=com"
  AuthLDAPBindPassword "swordfish"
</Location>

这很好。我们 Active Directory 中的任何用户都可以访问我们的 Subversion 存储库。

现在,我想将此限制为仅限 Active Directory 组中的人员发展

<Location /svn>
  DAV svn
  SVNParentPath /mnt/svn/new_repos
  SVNListParentPath on
  AuthName "VegiBanc Source Repository"
  AuthType basic
  AuthzLDAPAuthoritative off
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldap.vegibanc.com/dc=vegibanc,dc=com?sAMAccountName" NONE
  AuthLDAPBindDN "CN=SVN-Admin,OU=Service Accounts,OU=VegiBanc Users,OU=VegiBanc,DC=vegibanc,DC=com"
  AuthLDAPBindPassword "swordfish"
  Require ldap-group CN=Development, OU=Security Groups, OU=VegiBanc, dc=vegibanc, dc=com
</Location>

我添加了Require ldap-group,但现在没有人可以登录。我已LogLevel设置为debug,但我得到的只是这个error_log(为方便阅读,单行分解):

[Thu Oct 11 13:09:28 2012] [info] [client 10.55.9.45] [6752] 
    vauth_ldap authenticate: user dweintraub authentication failed;
    URI /svn/ [ldap_search_ext_s() for user failed][Bad search filter]

而且,我在我的access_log

10.55.9.45 - - [11/Oct/2012:13:09:27 -0500] "GET /svn/ HTTP/1.1" 401 401
10.55.9.45 - dweintraub [11/Oct/2012:13:09:28 -0500] "GET /svn/ HTTP/1.1" 500 535

是的,我属于该组。(或者,至少我该如何确认以确保这不是问题所在。我有 SysinternalsSuite ADExplorer。这是我获取所有信息的地方。)

答案1

您没有正确指定组的 DN,您可以从错误消息中看到。它可能应该如下所示:

Require ldap-group CN=Development,OU=Security Groups,OU=VegiBanc,dc=vegibanc,dc=com

编辑:由于这似乎不是问题,请确保您有

AuthLDAPGroupAttribute member uniquemember
AuthLDAPGroupAttributeIsDN on

设置,我认为这对于您的 AD 环境来说是正确的。这些是默认设置,mod_authnz_ldap但只有明确设置它们才能有所帮助。

我真的没有其他想法,你的配置看起来是正确的。我只是想知道为什么你Require原来的配置中没有指令。但你说它正在工作,所以也许它默认为Require valid-user

编辑2:由于我们运行的是相当相似的设置(但没有 AD),我检查了我们的配置,发现不能Require ldap-group与 Subversion 的授权功能一起使用。记录在此处:https://ctf.open.collab.net/sf/go/artf4917。在我们的情况下,这不是一个问题,因为我们使用AuthzSVNAccessFile进行授权。Require ldap-group似乎只是表现得像Require valid-user

这并没有真正向我解释为什么您会收到“错误的搜索过滤器”消息,但为了仅允许开发组的成员访问该/svn位置,您应该AuthLDAPURL使用组过滤器扩展并删除该Require ldap-group指令。由于您使用的是 AD,因此您可以使用memberOf以下方法:

AuthLDAPURL ldap://ldap.vegibanc.com/dc=vegibanc,dc=com?sAMAccountName?sub?(&(objectCategory=person)(memberOf=CN=Development,OU=Security Groups,OU=VegiBanc,dc=vegibanc,dc=com)) NONE

更多详细信息请点击这里:

http://subversion.open.collab.net/ds/viewMessage.do?dsForumId=3&dsMessageId=417401

https://ctf.open.collab.net/sf/wiki/do/viewPage/projects.svnedge/wiki/FrequentlyAskedQuestions#section-FrequentlyAskedQuestions-HowCanIRestrictLogonToMembersOfAParticularGroup

答案2

我要把这个给达夫无论如何,因为他的链接让我找到了真正的问题。我无法像 daff 建议的那样让过滤工作,但我确实找到了问题。

引导我找到解决方案的陈述是:

由于我们运行的是相当相似的设置(但没有使用 AD),我检查了我们的配置并发现不能将 Require ldap-group 与 Subversion 的授权功能一起使用。

几个链接达夫建议对此进行评论并且没有提供任何解决方案,除了使用过滤,但我似乎无法使用它。

然后我决定看看http.confCollabnet 提供了哪些功能。以下是我看到的内容:

#LoadModule python_module      opt/CollabNet_Subversion/modules/mod_python.so
LoadModule dav_svn_module     opt/CollabNet_Subversion/modules/mod_dav_svn.so
LoadModule authz_svn_module   opt/CollabNet_Subversion/modules/mod_authz_svn.so
#LoadModule dontdothat_module  opt/CollabNet_Subversion/modules/mod_dontdothat.so

啊!它们正在加载authz_svn_module!我只是禁用了它:

#LoadModule python_module      opt/CollabNet_Subversion/modules/mod_python.so
LoadModule dav_svn_module     opt/CollabNet_Subversion/modules/mod_dav_svn.so
#LoadModule authz_svn_module   opt/CollabNet_Subversion/modules/mod_authz_svn.so
#LoadModule dontdothat_module  opt/CollabNet_Subversion/modules/mod_dontdothat.so

然后回到我的___original____配置collabnet_subversion.conf

<Location /svn>
  DAV svn
  SVNParentPath /mnt/svn/new_repos
  SVNListParentPath on
  AuthName "VegiBanc Source Repository"
  AuthType basic
  AuthzLDAPAuthoritative off
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldap.vegibanc.com/dc=vegibanc,dc=com?sAMAccountName" NONE
  AuthLDAPBindDN "CN=SVN-Admin,OU=Service Accounts,OU=VegiBanc Users,OU=VegiBanc,DC=vegibanc,DC=com"
  AuthLDAPBindPassword "swordfish"
  Require ldap-group CN=Development, OU=Security Groups, OU=VegiBanc, dc=vegibanc, dc=com
</Location>

现在,它的效果非常好!

谢谢 daff 的帮助。我认为我的问题是我需要过滤器Require valid-user,但我没有放入它,但现在它可以工作了。

相关内容