Subversion结合Active Directory认证失效问题求助
问题分析与解决方案
看起来你踩了两个常见的Apache LDAP授权配置坑,导致RO用户无法正常访问。我们一步步拆解问题:
核心问题1:读写操作的权限规则完全搞反了
你配置里的<Limit MKACTIVITY PROPPATCH PUT ...>包含的都是写操作(比如修改、提交、删除版本库内容的动作),而<LimitExcept>对应的是剩下的读操作(比如浏览、检出代码)。但你的注释和权限规则完全写反了——你给写操作开放了RO和RW组,却要求读操作必须属于RW组,这直接导致RO用户执行读操作时被拒绝。
核心问题2:多余的<RequireAll>强制所有规则必须通过
<RequireAll>的作用是要求内部所有授权规则都满足才能通过,但RO用户本身不属于RW组,所以当他们执行读操作时,会触发<LimitExcept>里的RW组要求,被<RequireAll>整体拒绝。
修正后的完整配置
<Location /puppet/> AuthType basic AuthName "Subversion Puppet" AuthBasicProvider ldap AuthLDAPBindDN ldapbind@mydomain.de AuthLDAPBindPassword secretpassword AuthLDAPURL "ldaps://ldap01.mydomain.de:3269 ldap02.mydomain.de:3269/?sAMAccountName?sub" AuthLDAPGroupAttributeIsDN off # 写操作:仅允许RW组用户执行(提交、修改等动作) <Limit MKACTIVITY PROPPATCH PUT CHECKOUT MKCOL MOVE COPY DELETE LOCK UNLOCK MERGE> Require ldap-attribute memberOf="CN=RW-USERGROUP,OU=Subversion,OU=Groups,DC=MYDOMAIN,DC=DE" </Limit> # 读操作:允许RO和RW组用户执行(浏览、检出等动作) <LimitExcept MKACTIVITY PROPPATCH PUT CHECKOUT MKCOL MOVE COPY DELETE LOCK UNLOCK MERGE> <RequireAny> Require ldap-attribute memberOf="CN=RO-USERGROUP,OU=Subversion,OU=Groups,DC=MYDOMAIN,DC=DE" Require ldap-attribute memberOf="CN=RW-USERGROUP,OU=Subversion,OU=Groups,DC=MYDOMAIN,DC=DE" </RequireAny> </LimitExcept> DAV svn SVNParentPath /srv/svn/puppet SVNListParentPath on </Location>
关键修改说明
- 移除
<RequireAll>标签:<Limit>和<LimitExcept>已经独立定义了不同操作的授权规则,不需要强制所有规则同时满足。 - 修正权限与操作的对应关系:
- 写操作只开放给RW组,确保只有有权限的用户能修改版本库;
- 读操作开放给RO和RW组,符合你“RO只读、RW读写”的需求。
- 调整
<RequireAny>的位置:把它放在读操作的<LimitExcept>里,确保读操作时只要用户属于两个组中的一个即可通过授权。
结合日志的验证
你的日志里多次出现authorization result of <RequireAll>: denied,就是因为RO用户不满足<LimitExcept>里的RW组要求,被<RequireAll>强制拒绝。修正后,读操作的规则只会检查用户是否属于RO或RW组,RO用户就能正常通过认证和授权了。
内容的提问来源于stack exchange,提问作者user1989746
相关产品推荐
相关产品推荐

