我们有一个大型的 SVN 存储库设置,其中包含多个文件夹,例如:
/svn
/folder1
/folder2
/folder3
我们使用 SVN+SSH,并将所有人放入拥有 repo 的“svn”组中。我想让每个人都可以访问文件夹 1 和文件夹 2,但只有特定组用户可以访问文件夹 3(读写)。
有办法吗?还是我应该将 folder3 从 SVN 移出并移到其他地方?
谢谢
答案1
当您说访问时,您是指 SVN 访问 (签出 / 提交 / 等等) 吗?如果是这样,您可能需要查看 svnserve 本身的授权选项,因为它允许基于路径的授权。
你可以在这里读更多关于它的内容:
http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html
答案2
如果您可以控制 svn 服务器中的文件系统,并且该文件系统具有 ACL 功能(例如 ext3/4),则可以打开 ACL 来对 svn 树的权限进行粒度控制。
您可以通过以下方式为您的分区启用 acl:
mount partition-name -o remount,acl
或者通过编辑你的 fstab:
/dev/foo /mount-point ext3 defaults,acl 1 2
然后通过以下方式更改 svn 树中的权限:
~# setfacl -R -m g:"moreprivilegegroup":rwx /path/svnbase/
~# setfacl -R -d -m g:"moreprivilegegroup":rwx /path/svnbase/
~# setfacl -R -m g:"lessprivilegegroup":rwx /path/svnbase/
~# setfacl -R -d -m g:"lessprivilegegroup":rwx /path/svnbase/
~# setfacl -R -m g:"lessprivilegegroup":r-x /path/svnbase/folder3
~# setfacl -R -d -m g:"lessprivilegegroup":r-x /path/svnbase/folder3
因此,您将拥有一个名为“moreprivilegegroup”的组,该组对整个树具有完全权限,还有一个名为“lessprivilegegroup”的组,该组对整个树具有完全权限,但限制编辑/写入文件夹 3(及其子文件夹)中的文件
目录 folder3 将存储两个组的权限,这是使用默认 unix 权限无法完成的。
将相应的用户填充到两个组中就大功告成了。
该示例并不详尽,仅作为示例。请阅读setfacl
手册getfacl
页以获取更多信息。