ACL 和经典权限

ACL 和经典权限

我正在尝试在我的 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 如何处理它。

尝试一下并在此处发布您的发现。

相关内容