如何在SVN中设置访问控制?


83

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

我该如何实现?

Answers:


84

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

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

[users]
User1=password1
User2=password2

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

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

[groups]
allaccess = user1
someaccess = user2

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

因此,让我们的“所有访问”人员都可以从根目录访问所有内容:

[/]
@allaccess = rw

但是,仅向我们的“某些访问权”人员授予对某些较低级项目的只读访问权:

[/someproject]
@someaccess = r

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



1
注意:如果您通过ssh直接访问存储库(不使用svnserve)
则将

例如,当我将存储库下的一个文件夹提供给用户时,用户只能通过直接链接访问此文件夹。用户是否可以添加存储库,并且只向他显示分配给他的文件夹?谢谢回复 。
maoanz

@groupname定义规则时,这些小组被称为“我”。在您的示例中,这很完美,只需指出。
Wolfeh

28

@斯蒂芬·贝利

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

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

###########################################################################
# 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使用以下链接来更新文件:

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

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

[groups]
projadmins = zzzz

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

然后,项目经理“ zzzz”可以添加,删除或声明任何用户组以及他想要的任何用户。他提交文件并authz更新文件。

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


27

一个使我迷惑的陷阱:

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

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

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


8

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

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


这是一个令人震惊的答案。该ssh方法的文档很少,似乎仅适用于Linux。
user1040323 '17

根本不是真的。只需在其Windows服务器上运行SSH守护程序,svn + ssh在Windows上的工作原理与在Linux上完全相同。有许多教程介绍了如何在Windows计算机上运行SSH。
Chuck Wolber '17

另外,亲爱的@ user1040323,还有Windows以外的其他非Linux平台:可以肯定,我使用的计算机不是Linux,而是某些BSD变体。
马修·辛克尔

5

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

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

  1. 在“ C:\ svn_repos \ my_repo \ conf”中创建一个名为“ passwd”的文件。该文件应如下所示:

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

    [general]
    password-db = passwd
    auth-access=read
    auth-access=write
    

这将迫使用户登录以读取或写入此存储库。

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


注意:密码以纯文本格式存储在SVN conf文件中!
AVA 2015年


0

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

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

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

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

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

VisualSVN服务器管理器中的存储库权限 在此处输入图片说明

PowerShell中的存储库权限 在此处输入图片说明

非管理员用户可以通过RepoCfg工具管理权限 在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.