在 Oracle® Solaris 11.2 中管理 ZFS 文件系统

退出打印视图

更新时间: 2014 年 12 月
 
 

设置 ZFS 文件的 ACL

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

ZFS 文件仍然具有权限位和模式,但这些值大部分是 ACL 所表示内容的高速缓存。因此,如果更改文件的权限,该文件的 ACL 也会相应地更新。此外,如果删除授予某一用户对文件或目录访问权限的非普通 ACL,而该文件或目录的权限位将访问权限授予组或所有用户,则该用户仍可访问这一文件或目录。所有访问控制决策都由文件或目录的 ACL 中表示的权限来管理。

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

  • ZFS 按照 ACL 项在 ACL 中的排列顺序从上至下对其进行处理。

  • 仅处理具有与访问权限的请求者匹配的“对象”的 ACL 项。

  • 一旦授予允许权限,同一 ACL 权限集当中的后续 ACL 拒绝项即不能拒绝此权限。

  • 无条件地授予文件所有者 write_acl 权限,即使显式拒绝此权限时也是如此。否则,将拒绝仍未指定的所有权限。

    如果拒绝权限或缺少访问权限,特权子系统将确定为文件所有者或超级用户授予的访问请求。此机制可以防止文件所有者无法访问其文件,并允许超级用户修改文件以进行恢复。

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

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

$ ls -v file.1
-rw-r--r--   1 root     root      206663 Jun 23 15:06 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

在此示例中每个用户类别(owner@group@everyone@)都具有一个 ACL 项。

此文件 ACL 的说明如下:

0:owner@

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

synchronize 访问权限当前未实现。

1:group@

向组授予对文件和文件属性的读取权限 (read_data/read_xattr/read_attributes/read_acl:allow)。

2: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 Jul 20 13:44 dir.1
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

此目录 ACL 的说明如下:

0:owner@

所有者可以读取和修改目录内容 (list_directory/read_data/add_file/write_data/add_subdirectory/append_data),以及读取和修改文件的属性,如时间戳、扩展属性和 ACL (/read_xattr/write_xattr/read_attributes/write_attributes/read_acl/write_acl )。此外,所有者可以搜索内容 (execute),删除文件或目录 (delete_child),以及修改目录的所有权 (write_owner:allow)。

synchronize 访问权限当前未实现。

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)。synchronize 访问权限当前未实现。