Subversion标记和安全性

时间:2009-05-19 18:35:41

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

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

我使用了针对apache的SSPI auth插件,因此我们的开发人员只需使用他们的网络凭据访问服务器,一切都运行良好。

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

然后我锁定/ svn /目录:Require-group“CORP \ CKAN0BlahBlah”

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

现在,我有几个问题:

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

  2. 是否可以使用SSPI传递 AuthZ的团队成员, 而不是列出成员 单独配置 文件?

5 个答案:

答案 0 :(得分:6)

1 - 您可以使用预提交挂钩来阻止提交,请参阅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

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

答案 1 :(得分:3)

对于问题#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安全组。

感谢大家的帮助。

答案 2 :(得分:2)

没有“正确”的方式。标签是一种惯例,开发人员应该学习并遵循它。除此之外,可以使用Subversion挂钩实现故障安全。有关精彩教程,请参阅this页面。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

[groups]
ADMINS=<your ID>
<rest of groups>=<all other IDs>

[/]
* = r
<rest of groups> = rw
@ADMINS = rw

[/tags]
<rest of groups> = r

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