我们正在使用berkeley-db来授权svn-access。
我们的配置如下:
<Location /svn>
AuthType basic
AuthName "svn Authentication"
AuthBasicProvider dbm
AuthDBMUserFile /****/userDatabase.db
AuthDBMType db
AuthDBMGroupFile /****/userDatabase.db
AuthzDBMType db
SSLRequireSSL
</Location>
直到这里一切正常,人们可以根据各自的群体获取访问权限。不,我想/需要添加一些特定用户来获取(只读)访问一个存储库而不更改其组。我尝试了以下
<Location /svn/administration>
DAV svn
SVNPath /data/svn/administration
SVNPathAuthz off
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require group svn-admin-readwrite
</LimitExcept>
<Limit GET PROPFIND OPTIONS REPORT>
Require group svn-admin-read
Require user testUser testUser2
</Limit>
</Location>
启用模块'authn_dbm'和'authz_user'。有什么(明显的)我在这里失踪了?任何帮助表示赞赏!
答案 0 :(得分:1)
我在这里遗失了什么(显而易见的)?
阅读(并理解)SVN Book的某些部分,至少"Per-directory access control"(可能是完整章节"httpd, the Apache HTTP Server")和"Path-Based Authorization"
我在当前配置中看到至少两个弱点
DAV svn
容器中没有SVNParentPath
+ <Location /svn>
,您必须拥有N个存储库N + 1 Location
容器,并为每个添加的|删除存储库添加|删除位置。 Subversion-way是为repository-dirs的父级例如,如果您知道将在目录/ var / svn中创建多个Subversion存储库,可以通过http://my.server.com/svn/repos1,http://my.server.com/svn/repos2等URL访问这些存储库,则可以使用以下示例中的httpd.conf配置语法:
<Location /svn>
DAV svn
# Automatically map any "/svn/foo" URL to repository /var/svn/foo
SVNParentPath /var/svn
</Location>
使用这种语法,Apache会将路径部分以/ svn /开头的所有URL的处理委托给Subversion DAV提供程序,后者将假定SVNParentPath指令指定的目录中的任何项目实际上都是Subversion存储库。这是一种特别方便的语法,与使用SVNPath指令不同,您不必重新启动Apache来添加或删除托管存储库。
authz_svn_module
和AuthzSVNAccessFile在Apache中实现Subversion的基于路径的ACL(并在99%的情况下使用),其中定义了用户和组的访问权限(对于树中的任何存储库或repo-tree的一部分) ...还有群组成员资格,这使得AuthDBMGroupFile过时了(而且没有LimitExcept和极限的位置 - 更紧凑和可读)