我们一直在为我们的软件项目使用subversion进行版本控制。自从我们在python中开发以来,我最近开始使用subversion来部署站点的工作副本。当在repo中更新站点时,在服务器上调用post-commit钩子并将更改推送到实时站点。
继续这样,我已经看到了对其服务器配置脚本使用版本控制的其他人的引用。我们正在运行Ubuntu 9.04,我可以想象拥有(例如)所有/ etc / versioned的实用程序,这样如果我搞砸了一个apache配置,或者安装一些现有配置的东西,我可以简单地从备份恢复
我的问题(和关注)是,目前,我们所有的开发人员都可以访问我们所有的subversion存储库。如果我开始将敏感系统配置放在那里,我认为限制访问是有意义的,但我不知道如何做到这一点。一旦我拥有了回购中的所有文件,我该如何管理结帐和签到?在本地进行更改然后推送到服务器?修改服务器,然后推送到repo?我们的subversion服务器是一个不同的物理机器,所以我不能使用本地文件签出。我该如何处理安全问题呢?无密码SSH?
此外,在这种情况下,我应该注意哪些其他安全问题?我知道很多信息存储在.svn目录中,我是否会暴露我的服务器以妥协这样的东西?颠覆本身是否具有足够的安全性以使其可行?
此外,subversion是否正确保存并恢复文件所有权和权限?
答案 0 :(得分:1)
在回答最后一个问题时,不,subversion本身不支持文件权限,所有权等。您可以查看asvn,它被认为存储它们,但它暂时没有更新。
您最好的选择可能是部署脚本,该部署脚本会在部署后通过适当的权限,所有者等修改每个文件。
答案 1 :(得分:0)
使用SVN授权系统排除系统目录下载或访问所有人,如果配置了LDAP服务器,则可以配置auth文件或设置LDAP访问,并通过SSH设置SVN以提高安全性。
我还会考虑将系统配置存储在不同的存储库中,并将其从不需要的访问中锁定。 在这种情况下,最好在本地测试更改,然后上传到存储库,所以如果你搞砸了,你还没有提交错误的修订。
无论如何,在版本控制系统上存储系统文件并不是很安全,考虑到这种情况:你搞砸了配置并使你的机器无法启动,你在SVN上保存了破坏的配置,现在你必须:
当然,如果你可以处理所有这些麻烦,它可以是一个解决方案,但不是最安全的。 如果您确实需要不断更新系统配置,则最好将更新的文件从其他目录链接,例如:
/etc/apache -> /usr/local/etc/apache
你最好对这些版本进行修改,保持/ etc clean
作为最后一个考虑因素:您不会考虑将此服务器/存储库放在互联网上。 (这不是问题:D)
答案 2 :(得分:0)
如果您通过HTTP访问您的subversion存储库(例如通过Apache),那么您可以使用Apache来控制对各种资源的签出/提交访问。
我们这样做是为了根据LDAP权限限制对我们的存储库的提交。
有关详细信息,请参阅mod_authz_svn和mod_dav_svn。