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

退出打印视图

更新时间: 2014 年 12 月
 
 

了解 zoned 属性

将数据集委托给非全局区域时,必须对该数据集进行特殊标记,以便特定属性不使用全局区域上下文进行解释。将数据集委托给受区域管理员控制的非全局区域之后,便不能再信任其内容。与任何文件系统一样,可能存在 setuid 二进制命令、符号链接或可能对全局区域的安全性造成不利影响的可疑内容。此外,不能在全局区域的上下文中解释 mountpoint 属性。否则,区域管理员可能会影响全局区域的名称空间。为解决后一个问题,ZFS 使用 zoned 属性来指示已在某一时刻将数据集委托给非全局区域。

zoned 属性是在首次引导包含 ZFS 数据集的区域时自动启用的布尔值。区域管理员将无需手动启用此属性。如果设置了 zoned 属性,则无法在全局区域中挂载或共享数据集。以下示例将 tank/zone/zion 委托给一个区域,tank/zone/global 则没有委托:

# zfs list -o name,zoned,mountpoint -r tank/zone
NAME                  ZONED  MOUNTPOINT
tank/zone/global        off  /tank/zone/global
tank/zone/zion           on  /tank/zone/zion
# zfs mount
tank/zone/global           /tank/zone/global
tank/zone/zion             /export/zone/zion/root/tank/zone/zion

请注意 mountpoint 属性与当前挂载 tank/zone/zion 数据集的目录之间的差异。mountpoint 属性反映的是磁盘上存储的属性,而不是数据集当前在系统中的挂载位置。

从区域中删除数据集或销毁区域时,不会自动清除 zoned 属性。此行为是由与这些任务关联的固有安全风险引起的。由于不受信任的用户已取得对数据集及其后代的完全访问权限,因此 mountpoint 属性可能会设置为错误值,或者文件系统中可能存在 setuid 二进制命令。

为了防止意外的安全风险,要通过任何方式重用数据集时,必须由全局区域管理员手动清除 zoned 属性。将 zoned 属性设置为 off 之前,请确保数据集及其所有后代的 mountpoint 属性已设置为合理值并且不存在 setuid 二进制命令,或禁用 setuid 属性。

确定没有任何安全漏洞后,即可使用 zfs set 或 zfs inherit 命令禁用 zoned 属性。如果在区域正在使用数据集时禁用 zoned 属性,则系统的行为方式可能无法预测。仅当确定非全局区域不再使用数据集时,才能更改该属性。