颠覆所有或没有访问回购树

我在Linux服务器上设置了访问Subversion存储库的一些问题。 问题是,我似乎只能得到一个全或无的结构。 每个人都可以读取访问权限,或者没有人读取或写入访问权限。

设置:

SVN仓库位于/ www / svn / repoA,repoB,repoC …

版本库由Apache提供,位置在etc / httpd / conf.d / subversion.conf中定义为:

<Location /svn/repoA> DAV svn SVNPath /var/www/svn/repoA AuthType Basic AuthName "svn repo" AuthUserFile /var/www/svn/svn-auth.conf AuthzSVNAccessFile /var/www/svn/svn-access.conf Require valid-user </Location> <Location /svn/repoB> DAV svn SVNPath /var/www/svn/repoB AuthType Basic AuthName "svn repo" AuthUserFile /var/www/svn/svn-auth.conf AuthzSVNAccessFile /var/www/svn/svn-access.conf Require valid-user </Location> ... 

svn-access.conf设置为:

 [/] * = [/repoA] * = userA = rw [/repoB] * = userB = rw 

但是将URL / svn / repoA作为userA检出会导致Access Forbidded。

将其更改为

 [/] * = userA = r [/repoA] * = userA = rw [/repoB] * = userB = rw 

使用户可以读取所有存储库(包括repoB),但只能读取repoA!

所以为了让用户A读写访问repoB我需要添加

 [/] userA = rw 

这是精神的。

我也试过改变

  Require valid-user 

  Require user userA 

对于subversion.conf中的repoA来说,只能给我读访问权限。

我需要一种方法来默认拒绝每个人访问每个存储库,只有在明确定义时才提供读/写访问权限。

有谁能告诉我我在做什么错在这里? 我花了几个小时的时间进行testing和search,但空了,所以现在我正在做的耻辱。

编辑

我和Shane的第一个解决scheme一起去了,结果如下工作configuration

/etc/httpd/conf.d/subversion.conf:

 <Location /svn> DAV svn SVNParentPath /var/www/svn AuthType Basic AuthName "Subversion repo" AuthUserFile /var/svn-auth.conf Require valid-user </Location> 

/var/svn-access.conf:

 [/] * = [repoA:/] * = userA = rw [repoB:/] * = userB = rw 

你遇到的问题的共同主题是你的[/repoA][/repoB]部分什么都不做,对吧? 这是有原因的。

您正在授权的path与authz访问文件的位置相关; 他们相对于它正在处理访问控制的SVN存储库。

那么,你的[/]部分? 它授予对/svn/repoA//svn/repoB/访问权限; 它不会授予/svn/访问权限。 同样,您的[/repoA]部分授权访问/svn/repoA/repoA/svn/repoB/repoA ; [/trunk]的规则将授予对/svn/repoA/trunk/svn/repoB/trunk访问权限。

您已经为每个存储库设置了SVNPath指令,但是每个存储库指向相同的授权文件 – 因此每个存储库具有相同的访问规则。 有一种语法可以为不同的存储库设置不同的授权,但是当你使用SVNParentPath

所以有两个select:

  1. 切换到使用SVNParentPath /var/www/svn而不是在你的Apacheconfiguration文件中硬性地定义每个repo,然后把你的authz文件改成repo-targeted权限:

     [/] * = userA = r [repoA:/] * = userA = rw [repoB:/] * = userB = rw 
  2. 为每个存储库使用不同的authz文件,请记住,准予访问的path是相对于存储库的根。

哇。 首先,我将把svn-auth.conf(和svn-access.conf)从apache明确提供的http请求的目录中删除。 有些恶意的人来到请求该文件,他已经有一半的安全性已经不需要尝试了。

https://stackoverflow.com/questions/81361/how-to-setup-access-control-in-svn这个答案似乎涵盖了你在找什么,我想&#x3002;

您正在使用“ 基于path的授权”窗体为每个存储库结构混合一个项目 。