1

我在 CentOS 7.4 上托管了 apache subversion 1.7.14,并且在获取基于路径的授权时遇到问题,这样一个特定分支的受限组可以从 apache Web 服务器导航到该分支。

示例结构是:

/svn/repo/projA
/svn/repo/projA/trunk
/svn/repo/projA/branches
/svn/repo/projA/branches/branch1
/svn/repo/projA/branches/branch2
/svn/repo/projB
/svn/repo/projC

我有几组用户,例如:

[groups]
svn-group1 = ...
svn-group2 = ...

我的目标是将 svn-group2 明确限制在 /svn/repo/projA/branches/branch1 并且不能访问任何其他分支,例如:

[/]
* =
@svn-group1 = rw

[repo:/projA/branches/branch1]
@svn-group2 = rw

但是,当导航到https://svn.example.com/repo/projA时,svn-group2 用户将收到一个禁止错误。只有当他们访问完整的 URL https://svn.example.com/repo/projA/branches/branch1时,他们才能获得访问权限。理想情况下,我希望 svn-group2 看到所有父级的叶子到根目录,以便他们“知道”他们可以从https://svn.example.com访问什么。

我可以通过明确排除每个兄弟叶子来获得正确的行为:

[/]
* =
@svn-group1 = rw

[repo:/projA/branches/branch1]
@svn-group2 = rw

[repo:/projA]
@svn-group2 = r

[repo:/projA/trunk]
@svn-group2 =

[repo:/projA/branches/branch2]
@svn-group2 =

[repo:/projB]
@svn-group2 =

[repo:/projC]
@svn-group2 =

这甚至有利于用户甚至看不到来自https://svn.example.com/repo的 projB 和 projC 的链接。只会看到 projA,然后是分支,然后是 branch1。

但是,这并不能保证 svn-group2 只会看到 branch1。我想保证如果 svn-group1 创建了一些新的分支, svn-group2 默认不会看到这个。

我发现了一些带有通配符功能的 :glob: 规则的提示,但我无法让它工作。我可以想象像下面这样的事情,其中​​通配符不包括兄弟分支。

[:glob:repo:/]
@svn-group2 = r

[:glob:repo:/*/]
@svn-group2 =

[repo:/projA]
@svn-group2 = r

[:glob:repo:/projA/*/]
@svn-group2 = 

[repo:/projA/branches/]
@svn-group2 = r

[:glob:repo:/projA/branches/*/]
@svn-group2 =

[repo:/projA/branches/branch1]
@svn-group2 = rw

谢谢!

4

1 回答 1

2

好的,所以我会尝试为您澄清几件事。

[/]
* =
@svn-group1 = rw

第一个* =不是必须的。仅当存在可以访问的父目录时,才需要指定禁止访问者。

理想情况下,我希望 svn-group2 看到所有父级离开到根目录,以便他们“知道”他们可以从https://svn.example.com访问什么

我可以看到您对此的思路,不幸的是,除非如您所说,明确禁止他们访问创建的每个子目录,否则这是不可能的。当您授予第 2 组对 projA 的基本 URL 的读取权限时,他们将固有地对您创建的任何新子目录具有读取权限,这意味着您创建的任何新分支/标签,他们将看到,直到您更新 authz文件这样做。

我还没有尝试过通配符的东西,目前我无法访问我的服务器,但是当我回到家时,我也许可以测试一下,以获得更方便的方法。

于 2018-01-17T16:11:59.757 回答