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

退出打印视图

更新时间: 2014 年 12 月
 
 

Solaris ACL 模型

Solaris 的旧版本支持的 ACL 实现主要基于 POSIX ACL 草案规范。基于 POSIX 草案的 ACL 用于保护 UFS 文件,由 NFSv4 之前的 NFS 版本转换。

引入 NFSv4 后,新 ACL 模型完全支持 NFSv4 在 UNIX 和非 UNIX 客户机之间提供的互操作性。如 NFSv4 规范中所定义,这一新的 ACL 实现提供了更丰富的基于 NT 样式 ACL 的语义。

与旧模型相比,新 ACL 模型的主要变化如下:

  • 基于 NFSv4 规范并与 NT 样式的 ACL 相似。

  • 提供了更详尽的访问特权集合。有关更多信息,请参见Table 7–2

  • 分别使用 chmodls 命令(而非 setfaclgetfacl 命令)进行设置和显示。

  • 提供了更丰富的继承语义,用于指定如何将访问特权从目录应用到子目录等。有关更多信息,请参见ACL 继承

两种 ACL 模型均可比标准文件权限提供更精细的访问控制。与 POSIX 式 ACL 非常相似,新 ACL 也由多个访问控制条目 (Access Control Entry, ACE) 构成。

POSIX 式 ACL 使用单个条目定义允许哪些权限,拒绝哪些权限。而新 ACL 模型包含两种类型的 ACE,用于进行访问检查: ALLOWDENY。因此,不能根据定义了一组权限的单个 ACE 来推断是允许还是拒绝该 ACE 中未定义的权限。

NFSv4 样式的 ACL 与 POSIX 式 ACL 之间的转换如下:

  • 如果使用任何可识别 ACL 的实用程序(如 cpmvtarcpiorcp 命令)将具有 ACL 的 UFS 文件传送到 ZFS 文件系统,则 POSIX 式 ACL 会转换为等效的 NFSv4 样式的 ACL。

  • 一些 NFSv4 样式的 ACL 会转换为 POSIX 式 ACL。如果 NFSv4 样式的 ACL 未转换为 POSIX 式 ACL,则会显示类似于以下内容的消息:

    # cp -p filea /var/tmp
    cp: failed to set acl entries on /var/tmp/filea
  • 如果在运行当前 Solaris 发行版的系统上使用保留的 ACL 选项(tar –pcpio –P)创建 UFS tarcpio 归档文件,则在运行以前的 Solaris 发行版的系统中提取该归档文件时将丢失 ACL。

    所有文件都以正确的文件模式提取,但会忽略 ACL 项。

  • 可以使用 ufsrestore 命令将数据恢复至 ZFS 文件系统中。如果原始数据包括 POSIX 样式的 ACL,则这些 ACL 会被转换为 NFSv4 样式的 ACL。

  • 如果尝试对 UFS 文件设置 NFSv4 样式的 ACL,则会显示类似于以下内容的消息:

    chmod: ERROR: ACL type's are different
  • 如果尝试对 ZFS 文件设置 POSIX 样式的 ACL,则会显示以下类似信息:

    # getfacl filea
    File system doesn't support aclent_t style ACL's.
    See acl(5) for more information on Solaris ACL support.

有关对 ACL 和备份产品的其他限制信息,请参见使用其他备份产品保存 ZFS 数据