Apache DAV SVN LDAP和AuthzSVNAccessFile

我正在一个项目中,我有一个ApacheDS包含所有用户和他们的组成员资格。 组成员身份都存储为每个组的成员属性,我做了一个架构修改,所以我也有每个用户的memberOf属性,使得在做授权时检查组成员资格是微不足道的。 我需要让用户根据他们的组成员身份访问Subversion版本库,并立即启动并运行。

然而,我的客户刚告诉我,他在指定要求时忘了提到一个“轻微”的细节。 他们显然也有一些存储库,他们需要对某些子文件夹有更严格的要求。 所以想出一个简单的解决scheme,我想我可以简单地结合我的LDAP要求指令与AuthzSVNAccessFile指令。

这是我的configuration:

<Location /TestClosedProject> SVNPath /repos/TestClosedProject SVNListParentPath on # Include shared LDAP settings, binddn, passwords, ldapurl etc. Include /svn/conf/ldapCommonSettings # LDAP Authentication & Authorization is final; do not check other databases AuthzLDAPAuthoritative on AuthName "TestClosedProject" # Admin group has full access Require ldap-attribute memberOf=cn=TestProject-admins,ou=groups,dc=somedomain,dc=somecountry # Members group has read-only access <Limit GET PROPFIND OPTIONS REPORT> Require ldap-attribute memberOf=cn=TestProject-members,ou=groups,dc=somedomain,dc=somecountry </Limit> </Location> 

这允许TestProject成员中的任何人阅读/ TestProject中的代码,并且Test-admins具有完全访问权限。

但是,当我在上面的configuration中插入AuthzSVNAccessFile /svn/conf/TestClosedProject.svnAuth时,我们可以在svnAuth文件中重写需要ldap-attribute指令,方法是指定在LDAP中存在的用户,但不是-admins也不是成员组。 /svn/conf/TestClosedProject.svnAuth的内容:

 [groups] supporters = jrf,agata admins = fj,jrf members = fj,jrf [/] * = @members = r @admins = rw [TestClosedProject:/support] @supporters = rw @members = r 

有问题的情况是

  • 他们的LDAP非常频繁/自动更新
  • 而svnAuth文件是由手工维护的
    • 因此,如果例如员工被解雇/退出,他将自动从TestProject-members / TestProject-admins组中移除 – 但由于其他一些内部系统,他将继续成为LDAP中的用户,但没有“项目组”成员身份。 只要没有svnAuth文件允许他访问项目文件夹,这将工作正常。
    • 由于svnAuth文件是手工维护的,因此通常不会像LDAP组成员一样定期更新 – 因此,被解雇的员工实际上仍然会在svnAuth文件中被提及,因此可以访问存储库,即使他不是任何所需组别中的成员更长。

有什么办法可以设置这个,以便只有成员或pipe理员LDAP组中的用户可以使用svnAuth文件进行访问? 基本上我只是想拒绝任何人在这两个组中的任何一个访问到svnAuth文件之前 – 这是可能的 – 如果是这样,我该如何指定?

以下是我如何pipe理存储库访问:

  1. 每个存储库都有一个“admin”目录,其中包含authz文件
  2. 我设置了authz文件,以限制对“admin”目录的访问权限到存储库的“所有者”。
  3. 我有一个cron作业检查“admin”目录中的更改,并将authz文件复制到存储库中。

我不在Apacheconfiguration中做任何事情“需要有效的用户”(这种方式Apache只需要重新启动时添加新的存储库)。

通过这种方式,我可以将存储库权限的所有维护卸载到存储库的所有者。 这可能不会直接解决您的问题,因为它不包含任何LDAP组,但是这个解决scheme在数百个存储库中为我工作了好几年。

不知道这是纯粹的开源,但我知道WANdisco的商业产品,Subversion访问控制可以处理这个。 该产品不是authz文件,而是拥有自己的适用于用户的组和规则列表。 来自组的成员来自轮询活动目录服务器,所以这应该满足要求。

http://www.wandisco.com/subversion/accesscontrol