我使用基于密钥的身份validation的snv + ssh。 现在为了让我的任何svn用户通过Subversion访问版本库,我必须设置repo文件在文件系统上对这些用户是可读写的。
我想阻止用户通过sshlogin到服务器时删除repo数据库,但仍然能够签出和提交代码。
关于如何做到这一点的想法?
要访问svn + ssh URL,svn客户端使用“ssh -q user @ host svnserve -t”启动svnserve实例,并通过stdin / stdout与该实例通信。
如果你的用户需要正常的ssh访问,你仍然可以通过限制对一个用户的访问(chown -R svnserve:svnserve repo; chmod -R g-rwx,o-rwx repo)来阻止他们访问版本库,并且通过replacesvnserve命令这个setuid / setgid svnserve包装程序 。
在共享用户环境中,我build议设置一个真正的Subversion服务器( svnserve或通过Apache)。 在这种环境下,个人用户完全不需要访问存储库文件,因为所有文件访问都是在服务器进程的用户帐户下完成的。
Subversion书籍有一个关于select服务器configuration的部分 ,可能有帮助。 从这一部分(重点是我的):
如果您拥有基于SSH帐户的现有基础架构,并且您的用户在您的服务器计算机上已经拥有系统帐户,那么部署svnserve-over-SSH解决scheme是有意义的。 否则,我们不会向公众推荐这个选项。 通常认为让用户通过svnserve或Apachepipe理的(虚拟)帐户访问存储库比通过全面的系统帐户更安全。
这个网站有一些不错的技巧: http : //svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks
如果这些都不适合你,也许一个解决方法可以做到这一点? 你可以在每次有人提交一些东西的时候把资源库备份到提交钩子中:sudo rsync -a / my / repo / path / my / closed / path /
我看到两个可能的方向来攻击这个问题:
我同意格雷格和奥拉夫 – 去https访问。 我正在使用这样的设置很长一段时间,没有看到它的任何缺点。
您可以在存储库中获得细粒度访问控制的额外好处 – 因此,您可以将某些部分设置为只读,部分完全无法访问选定的用户。