我有几十个 SVN 存储库必须可供所有用户访问,并且有一个存储库需要限制为仅一个组。我尝试像这样设置我的 .svnaccess 文件:
[groups]
special = alice,bob
[/]
* = rw
[RestrictedRepo:/]
* =
@special = rw
但是,这会导致 alice 和 bob 也无法访问 RestrictedRepo。如果我使用~@special =
而不是* =
,那么最终所有用户都可以访问。将 移到* =
最后一行不会改变任何内容。
有什么方法可以做到这一点,而无需将 root 权限设置为无,并向我的许多其他存储库上的所有非组成员提供明确的访问权限?
我正在使用 svn 1.5.1 的旧服务器上运行它。
答案1
我在我的服务器上测试了相同的配置,并且成功了。编辑配置后,您是否重新启动了 svnserve 服务(假设您使用的是 Linux 系统)?
由此书关于颠覆,它说:
另一个重要事实是,组权限不会被单个用户权限覆盖。相反,所有匹配权限的组合都会被授予。[...] 组成员的权限只能扩展到组已有的权限之外。将组内用户限制为其组的权限以下是不可能的。
对我来说您的配置是正确的,alice 和 bob 应该可以访问 RestrictedRepo。
答案2
我的问题是 apache 配置包含以下几行:
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
这允许未经身份验证的服务器访问所有读取操作。看来我需要要求所有读取都登录(通过删除 Require 周围的 LimitExcept 说明符)或实现类似以下描述的内容http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html#svn.serverconfig.httpd.authz.perdir获取混合认证和匿名访问。