如果您有 ACL(Posix ACL,可能与 MacOS 上的 ACL 不同)

如果您有 ACL(Posix ACL,可能与 MacOS 上的 ACL 不同)

当文件所有者属于多个组时,如何ls -l决定显示哪个组?例如,在 MacOS 上,我看到

drwx------+  48 flow2k  staff             1536 Feb  5 10:11 Documents
drwxr-xr-x+ 958 flow2k  _lpoperator      30656 Feb 22 16:07 Downloads

这里两个目录显示的组是不同的(staff_lpoperator) - 这是基于什么?我是这两个群体的成员。

答案1

我认为这个问题源于对团体如何运作的误解。列出的组ls -l不是用户可能属于,但该组文件属于.每个文件都由一个用户和一个组拥有。通常,该用户位于该组中,但这不是必需的。例如,我的用户属于以下组:

$ groups
audio uucp sparhawk plugdev

但不是在团体中cups。现在,让我们创建一个文件。

$ touch foo
$ ls -l foo
-rw-r--r-- 1 sparhawk sparhawk 0 Feb 23 21:01 foo

这是由用户拥有的sparhawk,也是我的主要组,也称为sparhawk。现在让我们更改文件的组所有者。

$ sudo chown sparhawk:cups foo
changed ownership of 'foo' from sparhawk:sparhawk to sparhawk:cups
$ ls -l foo
-rw-r--r-- 1 sparhawk cups 0 Feb 23 21:01 foo

您可以看到现在拥有该文件的组不是我所在的组。

这个概念允许精确操作文件权限。例如,您可以创建一个包含成员 X、Y 和 Z 的组,并在三人之间共享文件。您可以进一步授予 X 写入权限,但只授予其他人(组)读取权限。

答案2

在传统权限中,无论用户属于多少个组,文件都将属于一个组。

创建文件时 组被设置为用户的主要组。然后,用户可以将其移动到他们的任何组。

如果您有 ACL(Posix ACL,可能与 MacOS 上的 ACL 不同)

那么可以有多个组。然而 ls 只显示第一组,而 mode 显示组掩码。 (这可能会令人困惑。如果显示组名称的 ACL 会更好)。

用户无法将第一个组更改为他们不属于的任何组。但他们可以添加辅助组和用户权限(对于任何组或用户)。

您不需要 root (sudo) 权限即可执行此操作。

相关内容