我有多个通过 Apache 2.2 和 WebDAV 提供的颠覆存储库。它们都位于一个中心位置,我以这篇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):
让它工作仍然没有运气,但所有迹象似乎都指向问题在于颠覆中的路径访问控制无法正常工作。我的假设是我没有配置 apache 或 svn 来正确识别我的存储库结构。
这是因为“[/]”条目似乎运行良好。
我还想到这个问题可能更适合 StackOverflow?
更新(20090603-1740):
作为对这个问题的评论之一的回应,我的颠覆本身的 WebDAV 设置被赋予位置 /svn/ repos,但 websvn 设置为 /websvn。
该问题可能与两个位置指令之间的配置拆分有关,但我不确定。
与其在两个地方(apache config 和 authz 文件)定义权限,不如在 authz 文件中定义它们。像这样:
httpd.conf
svn.authz
显然,您还需要 htpasswd 文件中的相应用户。
不知道你是否解决了这个问题,但这是适合我的程序。
忘记摆弄 apache 指令,而是编辑 WebSVN 的 config.php 文件并包含/取消注释以下指令:
$config->useAuthenticationFile('/path/to/your/authz/file');
这对我有用。
user1 可以看到“/”和“/project1” user3 只能看到“/project1”
[团体]
组 = 用户 1,用户 2
groupb = 用户 3,用户 4
[/]
@groupa = rw
[/项目1]
@groupb = rw
我为此苦苦挣扎,唯一适合我的配置如下:
因此,group1 对 project1 具有读写权限,而 group2 对 project2 具有读取权限。其他人无权访问任何项目。
我要强调的是,“project1”和“project2”是在 Apache 配置文件
subversion.conf
中定义的存储库中的项目。我目前的问题是,根本不可能在存储库
/svn/repos
中列出项目(尽管可以正确访问它们)。SVNListParentPath
on 指令,无论你把它放在哪里,它都无济于事。目前 my
/var/www/svn
不是存储库,而只是服务器文件系统中的目录。/var/www/svn/repos
是使用创建的存储库svnadmin create
您应该阅读过 websvn 文档,一切都会很明显 :)