【问题标题】:How do I set up access control in SVN?如何在 SVN 中设置访问控制?
【发布时间】:2010-09-10 00:42:29
【问题描述】:

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

我怎样才能做到这一点?

【问题讨论】:

    标签: svn authorization svn-administraton


    【解决方案1】:

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

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

    [users]
    User1=password1
    User2=password2
    

    然后你想用 authz 文件相应地分配权限:

    创建您想要的概念组,并向其中添加人员:

    [groups]
    allaccess = user1
    someaccess = user2
    

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

    所以让我们给我们的“所有访问权限”的家伙从根目录的所有访问权限:

    [/]
    @allaccess = rw
    

    但是只给我们的“一些访问权限”的家伙只读访问一些较低级别的项目:

    [/someproject]
    @someaccess = r
    

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

    【讨论】:

    • 相关手册页为:svnbook.red-bean.com/en/1.7/…
    • 注意:如果您通过 ssh 直接访问存储库(没有 svnserve),它将无法工作
    • 当我将例如存储库下的一个文件夹提供给用户时,用户只能通过直接链接访问该文件夹。用户是否可以添加存储库并且只向他显示分配给他的文件夹?感谢您的回复。
    • 在定义规则时使用@groupname 调用组,这在您的示例中非常完美,只是指出来。
    【解决方案2】:

    @斯蒂芬·贝利

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

    为此,您使用包含以下内容的默认 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 文件,其中包含以下内容的串联

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

    第一次迭代由 SVN 管理员完成,他补充说:

    [groups]
    projadmins = zzzz
    

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

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

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

    【讨论】:

      【解决方案3】:

      一个让我大吃一惊的问题:

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

      但是

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

      您不需要在目录中包含尾部斜杠,否则您将看到 403 表示 OPTIONS 请求。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 这是一个令人震惊的答案。这种 ssh 方法的文档记录很差,似乎只适用于 Linux。
        • 完全不正确。一个人只需要在他们的 Windows 服务器上运行一个 SSH 守护程序,svn+ssh 在 Windows 上的工作方式与它在 Linux 上的工作方式完全相同。有很多教程解释了如何在 Windows 机器上运行 SSH。
        • 另外,亲爱的@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 文件中!
        【解决方案6】:

        最好的方法是设置 Apache 并通过它设置访问权限。检查svn book 寻求帮助。如果你不想使用 Apache,你也可以使用 svnserve 做简单的访问控制。

        【讨论】:

          【解决方案7】:

          Apache Subversion 支持path-based authorization,它可以帮助您为存储库(文件或目录)中的路径上的用户和组帐户配置细粒度权限。基于路径的授权支持三种访问级别 - 无访问、只读和读/写。

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

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

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

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

          VisualSVN 服务器管理器中的存储库权限

          PowerShell 中的存储库权限

          非管理员用户可以通过 RepoCfg 工具管理权限

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-03-19
            • 2020-05-14
            • 2018-03-01
            • 1970-01-01
            • 2013-01-24
            相关资源
            最近更新 更多