【问题标题】:Problem with the path-based authorization基于路径的授权问题
【发布时间】:2026-01-29 07:25:02
【问题描述】:

我们有一个 subversion 服务器,其中包含许多存储库和通过 AD 进行身份验证的用户,在过去几年中运行良好。现在我们必须限制对存储库的访问,我有以下我无法解决的问题。 有些用户应该只能访问少数存储库中的特定子文件夹。因此,我将所有用户的访问权限限制为对所有存储库的“无访问权限”,并为相应子文件夹的用户授予访问权限。现在我们遇到了问题,这些存储库是不可见的,并且只有在使用完整路径的情况下才能访问这些存储库:

[/]
# Restrict access for all users
* = 

[repos1:/subdir1]
@user1 = rw

[repos1:/subdir2]
@user2 = rw

对于 user1 和 user2,repos1 未在网页 (mysvnserver/svn) 中列出。 TortoiseSVN 无法访问这些用户的存储库。仅当使用完整路径 (mysvnserver/svn/repos1) 时,user1 和 user2 才能访问 subdir1/subdir2。这意味着,用户知道存在哪些存储库以及他们可以访问其中的哪些部分。

我想要的是 user_group1 看到存储库并且只对 subdir1 具有完全访问权限,而 user_group2 只对 subdir2 具有完全访问权限。

允许所有用户对 root 的只读访问 [/] * = r 导致 user1 和 user2 拥有对所有存储库的读取权限,这不是我们想要的。其他用户将能够在存储库的顶层创建新文件夹,因此必须这样做 - 限制所有用户的访问权限并授予用户对相应存储库子目录的访问权限。

那么我该如何实现呢?

【问题讨论】:

    标签: svn svn-administraton


    【解决方案1】:
    [/]
    * = r
    [repos1:/subdir1]
    @user1 = rw
    @user2 =
    [repos1:/subdir2]
    @user1 =
    @user2 = rw
    [repos1:/subdir3]
    @user1 =
    @user2 =
    [repos1:/subdir4]
    @user1 =
    @user2 =
    …
    [repos1:/subdirN]
    @user1 =
    @user2 =
    
    [repos2:/]
    * =
    ...
    [reposN:/]
    * =
    

    即- 只允许对使用过的 repo 进行读取访问(来自 /),在需要时添加写入权限。而且“继承”并不意味着“不修改”或“没有附加限制”——试试吧

    【讨论】:

    • 这个不行,我发帖前已经测试过了。 [/] * = r 授予所有用户读取权限。访问权限是继承的,因此设置 [repos2:/] * = 不会限制只读访问。因此,所有用户都拥有对所有存储库的读取权限。
    • ` [/] * = r [repos1:/subdir1] @user1 = rw [repos1:/subdir2] @user2 = rw ` 因此 user1 将拥有对 repos1/subdir2 的读取权限,而 user2 将拥有对 repos1/subdir1 的读取访问权限,这是不想要的。