我正在尝试在我的 FreeNAS 服务器上设置一个 git 服务器。我遇到的问题是按照我的意愿为不同的用户/组设置权限。
基本上我有两个不同的组:git-auth-user
其中包含应该有权rwx
访问包含所有存储库的目录的所有用户(我应该x
仅限于我认为的目录,但现在这是一个小细节),并且git-unauth-user
基本上只是 git 守护进程应授予只读访问权限。
我以为跑步setfacl -m "g:git-auth-user:rwx:fd:allow" git/
可以赋予我git-auth-user
所有权利,但事实并非如此。
从搜索来看,经典权限似乎仍然限制 ACL 可以分配的总体权限,这是否意味着我必须基本上授予others
全部权限(所以基本上chmod 777 dir
)?但我假设每个没有通过 ACL 限制其权利的人也将拥有完全访问权限,这显然不是我想要的。
有没有办法绕过必须将经典权限设置为other
我想通过 ACL 分发的最宽松的权限,或者如果没有,是否有一个 ACL 完全拒绝每个没有获得特殊访问权限的人的访问?
编辑:
ls -la
(所以chmod 770
对于目录)
drwxrwx---+ 2 root wheel 2 Jun 22 23:45 git
和
$ getfacl git/
# file: git/
# owner: root
# group: wheel
group:git-auth-user:rwx-----------:fd----:allow
owner@:rwxp--aARWcCos:------:allow
group@:rwxp--a-R-c--s:------:allow
everyone@:------a-R-c--s:------:allow
现在,当该组的用户git-auth-user
尝试在目录中生成新目录时git
,我得到
$ mkdir test.git
mkdir: test.git: Permission denied
另一方面,如果我使用chmod -R 777 git
它工作得很好,但这显然是一个非常糟糕的解决方案,因为我给每个人完全访问该目录的权限,而我梦想的解决方案将不允许每个人访问,除了git-auth-user
(即我的用户git-ro
也有对目录的写访问权限)目录,现在我可以根据 ACL 专门删除该用户的所有权限,但这显然无法扩展,我确信必须有一个更好的解决方案来解决我所忽略的问题。
答案1
ACL(如果存在)会覆盖通常的 chmod 位。此外,NFSv4 ACL 没有掩码。
我相信这里的问题是您只设置了“rwx”,而不是“rwxp”。 “p”是 APPEND_DATA/ADD_SUBDIRECTORY,它控制着……好吧,添加子目录。
答案2
如果您使用 ACL,经典的组权限就会变成所谓的掩码,它决定了您可以有效地为每个 setfacl 授予的最大权限,例如。
ls -k shows
-rw-r--r--+ root root
你有setfacl -m g:users:rw
因为掩码只被读取 getfacl 会告诉你:
group:users:rw
effective r
因此,通过经典的 chmod 将组设置为 rw 或 rwx,您可以通过 setfacl 授予所有权限。
附言。
这是 Linux ACL 处理,据我所知,带有 ZFS 的 Solaris 有点不同,我不完全确定带有 ZFS 的 BSD 如何处理它。
尝试一下并在此处发布您的发现。