https://onitroad.com 更多教程

目录上的默认 FACL

默认 ACL 仅在目录上创建。
当我们在目录上设置默认 ACL 时,在该目录中创建的任何文件也将自动分配该默认 FACL。

要在目录上创建默认 FACL:

# setfacl -m default:u:john:rw /accounts
# getfacl accounts/
# file: accounts/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:john:rw
default:group::r-x
default:mask::rwx
default:other::r-x

现在在帐户目录中创建一个新文件并列出文件上的 FACL:

# touch /accounts/test
# getfacl test
# file: test
# owner: root
# group: root
user::rw
user:john:rw
group::r-x			#effective:r-
mask::rw
other::r-

如何知道文件何时添加了 ACL

很容易知道文件何时添加了 ACL。
ls -l 命令将产生如下所示的输出。

# ls -l
-rw-r--r-+ 1   root   root  0  Sep  19  14:41  file

请注意权限末尾的 + 号。
这确认文件添加了 ACL。

创建和管理 FACL

FACL是文件访问控制列表。

setfacl 命令用于在给定文件上设置 ACL。
要授予用户 john 对文件 /tmp/test 的 rw 访问权限:

# setfacl -m u:john:rw /tmp/test

-m 选项告诉 setfacl 修改命令行中提到的文件上的 ACL。
我们可以有一个组来对文件具有特定权限,而不是用户 john:

# setfacl -m g:accounts:rw /tmp/test

也可以使用单个命令设置多个用户和组的 FACL:

# setfacl -m u:john:rw,g:accounts:rwx /tmp/test
Linux 访问控制列表ACL

为什么我们需要 ACL?

任何 UNIX 文件系统上的每个文件都有一个所有者/组和一组权限。
想象一个案例,当多个用户需要访问同一个文件并且用户来自不同的组时。
文件访问控制列表 (FACL) 或者简称 ACL 是其他用户/组及其对文件的权限的列表。

查看 ACL

要显示文件的详细 ACL 信息,请使用 getfacl 命令。

# getfacl /tmp/test
# file: test
# owner: root
# group: root
user::rw
user:john:rw
user:sam:rwx
group::r-
mask::rwx
other:--

注意 3 个不同的用户:行。
第一行列出了文件所有者的标准文件权限。
其他 2 个用户权限是用户 john 和 sam 的个人权限。
这里的掩码字段仅适用于我们赋予用户和组的另外权限。
如果掩码设置为 rwx,则将向其他用户/组授予读取、写入和执行权限。
如果掩码设置为 r-x,则不会向其他用户/组授予写权限。
通常,不要将掩码设置为 rwx 以外的任何内容。
掩码值不影响标准 UNIX 用户/组/其他权限。

没有 ACL 的文件
如果在没有 ACL 的文件上运行 getfacl 命令,则不会显示另外的“user:”行和“mask”行,并且会显示标准文件权限。

# getfacl test
# file: test
# owner: root
# group: root
user::rw
group::r-
other::r-

删除 FACL

要删除 FACL,请使用带有 -x 选项的 setfacl 命令:

# setfacl -x u:john /tmp/test

上述命令删除文件 /tmp/test 上用户 john 的 ACL。
其他用户/组的 ACL(如果有)不受影响。

要删除与文件关联的所有 ACL,请使用带有 setfacl 的 -b 选项:

# setfacl -b /tmp/test

备份 FACL

很多时候,备份软件可能不会复制文件上与 FACL 相关的元数据。
在这种情况下,我们可能希望备份有关文件的 FACL 信息。
现在,可以将目录中所有文件(包括所有子目录)的 FACL 复制到单个文件中。

# cd /accounts
# getfacl -R * > accounts_facl        ( -R -> recursive )

恢复 FACL

当我们恢复 /accounts 目录中的文件时,我们必须恢复与该目录中的文件关联的 FACL。
要做到这一点,请使用 FACL 备份文件 account_facl 和 -restore 选项:

# setfacl --restore=accounts_facl
日期:2020-09-17 00:14:26 来源:oir作者:oir