我使用 snv+ssh 和基于密钥的身份验证。现在为了让我的任何 svn 用户能够通过 Subversion 访问存储库,我必须将存储库文件设置为这些用户可以在文件系统上读取和写入。
我想防止用户通过 ssh 登录服务器时删除 repo 数据库,但仍然能够检出并提交代码。
我该如何实现这一点?
答案1
要访问 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)并通过替换 svnserve 命令setuid/setgid svnserve 包装程序。
答案2
在共享用户环境中,我建议设置一个真正的 Subversion 服务器(或者svnserve
通过 Apache)。在这种环境中,个人用户根本不需要访问存储库文件,因为所有文件访问都在服务器进程的用户帐户下完成。
Subversion 书中有一节选择服务器配置这可能会有所帮助。从那一节(重点是我的):
如果您现有的基础设施严重依赖 SSH 帐户,并且您的用户已经在您的服务器计算机上拥有系统帐户,那么部署 svnserve-over-SSH 解决方案是有意义的。否则,我们不会向公众广泛推荐此选项。一般认为,让用户通过 svnserve 或 Apache 管理的(虚拟)帐户访问存储库比通过成熟的系统帐户访问更安全。
答案3
这个网站有一些不错的技巧:http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks
如果以上方法都行不通,也许可以采用其他方法?每次有人提交内容时,都可以通过在提交钩子中添加类似以下内容来备份存储库:sudo rsync -a /my/repo/path /my/closed/path/
答案4
我同意 Greg 和 Olaf 的观点 - 选择 https 访问。我使用这样的设置已经有一段时间了,并没有发现它有什么缺点。
您将获得存储库内细粒度访问控制的额外好处 - 因此您可以使其中的某些部分为只读,而某些部分对于选定的用户则完全不可访问。