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。
分别使用 chmod 和 ls 命令(而非 setfacl 和 getfacl 命令)进行设置和显示。
提供了更丰富的继承语义,用于指定如何将访问特权从目录应用到子目录等。有关更多信息,请参见ACL 继承。
两种 ACL 模型均可比标准文件权限提供更精细的访问控制。与 POSIX 式 ACL 非常相似,新 ACL 也由多个访问控制条目 (Access Control Entry, ACE) 构成。
POSIX 式 ACL 使用单个条目定义允许哪些权限,拒绝哪些权限。而新 ACL 模型包含两种类型的 ACE,用于进行访问检查: ALLOW 和 DENY。因此,不能根据定义了一组权限的单个 ACE 来推断是允许还是拒绝该 ACE 中未定义的权限。
NFSv4 样式的 ACL 与 POSIX 式 ACL 之间的转换如下:
如果使用任何可识别 ACL 的实用程序(如 cp、mv、tar、cpio 或 rcp 命令)将具有 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 –p 或 cpio –P)创建 UFS tar 或 cpio 归档文件,则在运行以前的 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 数据。