【问题标题】:Subversion Tagging and SecuritySubversion 标记和安全性
【发布时间】:2009-05-19 18:35:41
【问题描述】:

我已经从头开始建立了一个 SVN 存储库,并且我已经使用 SVN 复制命令成功地标记了我的一些版本。

我为 apache 使用了 SSPI auth 插件,因此我们的开发人员只需使用他们的网络凭据访问服务器,一切正常。

我创建了一个 AuthZ 授权文件,将我们的开发人员添加到文件中的组,并授予他们对 root 的写入权限。我还授予匿名用户对 root 的只读访问权限。

然后我使用以下命令锁定 /svn/ 目录:Require-group "CORP\CKAN0BlahBlah"

这有效地将安全组中的新开发人员限制为只读访问权限,直到他们通过 aAuthZ 配置文件获得访问权限。

现在,我有几个问题:

  1. 什么是正确的方法(除了 荣誉系统),以防止用户 从提交更改到任何 “标签”目录?

  2. 是否可以使用SSPI通过 AuthZ 组的成员, 而不是列出成员 单独在配置中 文件?

【问题讨论】:

    标签: svn version-control batch-processing pre-commit-hook


    【解决方案1】:

    1 - 您可以使用 pre-commit 挂钩来防止提交,请参阅 SVN pre-commit hook for avoiding changes to tags subdirectories

    编辑:要在 Windows 上执行此操作,请尝试以下操作:

    将其保存为 repo 的 hooks 文件夹中名为 pre-commit.bat 的文件:

    @echo off
    set REPOSITORY=%1
    echo %REPOSITORY% | find /I "tags"
    if errorlevel 1 goto done
    echo You tried to commit to %REPOSITORY% >&2
    echo Committing to tags is not allowed >&2
    exit 1
    :done
    

    注意,这将阻止提交到包含子字符串 tags 的任何存储库路径。根据您的需要进行修改。

    【讨论】:

    • 有没有办法在 Windows 上做到这一点?
    • Hooks 位于服务器端,因此可以使用宿主平台原生的已编译应用、shell 脚本、命令文件等来完成。
    • 所以,我一直在谷歌搜索 .bat 预提交脚本,几乎所有这些脚本都调用 Perl 脚本。我不认为我可以获得在此服务器上安装 perl 的许可,所以你知道纯 .bat 版本吗?
    • 编辑了我的答案以包含一个 .bat 示例。
    • 我在这里 +1,尽管我很确定你的脚本不会工作。具体来说,您需要使用 SVNLOOK 实用程序来检测更改,而不仅仅是检查存储库名称。我发布了我的代码作为答案。
    【解决方案2】:

    对于问题#1,我为此开发了:

    @echo off
    SET SVNLOOK=C:\Program Files\CollabNet Subversion Server\svnlook.exe
    SET GREP=D:\SVN\Repo\hooks\grep.exe
    SET LOG=D:\SVN\Repo Logs.txt
    
    >>"%LOG%" echo ==== commit %1 %2 ====
    >>"%LOG%" "%svnlook%" changed -t %2 %1
    
    ("%svnlook%" changed -t %2 %1 | "%grep%" "^U.*/tags/") && (echo Cannot commit to tags.>&2 && exit 1)
    ("%svnlook%" log -t %2 %1 | "%grep%" "[a-zA-Z0-9]") || (echo You must specify a comment.>&2 && exit 1)
    
    exit 0
    

    http://sourceforge.net/projects/unxutils抓到grep工具


    对于问题 #2,答案是否定的,您无法检查 AuthZ 配置文件中的 AD 安全组。

    谢谢大家的帮助。

    【讨论】:

    • 这是很酷的 Windows 脚本;) 问题:在您的脚本中,我可以将新文件添加到标签中。您知道避免这种情况的解决方案吗(我正在寻找这样的解决方案)?
    • 是的,您可以复制包含“(%svnlook%”文本的第一行,并将“^U.*”更改为“^A.*”但是,请注意,您将完全无法将新文件添加到任何名为“tags”的目录中。
    【解决方案3】:

    没有“正确”的方法。标签是一种约定,开发人员应该学习并遵循它。除此之外,可以使用 Subversion 钩子实现故障安全。请参阅 this 页面以获取不错的教程。

    【讨论】:

      【解决方案4】:

      在我看来,这与教育和过程有关。如果您的开发人员了解您的 SVN 标签的用途,那么您似乎不太可能让人们(故意)对标签进行提交。我发现有效传达这些流程必不可少的是最新的书面文档。我的团队使用 wiki 来存储有关我们流程的文档(具体来说,我们使用 MediaWiki)。与将版本化的 MS Office 文档存储在 sharepoint 中相比,wiki 方法似乎使事情更易于访问和更新。

      【讨论】:

      • 我是开发人员之一,实际上我宁愿将其作为硬性规则实施。
      • 很公平。我能问为什么吗?显然,事故会发生,这是一个硬性规则很有用的用例。这就是你想要它的原因吗?
      • 是的。我可能不相信我的一些同行会理解这项政策。
      • 这很粗糙。我相信每个具有提交访问权限的人都处于高度信任的位置。如果你不能相信某人会遵循一个非常基本的流程,也许你应该和你的管理层谈谈。毕竟,如果您甚至不能相信他们会将他们的代码检查到正确的位置,那么这对他们的工作质量有何影响?
      • 碰巧有很多关于这个的政治。通常我会同意你的看法,但我不想成为烈士。
      【解决方案5】:

      如何使用 svn-auth 文件来定义它?这看起来像这样:

      [groups]
      ADMINS=<your ID>
      <rest of groups>=<all other IDs>
      
      [/]
      * = r
      <rest of groups> = rw
      @ADMINS = rw
      
      [/tags]
      <rest of groups> = r
      

      这将允许管理员对标签目录进行读写访问,但不允许其他人访问。我不知道 SSPI auth 插件,所以我提供的示例可能不适用于您的上下文。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-09
        • 2011-07-14
        • 1970-01-01
        • 2017-10-31
        • 2011-09-02
        相关资源
        最近更新 更多