Oracle Solaris ZFS 管理指南

设置 ZFS 文件的 ACL

正如 ZFS 所实现的那样,ACL 由 ACL 项构成。ZFS 提供了一个 ACL 模型,其中所有文件都包括 ACL。通常,ACL 很普通,因为它仅表示传统的 UNIX owner/group/other 项。

如果更改文件的权限,该文件的 ACL 也会相应地更新。此外,如果删除授予用户对文件或目录的访问权限的非普通 ACL,则由于该文件或目录的权限位会将访问权限授予组或各用户,因此该用户仍可访问这一文件或目录。所有访问控制决策都由文件或目录的 ACL 中表示的权限来管理。

对于 ZFS 文件,ACL 访问权限的主要规则如下:

如果设置某个目录的非普通 ACL,则该目录的子目录不会自动继承该 ACL。如果设置了非普通 ACL 并希望目录的子目录继承该 ACL,则必须使用 ACL 继承标志。有关更多信息,请参见表 8–3以详细格式对 ZFS 文件设置 ACL 继承

创建新文件时,根据 umask 值将应用类似如下的缺省的普通 ACL:


$ ls -v file.1
-rw-r--r--   1 root     root      206663 May 20 14:09 file.1
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:write_data/append_data/execute:deny
     3:group@:read_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

请注意,本例中每个用户类别 (owner@, group@, everyone@) 有两个 ACL 项。一个项用于 deny 权限,一个项用于 allow 权限。

此文件 ACL 的说明如下:

0:owner@

拒绝属主对文件的执行权限 (execute:deny)。

1:owner@

属主可以读取和修改文件的内容 (read_data/write_data/append_data)。属主还可以修改文件的属性,如时间戳、扩展属性和 ACL (write_xattr/write_attributes/write_acl)。此外,属主还可以修改文件的拥有权 (write_owner:allow)。

2:group@

拒绝组对文件的修改和执行权限 (write_data/append_data/execute:deny)。

3:group@

授予组对文件的读取权限 (read_data:allow)。

4:everyone@

拒绝非文件属主或非文件所属组成员执行或修改文件内容以及修改文件任何属性的权限 (write_data/append_data/write_xattr/execute/write_attributes/write_acl/write_owner:deny)。

5:everyone@

授予非文件属主或非文件所属组成员读取文件和文件属性的权限 (read_data/read_xattr/read_attributes/read_acl/synchronize:allow)。synchronize 访问权限当前未实现。

创建新目录时,根据 umask 值将应用类似如下的缺省目录 ACL:


$ ls -dv dir.1
drwxr-xr-x   2 root     root           2 May 20 14:11 dir.1
     0:owner@::deny
     1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     2:group@:add_file/write_data/add_subdirectory/append_data:deny
     3:group@:list_directory/read_data/execute:allow
     4:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     5:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

此目录 ACL 的说明如下:

0:owner@

目录的属主 deny 列表为空 (::deny)。

1:owner@

属主可以读取和修改目录内容 (list_directory/read_data/add_file/write_data/add_subdirectory/append_data),搜索内容 (execute) 以及修改时间戳、扩展属性和 ACL 等目录属性 (write_xattr/write_attributes/write_acl)。此外,属主还可以修改目录的拥有权 (write_owner:allow)。

2:group@

组不能添加或修改目录内容 ( add_file/write_data/add_subdirectory/append_data:deny)。

3:group@

组可以列出并读取目录内容。此外,组还具有搜索目录内容的执行权限 (list_directory/read_data/execute:allow)。

4:everyone@

拒绝非文件属主或非文件所属组成员添加或修改目录内容的权限 (add_file/write_data/add_subdirectory/append_data)。此外还拒绝修改目录任何属性的权限 (write_xattr/write_attributes/write_acl/write_owner:deny)。

5:everyone@

授予非文件属主或非文件所属组成员对目录内容和目录属性的读取和执行权限 (list_directory/read_data/read_xattr/execute/read_attributes/read_acl/synchronize:allow)。synchronize 访问权限当前未实现。