【问题标题】:Subversion Automated Path-Based AuthorizationSubversion 自动基于路径的授权
【发布时间】:2013-07-18 03:43:35
【问题描述】:

我正在尝试为 subversion 找到一个自动的基于路径的授权工具。或者关于如何更有效地管理大型身份验证文件的建议

现在我们有超过 1000 个用户、150 个组和 550 个访问规则。 auth 文件将近 1500 行。

管理这种规模的存储库结构需要时间,而且最终会花钱。同一组中有许多重复用户,多个组不必要地重叠等。

我没有找到更自动化的解决方案来管理这种大小的身份验证文件。搜索用户,确保没有重复,将用户添加到具有正确权限的正确存储库,有时一次添加 10 多个用户。使用 vi 来完成这项任务至少可以说是令人生畏的。

我们有一个自动备份脚本运行程序,当您运行它时,它会创建一个备份,然后允许您修改身份验证文件。这是防止生产线出现失误的唯一预防措施。

我发现的一个工具是 suafe。一个很好的工具,但似乎不是从我的服务器上的机器编辑文件的简单方法。违背了我正在寻找的目的。

我需要一个工具来清理我当前的身份验证文件、查找重复文件、将用户添加到正确的存储库、创建存储库的新路径和新用户组。

是否有任何工具或建议对这种规模的回购结构有益?

仅供参考:SVN 在 linux 机器上运行。

【问题讨论】:

  • 我认为,您必须从另一个角度开始 - 让您的管理透明并记录在案。在您获得简化的业务流程(回答“对谁、做什么、何时以及为什么”)之后,您甚至可以在文本模式下编辑 authz 文件
  • 它的方式已经非常有据可查,而且是透明的。仅使用 vi 编辑文件在生产系统上是危险的。意外删除一行,或留下悬空的错误值。它可以关闭开发进程。超过 1000 个用户,如果 SVN 宕机一分钟,就会损失 16 个工作小时。开发人员并不便宜,这对于一分钟的停机时间来说是一笔不小的数目。使用授权管理工具,可以有效消除用户错误,让用户管理更加快捷。
  • 您可以使用 VisualSVN Server 的 PowersShell 来自动管理访问规则:visualsvn.com/server/features/powershell

标签: svn


【解决方案1】:

如果你能把它从你的工作变成别人的工作呢?

使用 Apache httpd 的 Subversion 与 LDAP 身份验证很好地集成在一起,这意味着(如果您是 Windows 商店),它也可以与 Windows 域和 Active Directory 一起使用。 Windows Active Directory 组成为 Subversion 身份验证组。您可以说这个组(相对于一大群人)可以访问存储库的这一部分。

而且,如果需要将某人放入某个组,那不再是您的工作了。相反,它们需要被放置到正确的 Active Directory 组中,并且神奇地,它们也将获得所需的 Subversion 访问权限。 svn_auth 文件没有更改或文档。不再更改 svn_access 文件。

想想两组访问控制:

  • 读取权限
  • 写入权限

在大多数商店中,几乎所有开发人员都授予了对整个存储库的读取权限。写访问可以由预提交挂钩或 Subversion 身份验证和访问文件控制。

我通常做的是拥有一个名为“开发”的 Windows Active Directory 组,任何想要对 Subversion 存储库进行读取访问的人都属于该组。如果您有 Windows 帐户,并且您是该组的成员,则可以访问 Subversion 存储库。

然后,我使用我的预提交挂钩来微调此访问权限,以取消不同人员对各种项目的读取访问权限。人们可以签出代码并阅读代码,但除非他们获得我的钩子的写权限,否则他们无法更新代码。这是我在subversion.conf httpd 配置中的访问设置示例:

<Location /src>
        DAV svn
        SVNParentPath /opt/svn_repos
        SVNListParentPath on
        AuthType basic
        AuthName "Vegicorp Subversion Repository"
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative off
        AuthLDAPURL "ldap://ldap.vegicorp.com:3268/dc=vegicorp,dc=com?sAMAccountName" NONE
        AuthLDAPBindDN "CN=SVNRobot,OU=Users,OU=Accounts,DC=vegicorp,DC=com"
        AuthLDAPBindPassword "Sw0rdf1sh"
        Require ldap-group CN=Development, OU=Groups, OU=Accounts, DC=vegicorp, DC=com
        Require ldap-group CN=CM-robots, OU=Groups, OU=Accounts, DC=vegicorp, DC=com
</Location>

现在,DevelopmentCM-robots 组中的任何人都可以访问我们的 Subversion 存储库。

然后我使用我的pre-commit 挂钩来控制写访问。这个钩子依赖于一个控制文件进行配置。我可以做的一件事就是将控制文件放在我的 Subversion 存储库中。这样,管理人员(因为每个管理人员都有一个单独的存储库)可以编辑控制文件并确定谁拥有或没有访问权限。这让经理们无需经过我就可以确定谁应该和不应该访问他们的项目。

【讨论】:

  • 虽然这听起来是个好主意,但我不确定我们如何将其集成到我们的设置中。我们不向所有人提供对整个存储库的读取权限。您只能查看您正在处理的项目的 repo。让每个人都可以访问,然后将其从不需要的人手中夺走,这将完全背离应有的方式。我们的项目重叠很少。很少有人有权查看存储库中的某些项目;大多数人甚至不知道它们的存在。
  • 如果 ACL 必须应用于 repo 内的子树(特殊分支、标签保护),它(LDAP 组方式)将不起作用
  • @RGG - 有两种可能的方法来解决这个问题:一种是给每个组自己的 repo。毕竟,如果他们甚至不想对其他组进行读取访问,那么它们在逻辑上应该是单独的存储库。如果这样做,您可以使用自己的配置 &lt;Location&gt; 定义每个 repo,并且每个 repo 都有自己的 AD Windows 组。我以前做过。当然,您的存储库可能都集中在一个存储库中。另一种是尝试mod_authz_svn 设置一个身份验证文件,看看它是否适用于 LDAP 组。它适用于 AD Windows 用户,但我不知道它是否适用于 LDAP 组。
  • @RGG - 还有第三种方法:为什么开发人员甚至不能看到其他组的源代码?我可以理解限制写访问,但也可以读访问?可能有一两个部分必须是安静的(例如 RSA 私钥),但是为一小群人设置一个带有无读取限制的 repo 的一小部分并不是什么大问题。如果您在拥有数百名用户的整个存储库中执行此操作,它只会成为一场噩梦。
【解决方案2】:

关于谵妄的权利:

在 Windows 主机上有 repos-tree 的镜像。使用 VisualSVN 服务器管理这个镜像 - 它有很好的服务器管理小程序,您可以在其中以 GUI 样式管理用户/组/ACL。并用master编辑后rsync VisualSVN Server的authz文件

【讨论】:

  • 我将不得不对 rsync 做更多的研究。听起来它有一个很好的前提,但是将生产副本本质上作为备份有点令人恐惧。是否有可能进行身份验证文件管理的 apache 前端工具?
  • @RGG - 您的产品不是备份 - Win-host 可能被视为备份。而且您可能不会在 VisualSVN 上创建完整的生产副本 - 您必须只同步存储库树(没有文件和其他数据)。可悲的是,我不知道任何用于在独立 Apache 上管理 Subversion 的 authz 的前端
猜你喜欢
  • 2019-11-20
  • 1970-01-01
  • 2016-01-11
  • 2010-10-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多