将默认 ACL rwx 设置为目录,无法以用户身份创建子目录

将默认 ACL rwx 设置为目录,无法以用户身份创建子目录

作为root,我创建/test并设置了默认 ACL

setfacl -m -d dog:rwx /test

我验证了 getfacl 的输出

# file: test
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:dog:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

现在,作为用户dog,如果我尝试在 中创建目录/test,我会得到

mkdir: can't create directory 'sub': Permission denied

为什么会这样呢?如果我 setfacl 没有默认值, getfacl 显示user:dog:rwx而不是default:user:dog:rwx并且dog可以在那里创建一个子目录。

注意:它是在虚拟机内部进行测试的,虚拟机屏幕上的文本不可复制,因此我添加了屏幕截图。 在此输入图像描述

答案1

分配 ACL 时,使用setfacl -m -d ...和具有不同的行为。setfacl -m ...默认 ACL都是用来继承的。所以你必须分配ACL当你想要给予时acl权限给用户并分配默认 ACL继承某个目录下的权限。

解释


首先,我将目录(以 root 身份)/test并检查其权限:

$> mkdir /test ; ls -ld /test 
#Output
drwxr-xr-x 2 root root 4096 Dec  1 17:52 test

正如你所看到的,该团体和其他人没有默认权限。让我们看一下这两个命令之间的区别setfacl

使用setfacl -m guest:rwx /test

当我(以 root 身份)运行该命令时,我可以使用以下命令看到以下输出:

ls -ld /test
#Output
drwxrwxr-x+ 2 root root 4096 Dec  1 17:57 test

正如您在上面看到的,该目录现在有组的权限。顺便说一句,如果你删除ACL通过使用:setfacl --remove-all /test并且您使用时ls -ld /test您会注意到/test权限已恢复为以前的权限 ( drwxr-xr-x)。

getfacl -e /test
#Output
# file: test
# owner: root
# group: root
user::rwx
user:guest:rwx                  #effective:rwx
group::r-x                      #effective:r-x
mask::rwx
other::r-x

我曾经getfacl -e打印过所有有效的权利,这些权利对于了解如何ACL作品。

/test现在我将尝试在目录下创建一个文件guestedgar用户:

(user:guest)> touch /test/fuzz
#All is ok!
(user:edgar)> touch /test/buzz
#touch: cannot touch '/test/buzz': Permission denied

您可以注意到guest用户能够创建/test/fuzz文件而edgar不能。这种行为是正确的,因为前交叉韧带分配给guest


使用setfacl -dm guest:rwx /test

就我而言,语法setfacl -m -d guest:rwx /test无效(我使用的是 openSUSE Tumbleweed)。您也可以使用setfacl -m d:guest:rwx /test.

现在运行命令默认 ACL我有以下内容:

ls -ld /test
drwxr-xr-x+ 2 root root 4096 Dec  1 18:39 test
getfacl -e /test
# file: test
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:guest:rwx          #effective:rwx
default:group::r-x              #effective:r-x
default:mask::rwx
default:other::r-x

现在可以看到,该/test目录没有组的权限。通过使用getfacl ...我发现默认访客用户rwx权限,但正如我之前所说,它们将被用来继承。因此,如果您希望在您的情况下dog用户可以写入/test目录,则使用:setfacl -m dog:rwx /test


关于默认 ACL 或继承的 ACL

  1. 我将设置以下内容前交叉韧带默认访问控制列表
#ACL
setfacl -m guest:rwx /test

#Default ACL
sudo setfacl -dm guest:r /test
  1. 现在我将/testguest用户下创建一个目录:
(user:guest) /test: mkdir only_r
(user:guest) /test: ls -ld only_r
drwxr-xr-x+ 2 guest guest 4096 Dec  1 19:19 only_r/
(user:guest): getfacl -e only_r
# file: only_r/
# owner: guest
# group: guest
user::rwx
user:edgar:r--                  #effective:r--
user:guest:r--                  #effective:r--
group::r-x                      #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:edgar:r--          #effective:r--
default:user:guest:r--          #effective:r--
default:group::r-x              #effective:r-x
default:mask::r-x
default:other::r-x
  1. 现在我将尝试更改only_r目录并创建一个文件
(user:guest) /test: cd only_r
(user:guest) /test/only_r: touch fuzz
(user:guest) /test/only_r: ls
fuzz

正如您在上面所看到的,我能够更改为 only_r 并创建一个文件,尽管 ACL 还没有执行权限(如果目录没有执行权限,那么我无法cd执行它)。然而,这种行为是正确的,因为 Unix 权限和所有者drwxr-xr-x+ 2 guest guest允许guest用户cdcreate文件/test/only_r

  1. 最后,edgar我将尝试与用户一起cd创建/test/only_r一些文件:
(user:edgar) : cd /test/only_r
cd: permission denied: /test/only_r
(user:edgar) : echo jaja > only_r/fuzzbuzz
permission denied: only_r/fuzzbuzz

相关内容