过去几个月我一直在使用 svn(使用默认身份验证规则),直到最近才决定增加对存储库身份验证的控制。我一直在浏览这本书(http://svnbook.red-bean.com/en/1.4/svn-book.html#svn.serverconfig.pathbasedauthz),我以为我明白我在做什么。因此,我已经开始配置存储库。但是,我似乎在验证用户身份方面遇到了问题。
我有一台服务器工作服务器并且 repo 位于目录中/home/repoAdminUser/svnroot/
(由于我没有 workserver.com 的 root 访问权限,因此位于用户的主目录中)。我已将配置文件更改如下:
`/home/repoAdminUser/svnroot/conf/svnserve.conf`:
anon-access = none
password-db = passwd
authz-db = authz
`/home/repoAdminUser/svnroot/conf/passwd`:
[users]
admin1=pass1
admin2=pass2
otheruser1=pass3
现在,我想添加权限,以便所有管理员用户在任何地方都具有读/写能力,而其他用户对特定中继具有受限制的只读访问权限。因此,我尝试了以下操作
`/home/repoAdminUser/svnroot/conf/authz`:
[groups]
admins=admin1,admin2
other1=otheruser1,otheruser2
#etc ...
[/]
@admins=rw
[/project1/trunk]
@other1=r
然后,当我尝试使用以下任一方式检查目录时:
svn co --username admin1 --password pass1 svn+ssh://workserver.com/home/repoAdminUser/svnroot/anyproject/directory
或者
svn co --username otheruser1 --password pass3 svn+ssh://workserver.com/home/repoAdminUser/svnroot/project1/trunk
我收到“svn:授权失败”错误消息。事实上,我发现唯一能签出任何内容的方法是让通配符用户(每个人)访问特定目录:
[/any-directory]
* = r
这样,任何用户(匿名或经过身份验证的用户)都可以签出目录。我做错了什么?我该如何修复这个问题,才能得到我之前提到的理想结构。感谢您提供的任何帮助!
答案1
我不确定,但你能否尝试添加到auth-access = write
下面anon-access = none
以查看它是否有效。
答案2
这可能是错误 3242- 客户端在存储库的根目录下发出 OPTIONS 请求,结果出现 403。您对 /svnroot/ 或 /svnroot/project1/ 的访问是否被拒绝?(如果消息中没有该信息,请检查 apache 日志。)
解决方案?
- 尝试将所有 Subversion 客户端升级到 1.6.13 或更高版本 - 根据问题单,此问题已修复
- 修补您的 subversion 服务器,以允许所有用户在存储库根目录使用 OPTIONS。以下是我的旧补丁可以做到这一点它只允许使用 OPTIONS,并且不会泄露有关其他项目目录的信息(我不这么认为)。我没有被 Subversion 接受 - 虽然我并没有认真地提出它 - 但是我们已经在我们的 SVN 服务器上运行它好几年了。
如果不是,请告诉我们您正在运行哪个客户端和服务器版本。谢谢!