Subversion 和 SVN+SSH 权限

Subversion 和 SVN+SSH 权限

我想设置一些 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

但是,我的设置有些地方无法正常工作......

  1. 即使userone不是该组的成员myprojectuserone也可以检出整个存储库。(这是因为userone是该组的成员sudo吗?)
  2. 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 存储库提供服务可能会更容易。

相关内容