跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11.1 管理:ZFS 文件系统 Oracle Solaris 11.1 Information Library (简体中文) |
1. Oracle Solaris ZFS 文件系统(介绍)
6. 使用 Oracle Solaris ZFS 快照和克隆
7. 使用 ACL 和属性保护 Oracle Solaris ZFS 文件
Solaris 的旧版本支持的 ACL 实现主要基于 POSIX 草案 ACL 规范。基于 POSIX 样式的 ACL 用来保护 UFS 文件,并通过 NFSv4 之前的 NFS 版本进行转换。
引入 NFSv4 后,新 ACL 模型完全支持 NFSv4 在 UNIX 和非 UNIX 客户机之间提供的互操作性。如 NFSv4 规范中所定义,这一新的 ACL 实现提供了更丰富的基于 NT 样式 ACL 的语义。
与旧模型相比,新 ACL 模型的主要变化如下:
基于 NFSv4 规范并与 NT 样式的 ACL 相似。
提供了更详尽的访问特权集合。有关更多信息,请参见表 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 数据。
普通 ACL-只包含传统的 UNIX user、group 和 owner 条目。
非普通 ACL-不仅包含所有者、组和用户的条目,还包含其他条目,或者包含继承标志集,或者是其中的条目以非传统顺序排列。
用于设置普通 ACL 的语法
chmod [options] A[index]{+|=}owner@ |group@ |everyone@: access-permissions/...[:inheritance-flags]: deny | allow file
chmod [options] A-owner@, group@, everyone@:access-permissions /...[:inheritance-flags]:deny | allow file ...
chmod [options] A[index]- file
用于设置非普通 ACL 的语法
chmod [options] A[index]{+|=}user|group:name:access-permissions /...[:inheritance-flags]:deny | allow file
chmod [options] A-user|group:name:access-permissions /...[:inheritance-flags]:deny | allow file ...
chmod [options] A[index]- file
标识用于普通 ACL 语法的 ACL-entry-type。有关 ACL-entry-type 的说明,请参见表 7-1。
标识用于显式 ACL 语法的 ACL-entry-type。用户和组的 ACL-entry-type 还必须包含 ACL-entry-ID、username 或 groupname。有关 ACL-entry-type 的说明,请参见表 7-1。
标识授予或拒绝的访问权限。有关 ACL 访问特权的说明,请参见表 7-2。
标识一组可选的 ACL 继承标志。有关 ACL 继承标志的说明,请参见表 7-4。
标识授予还是拒绝访问权限。
在以下示例中,owner@、group@ 或 everyone@ 没有 ACL-entry-ID 值。
group@:write_data/append_data/execute:deny
由于 ACL 中包括特定用户 (ACL-entry-type),因此以下示例中包括 ACL-entry-ID。
0:user:gozer:list_directory/read_data/execute:allow
显示的 ACL 项与以下内容类似:
2:group@:write_data/append_data/execute:deny
本示例中指定的2 或索引 ID 用于标识较大 ACL 中的 ACL 项,较大的 ACL 中可能包含对应于所有者、特定 UID、组和各用户的多个项。可以使用 chmod 命令指定索引 ID,以标识 ACL 要修改的部分。例如,可将索引 ID 3 标识为 chmod 命令中的 A3,与以下内容类似:
chmod A3=user:venkman:read_acl:allow filename
下表介绍了 ACL 项类型,即所有者、组和其他对象的 ACL 表示形式。
表 7-1 ACL 项类型
|
表 7-2 ACL 访问特权
|
下表提供了有关 ACL delete 和 delete_child 行为的其他详细信息。
表 7-3 ACL delete 和 delete_child 权限行为
|
可以在 ACL 集合中应用以下 ACL 组合,而不需要分别设置各个权限。有以下 ACL 集合可用。
|
这些 ACL 集合是预定义的,不能修改。
使用 ACL 继承的目的是使新创建的文件或目录可以继承其本来要继承的 ACL,但不忽略父目录的现有权限位。
缺省情况下,不会传播 ACL。如果在某个目录上设置了非普通 ACL,则任何后续目录都不会继承该 ACL。必须对文件或目录指定 ACL 的继承。
表 7-4 ACL 继承标志
|
此外,还可以使用 aclinherit 文件系统属性对文件系统设置更为严格或更为宽松的缺省 ACL 继承策略。有关更多信息,请参见下一节。
ZFS 文件系统包括了以下 ACL 属性来确定 ACL 继承的特定行为和 ACL 与 chmod 操作的交互。
aclinherit-确定 ACL 继承的行为。该属性的值包括:
discard-对于新对象,创建文件或目录时不会继承任何 ACL 项。文件或目录的 ACL 等效于该文件或目录的权限模式。
noallow-对于新对象,仅继承访问类型为 deny 的可继承 ACL 项。
restricted-对于新对象,继承 ACL 项时将删除 write_owner 和 write_acl 权限。
passthrough-当属性值设置为 passthrough 时,会使用由可继承 ACE 确定的模式来创建文件。如果不存在影响模式的可继承 ACE,则会根据应用程序要求的模式设置模式。
passthrough-x-与 passthrough 语义相同,只不过如果启用 passthrough-x,将使用执行 (x) 权限创建文件,但前提是必须在文件创建模式和影响模式的可继承 ACE 中设置执行权限。
aclinherit 的缺省模式为 restricted。
aclmode-在最初创建文件时修改 ACL 行为,或者在 chmod 操作期间控制如何修改 ACL。包括以下属性值:
discard-aclmode 属性为 discard 的文件系统将删除不表示文件模式的所有 ACL 项。这是缺省值。
mask-aclmode 属性为 mask 的文件系统将减少用户或组的权限。除非用户项与文件或目录的所有者具有相同的 UID,否则将减少权限,以使其不会大于组权限位。在这种情况下,减少 ACL 权限,以使其不会大于所有者权限位。如果未执行显式 ACL 集合操作,则 mask 值还会在模式更改之后保留 ACL。
passthrough-aclmode 属性为 passthrough 的文件系统指示除了生成必要的 ACL 项来表示文件或目录的新模式外,不对 ACL 进行其他更改。
aclmode 的缺省模式为 discard。
有关使用 aclmode 属性的更多信息,请参见示例 7-14。