可以使用 chmod 命令修改 ZFS 文件的 ACL。以下用于修改 ACL 的 chmod 语法使用 acl-specification 来确定 ACL 的格式。有关 acl-specification 的说明,请参见ACL 设置语法的说明。
添加 ACL 项
为用户添加 ACL 项
% chmod A+acl-specification filename
按 index-ID 添加 ACL 项
% chmod Aindex-ID+acl-specification filename
此语法用于在指定的 index-ID 位置插入新的 ACL 项。
替换 ACL 项
% chmod A=acl-specification filename
% chmod Aindex-ID=acl-specification filename
删除 ACL 项
按 index-ID 删除 ACL 项
% chmod Aindex-ID- filename
由用户删除 ACL 项
% chmod A-acl-specification filename
从文件中删除所有非普通 ACE
% chmod A- filename
详细 ACL 信息是通过使用 ls –v 命令来显示的。例如:
# ls -v file.1 -rw-r--r-- 1 root root 206695 Jul 20 13:43 file.1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
有关使用缩写 ACL 格式的信息,请参见以缩写格式设置和显示 ZFS 文件的 ACL。
示例 7-1 修改 ZFS 文件的普通 ACL本节提供了有关设置和显示普通 ACL 的示例,普通 ACL 是指 ACL 中只包含传统的 UNIX 条目(用户、组以及其他人)。
在以下示例中,普通 ACL 存在于 file.1 中:
# ls -v file.1 -rw-r--r-- 1 root root 206695 Jul 20 13:43 file.1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
在以下示例中,为 group@ 授予了 write_data 权限。
# chmod A1=group@:read_data/write_data:allow file.1 # ls -v file.1 -rw-rw-r-- 1 root root 206695 Jul 20 13:43 file.1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/write_data:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
在以下示例中,对 file.1 的权限重新设置为 644。
# chmod 644 file.1 # ls -v file.1 -rw-r--r-- 1 root root 206695 Jul 20 13:43 file.1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow示例 7-2 设置 ZFS 文件的非普通 ACL
本节提供了设置和显示非普通 ACL 的示例。
在以下示例中,为用户 joe 添加了对 test.dir 目录的 read_data/execute 权限。
# chmod A+user:joe:read_data/execute:allow test.dir # ls -dv test.dir drwxr-xr-x+ 2 root root 2 Jul 20 14:23 test.dir 0:user:joe:list_directory/read_data/execute:allow 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 3:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
在以下示例中,为用户 joe 删除了 read_data/execute 权限。
# chmod A0- test.dir # ls -dv test.dir drwxr-xr-x 2 root root 2 Jul 20 14:23 test.dir 0:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 2:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow示例 7-3 与 ZFS 文件权限的 ACL 交互
以下 ACL 示例展示了在设置 ACL 与随后更改文件或目录的权限位之间发生的交互。
在以下示例中,普通 ACL 存在于 file.2 中:
# ls -v file.2 -rw-r--r-- 1 root root 2693 Jul 20 14:26 file.2 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
在以下示例中,从 everyone@ 中删除了 ACL allow 权限。
# chmod A2- file.2 # ls -v file.2 -rw-r----- 1 root root 2693 Jul 20 14:26 file.2 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow
在此输出中,文件的权限位从 644 重置为 640。删除 everyone@ 的 ACL 允许权限时,已有效地从文件的权限位中删除了 everyone@ 的读取权限。
在以下示例中,现有 ACL 将替换为 everyone@ 的 read_data/write_data 权限。
# chmod A=everyone@:read_data/write_data:allow file.3 # ls -v file.3 -rw-rw-rw- 1 root root 2440 Jul 20 14:28 file.3 0:everyone@:read_data/write_data:allow
在此输出中,chmod 语法有效地将现有 ACL 中的 read_data/write_data:allow 权限替换为对所有者、组和 everyone@ 的读取/写入权限。在此模型中,everyone@ 用于指定对任何用户或组的访问权限。由于不存在用以覆盖所有者和组的权限的 owner@ 或 group@ ACL 项,因此权限位会设置为 666。
在以下示例中,现有 ACL 将替换为用户 joe 的读取权限。
# chmod A=user:joe:read_data:allow file.3 # ls -v file.3 ----------+ 1 root root 2440 Jul 20 14:28 file.3 0:user:joe:read_data:allow
在此输出中,文件权限计算结果为 000,这是因为不存在对应 owner@、group@ 或 everyone@ 的 ACL 项,这些项用于表示文件的传统权限组成部分。文件所有者可通过重置权限(和 ACL)来解决此问题,如下所示:
# chmod 655 file.3 # ls -v file.3 -rw-r-xr-x 1 root root 2440 Jul 20 14:28 file.3 0:owner@:execute:deny 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/execute/read_attributes/read_acl /synchronize:allow 3:everyone@:read_data/read_xattr/execute/read_attributes/read_acl /synchronize:allow示例 7-4 恢复 ZFS 文件的普通 ACL
可以使用 chmod 命令来删除文件或目录的所有非普通 ACL。
在以下示例中,test5.dir 中存在两个非普通 ACE。
# ls -dv test5.dir drwxr-xr-x+ 2 root root 2 Jul 20 14:32 test5.dir 0:user:lp:read_data:file_inherit:deny 1:user:joe:read_data:file_inherit:deny 2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 3:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 4:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
在以下示例中,删除了用户 joe 和 lp 的非普通 ACL。剩余的 ACL 包含 owner@、group@ 和 everyone@ 的缺省值。
# chmod A- test5.dir # ls -dv test5.dir drwxr-xr-x 2 root root 2 Jul 20 14:32 test5.dir 0:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 2:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow示例 7-5 将 ACL 集合应用于 ZFS 文件
因为有 ACL 集合可用,因此您不必分别应用各个 ACL 权限。有关 ACL 集合的说明,请参见ZFS ACL 集合。
例如,您可以如下所示应用 read_set:
# chmod A+user:bob:read_set:allow file.1 # ls -v file.1 -r--r--r--+ 1 root root 206695 Jul 20 13:43 file.1 0:user:bob:read_data/read_xattr/read_attributes/read_acl:allow 1:owner@:read_data/read_xattr/write_xattr/read_attributes /write_attributes/read_acl/write_acl/write_owner/synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
您可以如下所示应用 write_set 和 read_set:
# chmod A+user:bob:read_set/write_set:allow file.2 # ls -v file.2 -rw-r--r--+ 1 root root 2693 Jul 20 14:26 file.2 0:user:bob:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl:allow 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow