我想设置一些 Subversion 存储库,通过 SVN+SSH 进行访问,这样每个存储库都归不同的组所有,并且只能由该组的成员进行读写。这是我目前所做的:
sudo addgroup myproject
sudo mkdir -p /svn/myproject
sudo svnadmin create /svn/myproject
sudo chown -R :myproject /svn/myproject
sudo chmod -R g+rws /svn/myproject
但是,我的设置有些地方无法正常工作......
- 即使
userone
不是该组的成员myproject
,userone
也可以检出整个存储库。(这是因为userone
是该组的成员sudo
吗?) usertwo
是该组的成员myproject
,但由于错误而无法提交到存储库:permission denied while accessing /svn/myproject/db/revprops/__something__/__something__
第 1 点是一个问题,因为这可能意味着每个拥有机器 shell 访问权限的人都可以签出代码。第 2 点有问题,因为(显然)拥有正确权限的用户无法提交到存储库。
我在这个设置中做错了什么?
答案1
即使 userone 不是 myproject 组的成员,userone 也可以检出整个存储库。
这些存储库可能是全球可读的。您可以通过运行来更改这一点
sudo chmod -R o-rws /svn/myproject
(这是因为 userone 是 sudo 组的成员吗?)
不,组成员身份sudo
仅意味着您可以通过 获得 root 权限sudo
。SVN 不会利用这一点。(但更一般地说,如果用户在计算机上拥有 root 权限,他们可以读取计算机上的任何内容,您无法阻止他们。)
usertwo 是 myproject 组的成员,但无法提交到存储库
可能发生的情况是,userone
向存储库提交了一些新文件,但这些文件最终归他所有,项目组无法写入。
对此的常用解决方案是使项目内的所有目录都设置 setgid 位。这将强制其中创建的所有文件归项目组所有。
sudo chmod -R g+s /svn/myproject
然后您还需要确保每个人的 umask 都设置为 002,这样文件默认是可组写入的。
这一切都变得相当复杂和脆弱,因此https
仅通过 SVN 存储库提供服务可能会更容易。