Go to main content

手册页第 7 部分:标准、环境、宏、字符集和杂项

退出打印视图

更新时间: 2022年7月27日 星期三
 
 

zones (7)

名称

zones - Solaris 操作系统容器

描述

Oracle Solaris 中的区域工具提供了运行应用程序的隔离环境。在区域中运行的进程可以免受系统中其他活动的监视或干扰。对其他进程、网络接口、文件系统、设备和进程间通信设备的访问受到限制,防止不同区域中的进程之间相互交互。

在区域中可用的权限受到限制,以防止操作造成系统范围的影响。请参见 privileges(7)

可以使用 zoneadm(8)zonecfg(8) 实用程序配置和管理区域。可以为区域指定配置详细信息,在区域中安装文件系统内容(包括软件包)以及管理区域的运行时状态。可以使用 zlogin(1) 在活动区域中运行命令。您不需要通过基于网络的登录服务器(例如 in.rlogind(8)sshd(8))进行登录,即可执行此操作。

区域由区域委托重启程序管理,由 SMF FMRI 标识:

svc:/system/zones:default

系统引导时区域的自动引导取决于其 autoboot 属性。Conversely, zones are shut down according to their autoshutdown property when the global zone is gracefully shutdown.有关 autobootautoshutdown 的更多信息,请参见 zonecfg(8) 手册页。

区域委托重启程序允许使用依赖项和优先级控制引导顺序。还支持调节并发状态转换。有关更多信息,请参见 svc.zones(8) 手册页。

每个活动区域使用一个字母数字名称和一个数字 ID 来标识。字母数字名称是使用 zonecfg(8) 实用程序配置的。数字 ID 是在引导区域时自动分配的。zonename(1) 实用程序可用于报告当前区域的名称,zoneadm(8) 实用程序可用于报告已配置区域的名称和 ID。

区域可以处于多种状态之一:

CONFIGURED

指示区域配置已完全指定并且已提交到稳定的存储设备。

INCOMPLETE

指示区域正在安装或卸载过程中,或者已在此类转换期间中断。

INSTALLED

指示区域配置已在系统上实例化:软件包已安装在区域的根路径下。

READY

指示区域的“虚拟平台”已建立。例如,文件系统已挂载,设备已配置,但尚未启动任何与区域关联的进程。

RUNNING

指示正在运行与区域应用程序环境关联的用户进程。

SHUTTING_DOWN
DOWN

指示正在停止区域。如果区域无法退出应用程序环境状态(例如已挂载的文件系统),或者无法销毁虚拟平台的某个部分,则区域会在其中一个状态中挂起。在这些情况下,需要操作者进行干预。

UNAVAILABLE

指示已安装区域但无法引导。出现以下情况时区域会进入无法使用的状态:区域的存储不可用而 svc:/system/zones:default 处于联机状态,或区域尝试引导;成功提取归档文件之后基于归档文件的安装失败;区域的软件与全局区域的软件不兼容(如不正确的强制附加之后)。

共享区域状态

在主机系统的所有引导环境 (Boot Environment, BE) 中共享区域状态。如果区域状态发生改变,则会影响所有引导环境,不论当前引导的是哪个引导环境。它还会影响所有状态,包括将区域从已安装变为已配置;如果卸载某个区域,则会从所有引导环境卸载它。恢复此类区域的唯一方法是从以前备份的数据进行恢复。

进程访问限制

在区域(不包括全局区域)中运行的进程对其他进程拥有受限的访问权限。只有相同区域中的进程才能通过 /proc(请参见 proc(5))或者通过接受进程 ID 的系统调用接口(例如 kill(2)priocntl(2))来查看。尝试访问存在于其他区域(包括全局区域)中的进程时将失败,并且出现与当指定进程不存在时发布的错误代码相同的错误代码。

权限限制

在非全局区域中运行的进程被限制为拥有一部分权限,从而防止某个区域能够执行可能会影响其他区域的操作。这组权限限制了区域中的特权用户(例如超级用户或 root 用户)的能力。可以使用 ppriv(1) 实用程序显示某个区域中可用的权限列表。有关特权的更多信息,请参见 privileges(7) 手册页。

设备限制

对区域中可用的一组设备进行了限制,以防止某个区域中的进程干扰在其他区域中运行的进程。例如,某个区域中的进程应该无法使用 /dev/kmem 修改内核内存或修改根磁盘的内容。因此,缺省情况下,只有一些被认为可安全在区域中使用的 pseudo 设备可用。在特定区域内,可使用 zonecfg(8) 实用程序使其他设备变得可用。

设备和权限限制对于可在非全局区域中运行的实用程序产生重大影响。例如,eeprom(8)prtdiag(8)prtconf(8) 实用程序无法在区域中使用,因为它们依赖于通常不可用的设备。

标记

在最初创建区域时,会向该区域分配一个标记。标记区域中的软件与在全局区域中发现的软件不匹配。软件可以包括以不同方式配置或布局的 Oracle Solaris 软件。这种特定的软件集合称为“标记”(请参见 brands(7))。在安装后,除非首先卸载区域,否则无法更改区域的标记。solaris-kz 标记具有更高的灵活性,可改变此处提到的许多限制。

文件系统

每个区域都有自己的文件系统分层结构部分,根目录称为区域 root。区域中的进程只能访问分层结构的该部分中的文件,即位于区域根路径下的文件。这样可以防止一个区域中的进程损坏或检查与另一个区域关联的文件系统数据。chroot(8) 实用程序可以在区域中使用,但只能将进程限制为区域中可访问的根路径。

为了保留文件系统空间,可以使用 lofs(4FS) 文件系统的只读选项,将文件系统部分挂载到一个或多个区域中。这样可以在多个区域中共享相同的文件系统数据,同时保留区域提供的安全保证。

在区域中建立的 NFS 和 autofs 挂载是该区域的本地挂载;它们不能从其他区域(包括全局区域)中访问。在停止或重新引导区域时,将删除挂载。

委托给某个区域的 ZFS 数据集可以在该区域中进行管理。在委托数据集中可以创建子数据集。在委托数据集中创建的数据集是自我委托的。可以销毁除顶级委托数据集之外的委托数据集。大多数属性都可以在委托数据集上设置,但并不是所有属性都可以。有关详细信息,请参见 zfs(8)

每个区域都有一个顶级委托数据集,该数据集又包含 ROOT,并且可能包含其他数据集,例如 .../export.../export/home。存在于 ROOT 数据集下方的数据集构成了区域的引导环境。只应使用 zoneadm(8)beadm(8) 命令来创建或销毁引导环境数据集。

区域不可变时(即,file-mac-profile 设置为 "none" 以外的值),顶级及相关数据集为只读,也有某些例外。

联网

区域对于 TCP、UDP 和 SCTP 应用程序使用自己的端口号范围,通常有一个或多个单独的 IP 地址(不过,某些 Trusted Extensions 配置在区域之间共享 IP 地址)。

对于 IP 层(IP 路由、ARP、IPsec、IP 过滤器等),区域可以与全局区域共享配置和状态(共享 IP 区域),也可以具有独特的 IP 层配置和状态(独占 IP 区域)。

如果区域将连接到相同的数据链接,即与全局区域相同的 IP 子网,该区域适合使用共享 IP 实例。

如果区域必须在网络上的 IP 层中隔离(例如连接到与全局区域和其他非全局区域不同的 VLAN 或不同的 LAN),出于隔离原因,区域应该具有其专用 IP。

共享 IP 区域无法在网络中执行某些操作(例如更改 IP 地址或者发送欺骗性 IP 或 Ethernet 包),而与连接到相同网络接口的单独主机在网络中执行的功能相比,独占 IP 区域具有或多或少的相同功能。特别是,这种区域中的超级用户可以更改 IP 地址和发送欺骗性 ARP 包。

zonecfg(8) 中,会向共享 IP 的区域分配一个或多个网络接口名称和 IP 地址。网络接口名称还必须在全局区域中配置。

zonecfg(8) 中,会向独占 IP 的区域分配一个或多个网络接口名称。网络接口名称必须专门分配给该区域,即名称不能分配给其他某个正在运行的区域,也无法由全局区域使用。

以 DHCP 客户机、IPsec 和 IP 过滤器形式提供的完整 IP 级别功能在独占 IP 的区域中可用,而在共享 IP 的区域中不可用。

主机标识符

区域能够模拟 32 位主机标识符,该标识符可以通过 zonecfg(8) 针对系统整合目的进行配置。如果区域模拟主机标识符,在区域上下文中执行的 hostid(1)sysdef(8) 等命令以及 sysinfo(2)gethostid(3C) 等 C 接口将显示或返回区域的模拟主机标识符,而不是主机计算机的标识符。

日志记录

区域的控制台输出记录到 /var/log/zones/console.<zonename>。其他运行时信息记录到 /var/log/zones/messages.<zonename>。每个日志会使用 logadm(8) 定期轮转。

实时区域重新配置

可以重新配置正在运行的区域而无需将其重新引导。您也可以检查正在运行的区域的实时配置。通过 zonecfg(8) 可以检索和检查实时配置,进行适当的更改,并将这些更改临时应用到正在运行的区域。通过 zonecfg(8) 可以根据保存的区域配置以持久方式重新配置正在运行的区域。有关更多信息,请参见 zonecfg(8)

区域配置由 zonecfg(8) 手册页中定义的资源和资源属性组成。为了实现实时区域重新配置,只有 zonecfg(8) 已知的资源和资源属性(它们也是关联的标记允许的资源和资源属性)受支持。

对于选定的标记,要了解实时区域重新配置支持的资源和资源属性的列表,请参见特定于标记的手册页。但是,存在一些适用于所有标记的限制。

对于所有标记,实时区域重新配置都不支持以下资源和属性:

brand
zonename
zonepath
ip-type
rootzpool

对列出的资源和资源属性所做的任何更改如果应用于正在运行的区域,将导致实时区域重新配置失败。

下面列出的资源和资源属性不会直接影响正在运行的区域。因此,可以随时在持久配置中修改这些资源和资源属性。但是,在实时配置中更改它们的任何尝试都会被拒绝。这种限制适用于所有标记。

admin
attr
autoboot
autoshutdown
bootargs
suspend

属性

有关下列属性的说明,请参见 attributes(7)

属性类型
属性值
可用性
system/zones

另请参见

attributes(7), beadm(8), brands(7), crgetzoneid(9F), gethostid(3C), getzoneid(3C), hostid(1), in.rlogind(8), kill(2), logadm(8), priocntl(2), privileges(7), proc(5), solaris-kz(7), sshd(8), svc.zones(8), sysdef(8), sysinfo(2), ucred_get(3C), zfs(8), zlogin(1), zoneadm(8), zonecfg(8), zonename(1)