我想配置SVN,使其与外部服务进行通信以进行授权。外部服务将有其逻辑来决定用户对路径的访问类型。当用户访问SVN时,它应该进行身份验证,然后联系授权服务以获取访问详细信息 - 读/写/删除等。这是否可行以及如何配置SVN来实现此目的。假设授权服务已经可用。
答案 0 :(得分:0)
您在谈论什么类型的授权服务。 Subversion不授权。相反,它将授权传递给另一个服务。您可以使用任何适用于Apache httpd的服务(如LDAP和Active Directory)。您还可以使用svnserve
上的SASL连接到其他服务(例如LDAP和Active Directory)。
这些授权服务中的大多数都是您拥有或无权访问您的Subversion存储库。也就是说,一旦用户被认证,该用户将具有读/写(即,可以读取和签出文件并提交改变)。我有一个pre-commit hook与LDAP和Active Directory一起使用来控制写访问(即提交访问)。用户仍然可以读取存储库,但不能写入存储库。
您可以(通过Subversion本身)通过Subversion本身甚至通过Apache httpd来控制预目录访问。
然而,没有更多信息(你在谈论什么类型的服务?你想要限制什么?你的目标是什么?你是否需要限制读写或只写?)很难给你一个更具体的答案。
答案 1 :(得分:0)
我实现此方法以允许控制谁具有读取或读取/写入访问权限的方式是使用Apache中提到的Apache内部的本机AuthzSVNAccessFile方法。
SVN访问文件我是从一个定期轮询LDAP的单独进程驱动的。
在LDAP中我已经定义了一个自定义objectClass AuthGroupOfNames ,其中包含几个属性 memberRead 和 memberWrite ,其设计与正常的组属性成员非常相似。
因此,我的LDAP中的特定SVN存储库集的条目如下所示:
dn: cn=repo,ou=svn,dc=example,dc=com
cn: repo
objectClass: top
objectClass: AuthGroupOfNames
owner: uid=user1,dc=example,dc=com
description: Example SVN Repository
memberWrite: uid=user1,dc=example,dc=com
memberWrite: uid=user2,dc=example,dc=com
memberRead: uid=user3,dc=example,dc=com
在此示例中,用户 user1 和 user2 具有读/写访问权限,而 user3 只具有读取权限。
SVN服务器上的cronjob定期检查每个已配置存储库的LDAP条目,并相应地重写SVN acl文件。对于此示例,acl文件将按如下方式编写:
[repo:/]
user1 = rw
user2 = rw
user3 = r