关于授权:如何在SVN中设置访问控制?

How do I set up access control in SVN?

我已经使用SVN建立了存储库并上传了项目。这些项目有多个用户。但是,并非每个人都需要访问所有项目。我想为每个项目设置用户权限。

如何实现?


在svn \\\\ repos \\\\ YourRepo \\\\ conf文件夹中,您将找到两个文件authz和passwd。这是您需要调整的两个。

在passwd文件中,您需要添加一些用户名和密码。我假设您已经有人使用它了,所以您已经这样做了:

1
2
3
[users]
User1=password1
User2=password2

然后您要使用authz文件相应地分配权限:

创建所需的概念组,并添加人们:

1
2
3
[groups]
allaccess = user1
someaccess = user2

然后从权限和项目级别选择他们具有的访问权限。

因此,让我们的"所有访问权限"人员都可以从根目录访问:

1
2
[/]
@allaccess = rw

但是只给我们的"某些访问权"人员以只读方式访问一些较低级别的项目:

1
2
[/someproject]
@someaccess = r

您还将在authz和中找到一些简单的文档。 passwd文件。


@Stephen Bailey

要完成答案,您还可以通过存储库中的纯文本文件将用户权限委派给项目经理。

为此,您可以设置使用包含以下内容的默认authz文件来设置SVN数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
###########################################################################
# The content of this file always precedes the content of the
# $REPOS/admin/acl_descriptions.txt file.
# It describes the immutable permissions on main folders.
###########################################################################
[groups]
svnadmins = xxx,yyy,....

[/]
@svnadmins = rw
* = r
[/admin]
@svnadmins = rw
@projadmins = r
* =

[/admin/acl_descriptions.txt]
@projadmins = rw

此默认authz文件授权SVN管理员修改SVN存储库中一个可见的纯文本文件,称为'/ admin /acl_descriptions.txt",SVN管理员或项目经理将在其中修改并注册用户。

然后,您设置了一个预提交钩子,该钩子将检测修订是否由该文件组成(并且仅该文件)。

如果是,此挂钩的脚本将验证纯文本文件的内容,并检查每一行是否符合SVN语法。

然后,提交后挂钩将更新\\conf\\authz文件,其并置为:

  • 上面显示的TEMPLATE authz文件
  • 纯文本文件/admin/acl_descriptions.txt

第一次迭代由SVN管理员完成,他添加:

1
2
[groups]
projadmins = zzzz

他提交了修改,并更新了authz文件。

然后,项目经理'zzzz'可以添加,删除或声明任何用户组和所需的任何用户。他提交文件,并更新authz文件。

这样,SVN管理员不必为所有SVN单独管理任何用户。存储库。


一个吸引我的陷阱:

1
[repos:/path/to/dir/] # this won't work

但是

1
[repos:/path/to/dir]  # this is right

您无需在目录中包含斜杠,否则您将看到403 OPTIONS请求。


您可以使用svn ssh :,然后基于对给定位置的存储库的访问控制。

这是我在uni托管项目组存储库的方式,在该位置我无法设置别的了。只要拥有该组拥有的目录并在其中运行svn-admin(或任何其他内容),就意味着我不需要进行任何配置。


尽管我建议使用Apache方法更好,但是SVN Serve可以很好地工作并且非常简单。

假设您的存储库名为" my_repo ",并且存储在C:\\\\ svn_repos中:

  • 在" C:\\\\ svn_repos \\\\ my_repo \\\\ conf "中创建一个名为" passwd "的文件。该文件应类似于:

    1
    2
    3
    4
    [Users]
    username = password
    john = johns_password
    steve = steves_password
  • 在C:\\\\ svn_repos \\\\ my_repo \\\\ conf \\\\ svnserve.conf中设置:

    1
    2
    3
    4
    [general]
    password-db = passwd
    auth-access=read
    auth-access=write
  • 这将强制用户登录以读取或写入此存储库。

    针对每个存储库执行以下步骤,仅在每个存储库的passwd文件中包括适当的用户。


    最好的方法是设置Apache并通过它设置访问权限。查看svn书籍以寻求帮助。如果您不想使用Apache,也可以使用svnserve进行简约的访问控制。


    Apache Subversion支持基于路径的授权,该功能可帮助您为存储库(文件或目录)中的路径的用户帐户和组帐户配置精细权限。基于路径的授权支持三种访问级别-禁止访问,只读和读/写。

    基于路径的授权权限使用特殊语法存储在每个存储库或每个服务器的授权文件中。这是SVNBook的示例:

    1
    2
    3
    [calc:/branches/calc/bug-142]
    harry = rw
    sally = r

    当您需要具有许多路径和帐户的复杂权限结构时,可以受益于VisualSVN Server提供的基于GUI的权限管理工具:

    • 服务器管理员可以通过VisualSVN Server Manager控制台或PowerShell管理用户和组权限,
    • 非管理员用户可以通过RepoCfg管理权限。

    VisualSVN Server中的存储库权限Manager enter image description here

    PowerShell中的存储库权限enter image description here

    非管理员用户可以通过RepoCfg工具enter image description here

    管理权限


    推荐阅读