作为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
为什么会这样?如果我在没有默认设置的情况下设置 facl,则 getfacl 显示user:dog:rwx
而不是default:user:dog:rwx
并dog
可以在那里创建一个子目录。
在分配 ACL 时使用
setfacl -m -d ...
和具有不同的行为。默认 ACL用于继承setfacl -m ...
。因此,当您想要将acl 权限授予用户并分配默认 ACL以继承某些目录下的权限时,您必须分配ACL 。解释
首先,我将目录(作为 root)
/test
并检查其权限:如您所见,组和其他默认情况下没有写权限。
setfacl
让我们看一下这两个命令之间的区别。使用
setfacl -m guest:rwx /test
当我运行该命令(以 root 身份)时,我可以使用以下命令看到以下输出:
正如您在上面看到的,该目录现在具有该组的写权限。顺便说一下,如果您使用以下方法删除ACL:
setfacl --remove-all /test
并且您使用ls -ld /test
了,您会注意到/test
权限已恢复为以前的权限 (drwxr-xr-x
)。我过去常常
getfacl -e
打印所有有效权限,这些权限对于了解ACL的工作原理很重要。现在我将尝试在用户
/test
目录guest
下创建一个文件edgar
:您会注意到
guest
用户能够创建/test/fuzz
文件而edgar
不能。由于分配给的ACL,该行为是正确的guest
。使用
setfacl -dm guest:rwx /test
在我的例子中,语法
setfacl -m -d guest:rwx /test
无效(我使用的是 openSUSE Tumbleweed)。您也可以使用setfacl -m d:guest:rwx /test
.现在使用默认 ACL运行命令我有以下内容:
正如您现在看到的,该
/test
目录对组没有写权限。通过使用getfacl ...
我得到默认来宾用户具有rwx
权限,但正如我之前所说,它们将被继承。因此,如果您希望在您的情况下dog
用户可以写入/test
目录,则使用:setfacl -m dog:rwx /test
。关于默认 ACL 或继承的 ACL
/test
目录guest
:only_r
目录并创建一个文件正如你在上面所做的那样,我能够更改为 only_r 并创建一个文件,尽管 ACL 没有执行和写入权限(如果目录没有执行权限,那么我就不能
cd
)。然而,这种行为是正确的,因为 Unix 权限和所有者drwxr-xr-x+ 2 guest guest
允许guest
用户cd
和create
文件/test/only_r
edgar
我将尝试与用户cd
一起/test/only_r
创建一些文件: