我无数次按照 Subversion 手册尝试在我们的 Subversion 服务器上设置正确的路径授权,但我无法做到这一点。这是我的访问规则文件:
[groups]
sales-admin = alexa, miked, chrism
[/]
$authenticated = rw
[Product_Sales:/]
~@sales-admin =
这应该做的是让所有经过身份验证的用户访问此服务器上托管的每个存储库,但将 Product_Sales 存储库的读写访问权限限制为 sales-admin 组。然而,在实践中情况并非如此,我的所有权限都无法正常工作。以下是每个用例中发生的情况:
当我尝试从任何其他存储库更新、提交或签出时,我收到“禁止访问”错误,并且即使在清除我从 TortoiseSVN 保存的凭据后也没有提供任何身份验证选项。
$authenticated 令牌不起作用。如果我将“$authenticated = rw”替换为“* = rw”,我会再次获得访问权限,但即使我没有提供任何凭据,也不会再被要求登录。尝试提交确实会强制我登录,但我需要在与存储库交互时始终进行身份验证,包括只读操作。
设置 Product_Sales 存储库的权限根本不允许我访问 Product_Sales,即使我在服务器的根目录上设置了 * = rw。
我需要知道我的访问规则出了什么问题。过去几年,我曾多次尝试让基于路径的授权发挥作用,但都无济于事。如果有人能在这里帮我一把,我将不胜感激。我只是想知道我对 Subversion Book 中基于路径的身份验证解释有什么误解。
http://svnbook.red-bean.com/en/1.7/svn.serverconfig.pathbasedauthz.html
编辑:这是我的 subversion 服务器信息
Collabnet Subversion Edge 3.2.2-3395.103
Subversion 1.7.8-3395.103
答案1
我还没有明确的答案,只有一些想法
如果我将“$authenticated = rw”替换为“* = rw”,我将再次获得访问权限,但不再要求登录,即使我没有提供任何凭据
* = rw
意思是“每个人都可以读写”,每个人都是“匿名的”。您有基于 Apache 或 svnserve 的 SVN 服务器吗?如果是 Apache,您必须(必须)在基于路径的访问之前,在 Apache 层限制对存储库的访问
并且,顺便说一句,魔法令牌适用于 SVN 1.5+(有机会获得旧版本吗?)
更新
调试过程
- 获取所有存储库的“仅经过身份验证”访问权限(匿名用户甚至无法读取)。对于 httpd.conf 中与 svn 相关的位置,它将是(最低版本,基本身份验证 - 不好)
DAV svn
SVNListParentPath on
SVNParentPath ...
AuthName ...
AuthType Basic
AuthBasicProvider file
AuthUserFile ...
# AuthzSVNAccessFile ...
Require valid-user
在这个配置中仅限用户,在 AuthUserFile 中列出可以给出满的进入任何回购,任何回购的一部分
添加基于路径的检查,取消注释 AuthzSVNAccessFile。因为使用配置匿名用户将无法访问任何存储库,所以
$authenticated
令牌变得过多,$authenticated == * 在这个限制区域中对于 [Product_Sales:/] 规则“只有一个组可以访问”,我更喜欢防弹、重载定义
[Product_Sales:/]
* =
@sales-admin = rw
即所有访问均被明确禁用,仅启用同一显式样式中的一个组