我的所有代码库都存储在一个subversion存储库中,我将其分散在负载均衡的Apache Web服务器中,从而可以轻松检查代码,运行更新,并将我的代码无缝地开发到生产环境中.
我确信有一个简单的方法(除了在每次结账时执行脚本),其中一个不便之处就是在使用subversion更新或检出的文件上设置(返回)Linux权限.我们的安全团队已经将它设置了Owner
和Group
在设置的httpd.conf文件,以及内的所有目录documentRoot
的700收到的权限,所有非可执行文件(例如*.PHP,*.smarty,*.PNG)收到的Linux权限600,所有可执行文件接收700(例如*.sh,*.pl,*.py).所有文件必须具有所有者和组apache:apache
,以便httpd服务读取,因为只有文件所有者设置为通过权限进行访问.
每次我运行一个svn update
,或者svn co
,即使文件可能没有被创建(即svn update
),我发现文件的所有权设置为运行svn命令的帐户,通常是文件权限被设置为除了它们之前的东西(即更新之前的.htm文件是600,但之后svn update
,它被设置为755,甚至是777).
绕过subversion尝试更新文件权限和所有权的最简单方法是什么?有没有什么可以在svn客户端或Linux服务器上完成以保留原始文件权限?我正在运行RHEL5(现在只有几个选择实例).
文件的所有者将被设置为运行svn命令的用户,因为它实现了基础向上命令 - 它删除并替换了更新的文件,这将导致所有权"更改"到相关用户.防止这种情况的唯一方法是实际执行svn up作为文件应该被拥有的用户.如果要确保它们由特定用户拥有,请以该用户身份运行该命令.
关于权限,svn只服从帐户的umask设置 - 它可能类似于066 - 为了确保组和其他帐户无法访问该文件,您需要在执行svn之前发出'umask 077'这样可以确保只有发出命令的用户帐户才能访问这些文件.
除非.svn目录是安全的,否则我会注意将subversion数据部署到Web服务器的安全问题.
您可以在Subversion中将属性存储在文件中(请参阅http://svnbook.red-bean.com/en/1.0/ch07s02.html).您对svn:executable属性特别感兴趣,它将确保存储可执行权限.
但是,对于所有权限,没有通用的方法.Subversion也不存储所有权 - 它假设,如果你检查出来,你就拥有它.