Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 颠覆标记与安全_Svn_Version Control_Batch Processing_Pre Commit Hook - Fatal编程技术网

Svn 颠覆标记与安全

Svn 颠覆标记与安全,svn,version-control,batch-processing,pre-commit-hook,Svn,Version Control,Batch Processing,Pre Commit Hook,我从头开始建立了一个SVN存储库,并且使用SVN copy命令成功地标记了我的一些发行版 我使用了apache的SSPI auth插件,因此我们的开发人员只需使用他们的网络凭据访问服务器,一切都很顺利 我创建了一个AuthZ授权文件,将我们的开发人员添加到文件中的组中,并授予他们对根目录的写访问权。我还授予匿名用户对根目录的只读访问权限 然后我用:Require组“CORP\CKAN0BlahBlah”锁定了/svn/目录 这实际上将安全组中的新开发人员限制为只读访问,直到通过aAuthZ配置文

我从头开始建立了一个SVN存储库,并且使用SVN copy命令成功地标记了我的一些发行版

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

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

然后我用:Require组“CORP\CKAN0BlahBlah”锁定了/svn/目录

这实际上将安全组中的新开发人员限制为只读访问,直到通过aAuthZ配置文件授予他们访问权限

现在,我有几个问题:

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

  • 是否可以使用SSPI通过 要授权的组成员, 而不是列出成员名单 在配置中单独 档案


  • 1-您可以使用预提交挂钩来防止提交,请参阅

    编辑:要在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
    

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

    没有“适当”的方法。标签是一种惯例,开发者应该学习并遵循它。除此之外,可以使用Subversion挂钩实现故障保护。请参阅第页,以获得一个不错的教程。

    在我看来,这似乎是一个教育和过程的问题。如果您的开发人员了解SVN标记的用途,那么让人们(有意)对标记进行提交的可能性就会小得多。我发现有效沟通这些流程所必不可少的是最新的书面文档。我的团队使用wiki来存储关于我们流程的文档(特别是我们使用的)。与在sharepoint中存储版本化的MS Office文档相比,wiki方法似乎使事情更容易访问和更新。

    对于问题#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
    
    从中抓取grep工具


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


    谢谢大家的帮助。

    使用svn auth文件来定义它怎么样?这看起来是这样的:

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

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

    有没有办法在windows上做到这一点?钩子位于服务器端,因此可以使用主机平台自带的编译应用程序、shell脚本、命令文件等来完成。因此,我一直在谷歌上搜索.bat预提交脚本,几乎所有的脚本都称为Perl脚本。我不认为我可以获得在这台服务器上安装perl的权限,所以你知道纯.bat版本吗?编辑了我的答案,加入了一个.bat示例。我这里是+1,尽管我很确定你的脚本不会工作。具体来说,您需要使用SVNLOOK实用程序来检测更改,而不仅仅是检查存储库名称。我发布了我的代码作为答案。我是开发人员之一,实际上我更愿意把它作为一个硬性的规则来实现。这很公平。我能问一下为什么吗?显然,事故会发生,这是一个硬性规则有用的用例。这就是你想要它的原因吗?是的。我不相信我的一些同龄人会理解这项政策。这很粗糙。我相信拥有提交权限的每个人都处于高度信任的位置。如果你不能相信某人会遵循一个相当基本的流程,也许你应该和你的管理层谈谈。毕竟,如果你甚至不能信任他们将代码检查到正确的位置,那他们的工作质量又如何呢?在这方面有很多政治因素。通常我会同意你的看法,但我不想成为烈士。这是很酷的windows脚本;)问题:在您的脚本中,我可以将新文件添加到标记中。。您知道避免此问题的解决方案吗(我正在搜索此解决方案)?是的,您可以复制包含“(%svnlook%”文本的第一行,并将“^U.*”更改为“^a.*”。但是,请注意,您将无法将新文件添加到任何名为“tags”的目录中