我正在配置 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
答案2
我要把这个给达夫无论如何,因为他的链接让我找到了真正的问题。我无法像 daff 建议的那样让过滤工作,但我确实找到了问题。
引导我找到解决方案的陈述是:
由于我们运行的是相当相似的设置(但没有使用 AD),我检查了我们的配置并发现不能将 Require ldap-group 与 Subversion 的授权功能一起使用。
几个链接达夫建议对此进行评论并且没有提供任何解决方案,除了使用过滤,但我似乎无法使用它。
然后我决定看看http.conf
Collabnet 提供了哪些功能。以下是我看到的内容:
#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
,但我没有放入它,但现在它可以工作了。