Subversion创建具有过于严格权限的修订目录

时间:2008-12-18 18:38:26

标签: linux svn permissions posix

今天早上,我尝试对Subversion进行修订,发现突然间我没有这样做的许可。

Can't move '/svn/db/txn-protorevs/21000-ga9.rev' to '/svn/db/revs/21/21001':
Permission Denied

查看revs目录,我注意到有人提交了第21000个修订版,并且由于某种原因缺少新目录的组写权限。

    drwxrwsr-x  2 svn    svn  24K 2008-10-27 10:04 19
    drwxrwsr-x  2 svn    svn  24K 2008-12-18 07:13 20
    drwxr-sr-x  2 jeff   svn 4.0K 2008-12-18 11:18 21

在该目录上设置组写权限允许我提交,所以我很适合另外1000个修订。但为什么会发生这种情况,我可以改变什么以确保它不会再发生?

3 个答案:

答案 0 :(得分:8)

如果您有多个开发人员通过file://协议访问存储库,您可能需要查看设置Subversion服务器(使用svnserve或Apache)。使用该解决方案,服务器本身负责存储库文件的所有访问和权限,您将不会遇到此问题。

来自SVN Book

  
      
  • 让所有用户直接通过file://网址访问存储库的简单想法会诱使 。即使存储库通过网络共享随时可供所有人使用,这也是一个坏主意。它删除了用户和存储库之间的任何保护层:用户可能会意外(或故意)破坏存储库数据库,很难使存储库脱机以进行检查或升级,并且可能导致文件权限问题混乱(见the section called “Supporting Multiple Repository Access Methods”)。请注意,这也是我们警告不要通过svn+ssh:// URL访问存储库的原因之一 - 从安全角度来看,它实际上与通过file://访问的本地用户相同,并且可能带来所有相同的问题如果管理员不小心。
  •   

答案 1 :(得分:2)

解决此问题的最佳方法是通过服务器访问存储库。

如果您不介意未加密的通信(因为您使用file://时似乎就是这种情况),svnserve很容易设置:

svnserve -d -r /svn

请参阅this reference以获取有关设置和配置身份验证的帮助。

糟糕的是,您必须单独设置每个用户的身份验证。

要连接到操作系统的身份验证,您需要设置一个更复杂的Apache SVN服务器,请参阅these general instructions。您可以通过一些谷歌搜索找到适用于您的操作系统的具体说明。

最后,如果您希望最快的路由阻止在仍使用file://时重置组写权限,只需让每个人在其shell启动中设置正确的umask(002),或者通过包装脚本使用svn设定它:

#!/bin/bash
# svnwrapper.sh
umask 002
/usr/bin/env svn $*

请确保此umask不是您环境中的安全问题。

答案 2 :(得分:0)

最可能的原因就像格雷格所说的那样。有人通过file://协议访问存储库,并且具有过于严格的umask