我有多个通过Apache 2.2和WebDAV提供服务的Subversion存储库。它们都位于中央位置,我以这篇debian-administration.org文章为基础(尽管我放弃了对简单的htpasswd文件使用数据库身份验证的方法)。
从那时起,我也开始使用WebSVN。我的问题是,并非系统上的所有用户都应该能够访问不同的存储库,并且WebSVN的默认设置是允许任何可以进行身份验证的人。
根据WebSVN文档,解决此问题的最佳方法是使用Subversion的路径访问系统,因此我希望使用AuthzSVNAccessFile指令来创建它。
但是,当我这样做时,我会不断收到“ 403 Forbidden”消息。
我的文件如下所示:
我在文件中具有默认策略设置:
<Location /svn/>
DAV svn
SVNParentPath /var/lib/svn/repository
Order deny,allow
Deny from all
</Location>
每个存储库都会获得如下策略文件:
<Location /svn/sysadmin/>
Include /var/lib/svn/conf/default_auth.conf
AuthName "Repository for sysadmin"
require user joebloggs jimsmith mickmurphy
</Location>
default_auth.conf文件包含以下内容:
SVNParentPath /var/lib/svn/repository
AuthType basic
AuthUserFile /var/lib/svn/conf/.dav_svn.passwd
AuthzSVNAccessFile /var/lib/svn/conf/svnaccess.conf
我不完全确定为什么我需要在default_auth.conf中使用第二个SVNParentPath,但是今天我刚刚添加了该内容,因为添加AuthzSVNAccessFile指令后收到错误消息。
具有完全许可的访问文件
[/]
joebloggs = rw
该系统运行良好(基本上没有变化),但是当我开始尝试添加任何限制时,例如
[sysadmin:/]
joebloggs = rw
相反,我再次收到“权限被拒绝”错误。日志文件条目为:
[Thu May 28 10:40:17 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET websvn:/
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET svn:/sysadmin
我需要做什么才能使它正常工作?配置的apache错误,还是我对svnaccess.conf文件的理解不正确?
如果我以错误的方式进行操作,那么我对整体方法没有特别的依恋,因此也随时可以提供替代方法。
更新(20090528-1600):
我尝试实现此答案,但仍然无法使其正常工作。
我知道大多数配置都是正确的,如我所添加的
[/]
joebloggs = rw
首先,“ joebloggs”拥有所有正确的访问权限。
当我尝试去特定于存储库的时候,做类似的事情
[/]
joebloggs = rw
[sysadmin:/]
mickmurphy = rw
然后我收到了一个关于Mickmurphy的权限被拒绝的错误(joebloggs仍然有效),并且出现了与我之前已经遇到的错误类似的错误
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'mickmurphy' GET svn:/sysadmin
另外,我以前也忘记解释说我所有的存储库都在下面
/var/lib/svn/repository
更新(20090529-1245):
仍然无法使它正常工作,但是所有迹象似乎都表明问题在于Subversion中的路径访问控制无法正常工作。我的假设是我没有配置apache或svn来正确识别我的存储库结构。
这是因为'[/]'条目似乎运行良好。
我还想到这是一个可能更好地属于StackOverflow的问题?
更新(20090603-1740):
作为对这个问题的评论之一,我为Subversion本身的WebDAV设置指定了/ svn / repos位置,但是websvn设置为/ websvn。