系统管理指南:Oracle Solaris Containers-资源管理和 Oracle Solaris Zones

第 27 章 Solaris Zones 管理(概述)

本章介绍以下常规区域管理主题:

有关 lx 标记区域的信息,请参见第 3 部分, lx 标记区域

本章新增内容

Solaris 10 1/06: 新增了在区域中卸载文件系统一节。

Solaris 10 1/06: 新增了有关区域备份和恢复过程的几节内容。请参见关于备份安装了区域的 Solaris 系统

Solaris 10 6/06: ZFS 条目已添加到在区域中挂载文件系统中的表内。

Solaris 10 8/07: 以下信息是此发行版中的新增或更新内容:

有关 Solaris 10 新增功能的完整列表以及 Solaris 发行版的说明,请参见《Oracle Solaris 10 9/10 新增功能》

全局区域可见性和访问权限

全局区域既可作为系统的缺省区域,也可作为在系统范围内实施管理控制的区域。这种双重角色会引起管理问题。由于全局区域内的应用程序有权访问其他区域中的进程和其他系统对象,因此,管理操作的影响范围会比预期的范围更广。例如,服务关闭脚本通常使用 pkill 来通知退出具有给定名称的进程。在全局区域中运行此脚本时,将通知退出系统中所有区域内的所有此类进程。

通常需要将整个系统作为考虑范围。例如,要监视系统范围内的资源使用情况,必须查看整个系统中的进程统计信息。如果仅查看全局区域活动,则会遗漏系统中可能正在共享部分或全部系统资源的其他区域的相关信息。在没有使用资源管理功能对系统资源(如 CPU)进行严格分区的情况下,此类查看尤为重要。

因此,全局区域中的进程可以查看非全局区域中的进程和其他对象。这样,此类进程便可查看整个系统范围的内容。控制信号或将信号发送到其他区域中进程的功能由权限 PRIV_PROC_ZONE 加以限制。此权限类似于 PRIV_PROC_OWNER,因为它允许进程覆盖对非特权进程设定的限制。在这种情况下,所谓的限制是指全局区域中的非特权进程无法向其他区域中的进程发送信号或控制这些进程。即使进程的用户 ID 相匹配或者正在运行的进程拥有 PRIV_PROC_OWNER 权限,也会存在上述限制。可以删除其他特权进程的 PRIV_PROC_ZONE 权限,以将操作限制为仅对全局区域有效。

有关使用 zoneidlist 匹配进程的信息,请参见 pgrep(1)pkill(1) 手册页。

区域中的进程 ID 可见性

只有同一区域中的进程才能通过使用进程 ID 的系统调用接口(例如 killpriocntl 命令)进行查看。有关信息,请参见 kill(1)priocntl(1) 手册页。

区域中的系统可查看性

ps 命令进行了以下修改:

有关更多信息,请参见 ps(1) 手册页。

已将 -z zonename 选项添加到以下 Solaris 实用程序。可以使用此选项将信息过滤为仅包括指定的一个或多个区域。

有关对命令所做的更改的完整列表,请参见表 27–5

非全局区域节点名称

区域管理员可以设置 /etc/nodename 中由 uname -n 返回的节点名称。节点名称必须是唯一的。

文件系统和非全局区域

本节介绍有关安装了区域的 Solaris 系统上文件系统问题的相关信息。每个区域都有自己的文件系统分层结构部分,根目录称为区域 root。区域中的进程仅可访问区域根目录下的分层结构部分中的文件。chroot 实用程序可以在区域中使用,但是仅用于将进程限制在区域内的根路径。有关 chroot 的更多信息,请参见 chroot(1M)

-o nosuid 选项

mount 实用程序的 -o nosuid 选项具有以下功能:

所有可使用 mount 实用程序(如 mount(1M) 手册页中所述)挂载的 Solaris 文件系统都可以使用这一特定于文件系统的选项。在本指南中,这些文件系统在在区域中挂载文件系统中列出。同时也对挂载功能进行了说明。有关 -o nosuid 选项的更多信息,请参见《系统管理指南:网络服务》中的“访问网络文件系统(参考)”。

在区域中挂载文件系统

从区域中挂载文件系统时,将应用 nodevices 选项。例如,如果区域被授予访问对应于 UFS 文件系统的块设备 (/dev/dsk/c0t0d0s7) 和原始设备 (/dev/rdsk/c0t0d0s7) 的权限,则从区域中挂载此文件系统时,会自动使用 nodevices 选项挂载。此规则不适用于通过 zonecfg 配置指定的挂载。

下表介绍用于在非全局区域中挂载文件系统的选项。其他挂载方法过程在配置、检验并提交区域在正在运行的非全局区域中挂载文件系统中介绍。

对于未在此表中列出的任意文件系统类型,如果它在 /usr/lib/fstype/mount 中具有挂载二进制命令,则可以在配置中指定此文件系统类型。

文件系统 

非全局区域中的挂载选项 

AutoFS 

不能使用 zonecfg 挂载,不能从全局区域中手动挂载到非全局区域。可以在区域中挂载。

CacheFS 

不能在非全局区域中使用。 

FDFS 

可以使用 zonecfg 挂载,可以从全局区域中手动挂载到非全局区域,可以在区域中挂载。

HSFS 

可以使用 zonecfg 挂载,可以从全局区域中手动挂载到非全局区域,可以在区域中挂载。

LOFS 

可以使用 zonecfg 挂载,可以从全局区域中手动挂载到非全局区域,可以在区域中挂载。

MNTFS 

不能使用 zonecfg 挂载,不能从全局区域中手动挂载到非全局区域。可以在区域中挂载。

NFS 

不能使用 zonecfg 挂载。当前区域所支持的版本 V2、V3 和 V4 可以在区域中挂载。

PCFS  

可以使用 zonecfg 挂载,可以从全局区域中手动挂载到非全局区域,可以在区域中挂载。

PROCFS 

不能使用 zonecfg 挂载,不能从全局区域中手动挂载到非全局区域。可以在区域中挂载。

TMPFS 

可以使用 zonecfg 挂载,可以从全局区域中手动挂载到非全局区域,可以在区域中挂载。

UDFS 

可以使用 zonecfg 挂载,可以从全局区域中手动挂载到非全局区域,可以在区域中挂载。

UFS 

可以使用 zonecfg 挂载,可以从全局区域中手动挂载到非全局区域,可以在区域中挂载。

XMEMFS 

可以使用 zonecfg 挂载,可以从全局区域中手动挂载到非全局区域,可以在区域中挂载。

在未来的发行版中,将从 Solaris 系统中删除对此文件系统的支持。 

ZFS 

可以使用 zonecfg datasetfs 资源类型进行挂载。

有关更多信息,请参见如何配置区域在正在运行的非全局区域中挂载文件系统mount(1M) 手册页。

在区域中卸载文件系统

卸载文件系统的能力将取决于执行初始挂载的人员。如果使用 zonecfg 命令将文件系统指定为区域配置的一部分,则全局区域将拥有此挂载,而非全局区域的区域管理员无法卸载该文件系统。如果在非全局区域中挂载文件系统(例如指定区域 /etc/vfstab 文件中的挂载),则非全局区域的区域管理员可以卸载该文件系统。

安全限制和文件系统行为

在区域中挂载某些文件系统时存在安全限制。其他文件系统在区域中挂载时会显示出特殊行为。已修改的文件系统列表如下。

AutoFS

Autofs 是一项可自动挂载相应文件系统的客户端服务。当客户机尝试访问目前未挂载的文件系统时,AutoFS 文件系统会拦截请求并调用 automountd 以挂载请求的目录。在区域中建立的 AutoFS 挂载对于此区域而言是本地挂载。不能从其他区域(包括全局区域)访问这些挂载。在停止或重新引导区域时,将删除挂载。有关 AutoFS 的更多信息,请参见《系统管理指南:网络服务》中的“Autofs 如何工作”

每个区域都运行自己的 automountd 副本。自动映射和超时由区域管理员控制。不能跨越非全局区域的 AutoFS 挂载点从全局区域触发其他区域中的挂载。

触发其他挂载时,便会在内核中创建某些 AutoFS 挂载。此类挂载不能使用常规 umount 接口删除,因为它们必须作为一个组进行挂载或卸载。请注意,提供此功能是为了关闭区域。

MNTFS

MNTFS 是一款虚拟文件系统,可提供本地系统中已挂载文件系统表的只读访问权限。在非全局区域中使用 mnttab 可查看的一组文件系统是该区域中已挂载的一组文件系统和一个根 (/) 项。具有无法在区域中访问的特殊设备的挂载点(例如 /dev/rdsk/c0t0d0s0)都将其特殊设备的挂载点设置为与此挂载点相同。系统中的所有挂载都可从全局区域的 /etc/mnttab 表中查看。有关 MNTFS 的更多信息,请参见《系统管理指南:设备和文件系统》中的第 19  章 “挂载和取消挂载文件系统(任务)”

NFS

在区域中建立的 NFS 挂载对于此区域而言是本地挂载。不能从其他区域(包括全局区域)访问这些挂载。在停止或重新引导区域时,将删除挂载。

mount_nfs(1M) 手册页中所述,NFS 服务器不应尝试挂载自己的文件系统。因此,区域不应对由全局区域导出的文件系统执行 NFS 挂载。区域不能是 NFS 服务器。在区域中,NFS 挂载如同使用 nodevices 选项进行挂载。

nfsstat 命令输出仅与运行此命令的区域有关。例如,如果在全局区域中运行此命令,则仅报告有关此全局区域的信息。有关 nfsstat 命令的更多信息,请参见 nfsstat(1M)

如果 zlogin 命令的打开文件或其地址空间的任意部分驻留在 NFS 上,此命令将失败。有关更多信息,请参见zlogin 命令

PROCFS

/proc 文件系统(或 PROCFS)提供进程可见性和访问限制,同时还提供有关进程的区域关联的信息。通过 /proc 只能查看同一区域中的进程。

全局区域中的进程可以查看非全局区域中的进程和其他对象。这样,此类进程便可查看整个系统范围的内容。

在区域中,procfs 挂载如同使用 nodevices 选项进行挂载。有关 procfs 的更多信息,请参见 proc(4) 手册页。

LOFS

通过 LOFS 进行挂载的范围被限制为区域中可见的文件系统部分。因此,对区域中的 LOFS 挂载没有任何限制。

UFS、UDFS、PCFS 以及其他基于存储的文件系统

使用 zonecfg 命令配置具有 fsck 二进制命令的基于存储的文件系统(例如 UFS)时,区域管理员必须指定 raw 参数。该参数指明原始(字符)设备,如 /dev/rdsk/c0t0d0s7zoneadmd 在挂载文件系统之前,会自动以非交互、仅检查的模式 (fsck -m) 在此设备上运行 fsck 命令。如果 fsck 失败,则 zoneadmd 无法使区域达到就绪状态。由 raw 指定的路径不能是相对路径。

对于没有在 /usr/lib/ fstype/fsck 中提供 fsck 二进制代码的文件系统,不能为 fsck 指定设备。如果此文件系统具有 fsck 二进制命令,则必须为 fsck 指定设备。

有关更多信息,请参见zoneadmd 守护进程fsck(1M)

ZFS

可以使用带有 add dataset 资源的 zonecfg 命令将 ZFS 数据集添加到非全局区域。此数据集将在非全局区域中进行挂载并显示,并且在全局区域中不再可见。区域管理员可以在此数据集中创建和销毁文件系统、创建和销毁克隆对象以及修改此数据集的属性。

zfszoned 属性指明是否已将数据集添加到非全局区域。


# zfs get zoned tank/sales
NAME          PROPERTY    VALUE      SOURCE
tank/sales    zoned       on         local

如果要共享全局区域中的数据集,可以使用具有 add fs 子命令的 zonecfg 命令来添加通过 LOFS 方式挂载的 ZFS 文件系统。全局管理员负责设置和控制数据集的属性。

有关 ZFS 的更多信息,请参见《Oracle Solaris ZFS 管理指南》中的第 10  章 “Oracle Solaris ZFS 高级主题”

作为 NFS 客户机的非全局区域

区域可以是 NFS 客户机。支持版本 2、版本 3 和版本 4 协议。有关这些 NFS 版本的信息,请参见《系统管理指南:网络服务》中的“NFS 服务的功能”

缺省版本为 NFS 版本 4。可以使用以下方法之一在客户机上启用其他 NFS 版本:

在区域中禁止使用 mknod

请注意,不能使用 mknod(1M) 手册页中所述的 mknod 命令在非全局区域中创建特殊文件。

遍历文件系统

区域的文件系统名称空间是可从全局区域访问的名称空间的子集。可以通过以下方式,防止全局区域中的非特权进程遍历非全局区域的文件系统分层结构:

请注意,尝试访问为其他区域挂载的 AutoFS 节点将失败。全局管理员不必具有向下派生到其他区域的自动映射。

从全局区域中访问非全局区域的限制

安装了非全局区域之后,除了系统备份实用程序之外,此区域永远不能通过其他任何命令从全局区域中直接访问。此外,当非全局区域向未知环境公开之后,便不再将其视为安全区域。例如放置在可公共访问的网络上的区域,这种情况下可能会危及区域的安全并且可能会改变其文件系统的内容。如果存在任何危及区域安全的可能性,全局管理员便应将此区域视为不可信区域。

任何可通过 -R-b 选项(或等效选项)接受备用根的命令,在以下情况成立时得使用:

例如通过非全局区域根路径在全局区域中运行的 pkgadd 实用程序的 -R root_path 选项。

以下是通过备用根路径使用 -R 的命令、程序和实用程序的列表:

以下是通过备用根路径使用 -b 的命令和程序的列表:

共享 IP 非全局区域中的联网

在安装了区域的 Solaris 系统上,区域可通过网络相互通信。所有区域都有单独的绑定或连接,并且所有区域都可运行自己的服务器守护进程。这些守护进程可以侦听相同的端口号而不会引起冲突。IP 栈通过分析传入连接的 IP 地址来解决冲突。IP 地址标识区域。

共享 IP 区域分区

在支持区域的系统中,IP 栈对区域之间的网络通信流量执行隔离。接收 IP 通信流量的应用程序只能接收发送到同一区域的通信流量。

系统上的每个逻辑接口都属于特定的区域,缺省情况下属于全局区域。借助 zonecfg 实用程序指定给区域的逻辑网络接口用于在网络上进行通信。每个流和连接都属于打开它的进程所在的区域。

上层流和逻辑接口之间的绑定会受到限制。流只能与同一区域中的逻辑接口建立绑定。同样,来自逻辑接口的包只能传递到此逻辑接口所在区域中的上层流。

每个区域都有自己的一组绑定。每个区域都可以运行侦听同一端口号的相同应用程序,而且绑定不会失败,因为地址已处于使用状态。每个区域都可以运行自己版本的以下服务:

除全局区域之外的区域拥有受限的网络访问权限。标准 TCP 和 UDP 套接字接口均可用,但是 SOCK_RAW 套接字接口被限制为网际控制报文协议 (Internet Control Message Protocol, ICMP)。ICMP 是检测和报告网络错误状态或使用 ping 命令时所必需的。

共享 IP 网络接口

每个需要网络连接的非全局区域都有一个或多个专用 IP 地址。这些地址与可以使用 ifconfig 命令放入区域中的逻辑网络接口关联。引导区域时,将在其中自动设置并放置通过 zonecfg 配置的区域网络接口。运行区域时,可使用 ifconfig 命令添加或删除逻辑接口。只有全局管理员才能修改接口配置和网络路由。

在非全局区域内,只有此区域的接口才能通过 ifconfig 进行查看。

有关更多信息,请参见 ifconfig(1M)if_tcp(7P) 手册页。

同一计算机上共享 IP 区域之间的 IP 通信

在同一计算机上的两个区域之间,仅当转发表中的目标和区域具有“匹配的路由”时,才允许传送包。

匹配信息按如下方式执行:

共享 IP 区域中的 Solaris IP 过滤器

Solaris IP 过滤器可提供有状态包过滤和网络地址转换 (network address translation, NAT) 功能。有状态包过滤器可以监视活动连接的状态,并使用获得的信息确定允许哪些网络包通过防火墙。Solaris IP 过滤器还包括无状态包过滤以及创建和管理地址池的功能。有关其他信息,请参见《系统管理指南:IP 服务》中的第 25  章 “Oracle Solaris : IP 过滤器(概述)”

在非全局区域中,可以通过打开回送过滤来启用 Solaris IP 过滤器,如《系统管理指南:IP 服务》中的第 26  章 “yaraOracle Solaris : IP 过滤器(任务)”所述。

Solaris IP 过滤器是从开放源代码的 IP 过滤器软件衍生而来的。

共享 IP 区域中的 IP 网络多路径

IP 网络多路径 (IP network multipathing, IPMP) 为在同一 IP 链路上具有多个接口的系统提供物理接口故障检测和透明网络访问故障转移功能。IPMP 还为具有多个接口的系统提供了包负荷分配。

所有网络配置均在全局区域中完成。可以在全局区域中配置 IPMP,然后将功能扩展到非全局区域。当配置非全局区域时,将此区域的地址放入 IPMP 组中即可实现功能扩展。此后,如果全局区域中有一个接口出现故障,则非全局区域地址将迁移到其他网络接口卡。共享 IP 区域可拥有多个 IP 地址,它可以是多个 IPMP 组的组成部分,而且多个共享的 IP 区域可使用指定的同一 IPMP 组。

在给定的非全局区域中,只有与此区域关联的接口才能通过 ifconfig 命令进行查看。

请参见如何将 IP 网络多路径功能扩展到共享 IP 非全局区域。区域配置过程在如何配置区域中介绍。有关 IPMP 功能、组件和用法的信息,请参见《系统管理指南:IP 服务》中的第 30  章 “IPMP 介绍(概述)”

Solaris 10 8/07:专用 IP 非全局区域中的联网

专用 IP 区域具有自己的与 IP 相关的状态和调节变量。配置该区域时,系统会为该区域分配其自己的数据链路集合。

有关可在专用 IP 非全局区域中使用的功能的信息,请参见Solaris 10 8/07:专用 IP 非全局区域。有关调节 IP ndd 变量的信息,请参见《Oracle Solaris Tunable Parameters Reference Manual》

专用 IP 区域分区

专用 IP 区域具有单独的 TCP/IP 栈,因此可以隔离数据链路层及其上的所有层。全局管理员可以将一个或多个数据链路名称(可以是 NIC 或 NIC 上的 VLAN)分配给一个专用 IP 区域。区域管理员可以配置这些数据链路上的 IP,其灵活性和选项与全局区域中的相同。

专用 IP 数据链路接口

必须以独占方式将一个数据链路名称分配给单个区域。

可以使用 dladm show-link 命令显示分配给正在运行的区域的数据链路。

有关更多信息,请参见 dladm(1M)

同一计算机上专用 IP 区域之间的 IP 通信

专用 IP 区域之间不存在 IP 数据包内部回送。所有包都向下发送到数据链路。通常,这意味着包通过网络接口发出。然后,类似以太网交换机或 IP 路由器的设备可将包转发到其目的地,该目的地可能位于发送者所用的同一台计算机上的不同区域。

专用 IP 区域中的 Solaris IP 过滤器

在专用 IP 区域中可以使用在全局区域中使用的相同 IP 过滤器功能。而且在专用 IP 区域中配置 IP 过滤器的方法与在全局区域中使用的方法相同。

专用 IP 区域中的 IP 网络多路径

IP 网络多路径 (IP network multipathing, IPMP) 为在同一 IP 链路上具有多个接口的系统提供物理接口故障检测和透明网络访问故障转移功能。除了容错功能以外,IPMP 还为具有多个接口的系统提供了包负荷分配。

数据链路配置在全局区域中完成。首先,使用 zonecfg 将多个数据链路接口分配给某个区域。这些数据链路接口必须连接到相同的 IP 子网。然后,区域管理员便可在专用 IP 区域内配置 IPMP。多个 IPMP 组可分配给指定的专用 IP 区域,但这些 IPMP 组无法与其他区域共享。

非全局区域中的设备使用

对区域中可用的一组设备进行了限制,以防止某个区域中的进程干扰在其他区域中运行的进程。例如,区域中的进程不能修改内核内存,也不能修改根磁盘的内容。因此,缺省情况下,只提供被视为可以在区域中安全使用的特定伪设备。在特定区域内,可使用 zonecfg 实用程序使其他设备变得可用。

/dev/devices 名称空间

Solaris 系统使用 devfs(7FS) 手册页中所述的 devfs 文件系统来管理 /devices。此名称空间中的每个元素都表示指向硬件设备、伪设备或 nexus 设备的物理路径。名称空间是设备树的一种表现形式。同样,文件系统由目录和特定于设备的文件分层结构填充。

现在作为 /(根)文件系统一部分的 /dev 文件分层结构由指向 /devices 中的物理路径的符号链接或逻辑路径组成。应用程序引用指向 /dev 中设备的逻辑路径。/dev 文件系统使用只读挂载回送挂载到区域。

/dev 文件分层结构由以下列出的组件所组成的系统进行管理:


注意 – 注意 –

在建立 /dev 路径名之前,依赖于 /devices 路径名的子系统不能在非全局区域中运行。


专用设备

可能拥有需要指定给特定区域的设备。允许非特权用户访问块设备可能会导致通过使用这些设备造成系统出现紧急情况、总线复位或其他不良影响。在进行此类指定之前,请考虑以下问题:

设备驱动程序管理

在非全局区域中,可以使用 modinfo(1M) 手册页中所述的 modinfo 命令来检查已装入的内核模块的列表。

大多数与内核、设备和平台管理相关的操作都不能在非全局区域内部执行,因为修改平台硬件配置会破坏区域安全模型。这些操作包括:

在非全局区域中无法使用或者修改的实用程序

无法在非全局区域中使用的实用程序

以下实用程序无法在区域中使用,因为它们所依赖的设备通常不存在:

SPARC: 修改为可在非全局区域中使用的实用程序

eeprom 实用程序可用于查看区域中的设置,但不能用于更改设置。有关更多信息,请参见 eeprom(1M)openprom(7D) 手册页。

在非全局区域中运行应用程序

通常,所有应用程序均可在非全局区域中运行。但是,以下应用程序类型可能不适用于此环境:

在非全局区域中使用的资源控制

有关在区域中使用资源管理功能的其他信息,另请参阅本指南第 1 部分中介绍此功能的章节。

资源管理章节中所述的任何资源控制和属性都可以在全局和非全局区域 /etc/project 文件、NIS 映射或 LDAP 目录服务中设置。给定区域的设置仅影响此区域。在不同区域中独立运行的项目可以在每个区域中分别设置控制。例如,项目 A 在全局区域中可以设置 project.cpu-shares=10,而在非全局区域中可以设置 project.cpu-shares=5。系统中可能同时运行若干个 rcapd 实例,而每个实例都仅在自己的区域中运行。

某个区域中用于在该区域中控制项目、任务和进程的资源控制和属性还要满足其他与池和区域范围资源控制相关的要求。

“一个区域,一个池”规则适用于非全局区域。多个非全局区域可以共享一个池的资源。但是,全局区域中的进程可以由拥有足够权限的进程绑定到任意池。资源控制器 poold 仅在全局区域中运行,它可以在其中的多个池中运行。在非全局区域中运行的 poolstat 实用程序仅显示与该区域关联的池的相关信息。在非全局区域中运行的不带参数的 pooladm 命令仅显示与此区域关联的池的相关信息。

区域范围的资源控制在 project 文件中设置时不会生效。区域范围的资源控制通过 zonecfg 实用程序设置。

安装了区域的 Solaris 系统上的公平份额调度器

本节介绍如何在区域中使用公平份额调度器 (fair share scheduler, FSS)。

非全局区域中的 FSS 份额分配

区域的 FSS CPU 份额是分层的。全局和非全局区域的份额由全局管理员通过区域范围的资源控制 zone.cpu-shares 设置。然后,可以为该区域中的每个项目定义 project.cpu-shares 资源控制,以便进一步细分通过区域范围的控制设置的份额。

要使用 zonecfg 命令分配区域份额,请参见如何在全局区域中设置 zone.cpu-shares。有关 project.cpu-shares 的更多信息,请参见可用的资源控制。有关说明如何设置临时份额的示例过程,另请参见在安装了区域的 Solaris 系统上使用公平份额调度器

区域之间的份额平衡

可以使用 zone.cpu-shares 为全局区域和非全局区域分配 FSS 份额。如果 FSS 是您系统中的缺省调度程序,并且尚未分配份额,则缺省情况下,会分配给每个区域(包括全局区域)一个份额。如果系统上有一个非全局区域,则将通过 zone.cpu-shares(定义非全局区域将相对于全局区域接到的 CPU 比例)为此区域提供两个份额。这两个区域之间的 CPU 比例为 2:1。

安装了区域的 Solaris 系统上的扩展记帐

当扩展记帐子系统在全局区域中运行时,它会收集和报告整个系统(包括非全局区域)的信息。全局管理员还可以确定每个区域的资源占用情况。

扩展记帐子系统允许每个区域针对基于进程和基于任务的记帐具有不同的记帐设置和文件。对于进程,exacct 记录可以使用区域名称 EXD PROC ZONENAME 进行标记;对于任务,则可以使用区域名称 EXD TASK ZONENAME 进行标记。记帐记录将写入全局区域的记帐文件以及每个区域的记帐文件。EXD TASK HOSTNAMEEXD PROC HOSTNAMEEXD HOSTNAME 记录包含用于执行进程或任务的区域的 uname -n 值,而不是全局区域的节点名称。

有关 IPQoS 流记帐的信息,请参见 《系统管理指南:IP 服务》中的第 36  章 “使用流记帐和统计信息收集功能(任务)”

非全局区域中的权限

仅允许进程拥有部分权限。权限限制可防止某个区域执行可能会影响其他区域的操作。通过权限设置,可以限制区域内特权用户的功能。要显示区域内可用权限的列表,请使用 ppriv 实用程序。

下表列出了所有 Solaris 权限以及相对于区域每个权限的状态。缺省权限集不包含可选权限,但可以通过 limitpriv 属性指定它们。最终的权限集中必须包含必需权限。最终的权限集中不能包含禁止权限。

从 Solaris 10 11/06 发行版开始,limitpriv 属性就已经可用了。

表 27–1 区域中权限的状态

权限 

状态 

说明 

cpc_cpu

可选 

访问某些 cpc(3CPC) 计数器的权限

dtrace_proc

可选 

fasttrappid 提供器;plockstat(1M)

dtrace_user

可选 

profilesyscall 提供器

graphics_access

可选 

访问 agpgart_io(7I) 的 ioctl(2)

graphics_map

可选 

访问 agpgart_io(7I) 的 mmap(2)

net_rawaccess

在共享 IP 区域中为可选。 

在专用 IP 区域中为缺省值。 

原始 PF_INET/PF_INET6 包访问权限

proc_clock_highres

可选 

使用高精度计时器 

proc_priocntl

可选 

调度控制;priocntl(1)

sys_ipc_config

可选 

增加 IPC 消息队列缓冲区大小 

sys_time

可选 

系统时间处理;xntp(1M)

dtrace_kernel

禁止 

当前不支持 

proc_zone

禁止 

当前不支持 

sys_config

禁止 

当前不支持 

sys_devices

禁止 

当前不支持 

sys_linkdir

禁止 

当前不支持 

sys_net_config

禁止 

当前不支持 

sys_res_config

禁止 

当前不支持 

sys_suser_compat

禁止 

当前不支持 

proc_exec

必需,缺省 

用于启动 init(1M)

proc_fork

必需,缺省 

用于启动 init(1M)

sys_mount

必需,缺省 

需要用于挂载必需的文件系统 

sys_ip_config

在专用 IP 区域中为必需、缺省权限。 

在共享 IP 区域中为禁止权限。 

在专用 IP 区域中需要用于引导和初始化 IP 联网 

contract_event

缺省值 

供合约文件系统使用 

contract_observer

缺省值 

合约调查,不考虑 UID 

file_chown

缺省值 

文件所有权更改 

file_chown_self

缺省值 

拥有文件的属主/组更改 

file_dac_execute

缺省值 

执行访问权限,不考虑模式/ACL 

file_dac_read

缺省值 

读取访问权限,不考虑模式/ACL 

file_dac_search

缺省值 

搜索访问权限,不考虑模式/ACL 

file_dac_write

缺省值 

写入访问权限,不考虑模式/ACL 

file_link_any

缺省值 

链接访问权限,不考虑属主 

file_owner

缺省值 

其他访问权限,不考虑属主 

file_setid

缺省值 

更改 setidsetgidsetuid 文件的权限

ipc_dac_read

缺省值 

IPC 读取访问权限,不考虑模式 

ipc_dac_owner

缺省值 

IPC 写入访问权限,不考虑模式 

ipc_owner

缺省值 

IPC 其他访问权限,不考虑模式 

net_icmpaccess

缺省值 

ICMP 包访问权限: ping(1M)

net_privaddr

缺省值 

绑定到特权端口 

proc_audit

缺省值 

生成审计记录 

proc_chroot

缺省值 

更改 root 目录

proc_info

缺省值 

检查进程 

proc_lock_memory

缺省值 

锁定内存;shmctl(2) 和 mlock(3C)

如果系统管理员要将此权限分配给非全局区域,请同时考虑设置 zone.max-locked-memory 资源控制以防止区域锁定所有内存。

proc_owner

缺省值 

控制进程,不考虑属主 

proc_session

缺省值 

控制进程,不考虑会话 

proc_setid

缺省值 

任意设置用户/组 ID 

proc_taskid

缺省值 

将任务 ID 分配给调用方 

sys_acct

缺省值 

记帐管理 

sys_admin

缺省值 

简单的系统管理任务 

sys_audit

缺省值 

审计管理 

sys_nfs

缺省值 

NFS 客户端支持 

sys_resource

缺省值 

资源限制处理 

下表列出了区域中所有 Solaris Trusted Extensions(高可靠扩展版)权限,以及每个权限的状态。缺省权限集不包含可选权限,但可以通过 limitpriv 属性指定它们。


注 –

仅当使用 Solaris Trusted Extensions(高可靠扩展版)配置了系统时,才会解释这些权限。


表 27–2 区域中 Solaris Trusted Extensions(高可靠扩展版)权限的状态

Solaris Trusted Extensions(高可靠扩展版)权限 

状态 

说明 

file_downgrade_sl

可选 

将文件或目录的敏感度标签设置为不影响现有敏感度标签的敏感度标签 

file_upgrade_sl

可选 

将文件或目录的敏感度标签设置为影响现有敏感度标签的敏感度标签 

sys_trans_label

可选 

转换优先级低于敏感度标签的标签 

win_colormap

可选 

颜色映射限制覆盖 

win_config

可选 

配置或销毁 X 服务器永久保留的资源 

win_dac_read

可选 

从非客户机用户 ID 拥有的窗口资源中进行读取 

win_dac_write

可选 

写入或创建非客户机用户 ID 拥有的窗口资源 

win_devices

可选 

在输入设备上执行操作。 

win_dga

可选 

使用直接图形访问 X 协议扩展;需要帧缓冲权限 

win_downgrade_sl

可选 

将窗口资源的敏感度标签更改为优先级低于现有标签的新标签 

win_fontpath

可选 

添加其他字体路径 

win_mac_read

可选 

从其标签优先级高于客户机标签的窗口资源中进行读取 

win_mac_write

可选 

写入其标签优先级与客户机标签优先级不同的窗口资源 

win_selection

可选 

请求移动数据,而无需确认者介入 

win_upgrade_sl

可选 

将窗口资源的敏感度标签更改为优先级不低于现有标签的新标签 

net_bindmlp

缺省值 

允许绑定到多级端口 (MLP) 

net_mac_aware

缺省值 

允许通过 NFS 向下读取 

要在配置非全局区域过程中更改权限,请参见配置、检验并提交区域

要检查权限集,请参见使用 ppriv 实用程序。有关权限的更多信息,请参见 ppriv(1) 手册页和《系统管理指南:安全性服务》。

在区域中使用 IP 安全体系结构

可提供 IP 数据报保护的 Internet 协议安全体系结构 (Internet Protocol Security Architecture, IPsec) 将在《系统管理指南:IP 服务》中的第 19  章 “IP 安全体系结构(概述)”进行介绍。Internet 密钥交换 (Internet Key Exchange, IKE) 协议用于自动管理进行验证和加密所需的加密材料。

有关更多信息,请参见 ipsecconf(1M)ipseckey(1M) 手册页。

共享 IP 区域中的 IP 安全体系结构

IPsec 可以在全局区域中使用。但是,非全局区域中的 IPsec 不能使用 IKE。因此,您必须在全局区域中使用 Internet 密钥交换 (Internet Key Exchange, IKE) 协议来为非全局区域管理 IPsec 密钥和策略。请使用对应于要配置的非全局区域的源地址。

Solaris 10 8/07:专用 IP 区域中的 IP 安全体系结构

IPsec 可以在专用 IP 区域中使用。

在区域中使用 Solaris 审计

Solaris 审计将在《系统管理指南:安全性服务》中的第 27  章 “Solaris 审计(概述)”进行介绍。有关与审计关联的区域注意事项,请参见以下各节:

审计记录用于介绍事件,例如登录到系统或写入文件。记录由作为审计数据集合的标记组成。使用 zonename 标记,可以配置 Solaris 审计来标识每个区域的审计事件。使用 zonename 标记,可以生成以下信息:

在全局区域中配置审计

Solaris 审计跟踪在全局区域中配置。审计策略在全局区域中设置并应用于所有区域中的进程。审计记录可以使用发生事件的区域名称进行标记。要在审计记录中包括区域名称,必须在安装任何非全局区域之前编辑 /etc/security/audit_startup 文件。区域名称选择区分大小写。

要在全局区域中将审计配置为包括所有区域审计记录,请将以下行添加到 /etc/security/audit_startup 文件:


/usr/sbin/auditconfig -setpolicy +zonename

以全局区域中全局管理员的身份执行 auditconfig 实用程序:


global# auditconfig -setpolicy +zonename

有关其他信息,请参见 audit_startup(1M)auditconfig(1M) 手册页以及《系统管理指南:安全性服务》中的“配置审计文件(任务列表)”。

在非全局区域中配置用户审计特征

安装了非全局区域之后,便可将全局区域中的 audit_control 文件和 audit_user 文件复制到此区域的 /etc/security 目录。这些文件可能需要进行修改以反映此区域的审计需求。

例如,可以将每个区域配置为以不同的方式审计某些用户。要按用户应用不同的预选条件,必须编辑 audit_controlaudit_user 文件。如有必要,还可能需要修改非全局区域中的 audit_user 文件以反映区域的用户基础。由于可以针对审计用户以不同的方式配置每个区域,因此,audit_user 文件可能为空。

有关其他信息,请参见 audit_control(4)audit_user(4) 手册页。

为特定的非全局区域提供审计记录

通过如在全局区域中配置审计中所述包括 zonename 标记,可以按区域对 Solaris 审计记录进行分类。然后,可以使用 auditreduce 命令收集来自不同区域的记录,从而为特定区域创建日志。

有关更多信息,请参见 audit_startup(1M)auditreduce(1M) 手册页。

区域中的核心转储文件

coreadm 命令用于指定因异常终止进程而生成的核心转储文件的名称和位置。通过指定 %z 变量,可以生成核心转储文件路径,此路径包括执行进程的区域的 zonename。路径名相对于区域的根目录。

有关更多信息,请参见 coreadm(1M)core(4) 手册页。

在非全局区域中运行 DTrace

只需要 dtrace_procdtrace_user 权限的 DTrace 程序可以在非全局区域中运行。要将这些权限添加到非全局区域中的可用权限的集合中,请使用 zonecfg limitpriv 属性。有关说明,请参见如何使用 DTrace

通过 dtrace_proc 支持的提供器是 fasttrappid。通过 dtrace_user 支持的提供器是 profilesyscall。DTrace 提供器和操作的范围限制在区域内。

有关更多信息,请参见非全局区域中的权限

关于备份安装了区域的 Solaris 系统

可以在单个非全局区域中执行备份,也可以在全局区域中备份整个系统。

备份回送文件系统目录

由于许多非全局区域通过使用回送文件系统只读挂载(通常为 /usr/lib/sbin/platform)与全局区域共享文件,因此,必须使用全局区域备份方法来备份 lofs 目录。


注意 – 注意 –

请不要在非全局区域中备份与全局区域共享的 lofs 文件系统。如果非全局管理员尝试从非全局区域中恢复 lofs 文件系统,则可能会导致严重问题。


在全局区域中备份系统

在以下情况下,可能会选择在全局区域中执行备份:

在系统上备份单个非全局区域

在以下情况下,可能会决定在非全局区域内执行备份。

确定在非全局区域中备份的内容

可以在非全局区域中备份所有内容,或者,如果区域的配置更改并不频繁,也可以仅对应用程序数据执行备份。

仅备份应用程序数据

如果应用程序数据保存在文件系统的特定部分,则可以决定仅对此数据执行常规备份。可以不必经常备份区域的根文件系统,因为其更改并不频繁。

必须确定应用程序放置其文件的位置。可以存储文件的位置如下:

假设应用程序管理员知道数据的存储位置,则可以创建一个系统,其中每个区域均可使用其各自的可写目录。然后,每个区域可以存储自己的备份数据,并且全局管理员可以将此位置作为系统上的备份位置之一。

常规数据库备份操作

如果数据库应用程序数据不在自己的目录下,则应用以下规则:

磁带备份

每个非全局区域都可以对自己的专用文件系统捕获快照,前提是此区域便于执行快照并且应用程序处于暂时静止状态。随后,全局区域可以备份每个快照,并在应用程序再次使用之后将备份放置在磁带上。

此方法具有如下优点:

关于恢复非全局区域

如果恢复在全局区域中执行的备份,则全局管理员可以重新安装受影响的区域,然后恢复该区域的文件。请注意,上述情况以下面的假设为前提:

否则,恢复操作可能会覆写某些应手动合并的文件。

例如,如果全局区域在备份之后和恢复非全局区域之前已进行修补,则可能需要手动合并文件。在这种情况下,恢复已备份的区域文件时必须谨慎,因为备份文件可能与新安装的区域(此区域在将修补程序应用到全局区域之后生成)不兼容。在这种情况下,必须逐个检查文件并将它们与新安装的区域中的副本进行比较。在多数情况下,会发现可以直接在区域中复制文件,但在某些情况下,必须将最初对文件所做的更改合并到区域中新安装或修补的副本中。


注 –

如果全局区域中的所有文件系统均已丢失,则只要备份非全局区域各自的根文件系统,恢复全局区域中的所有内容时也会恢复非全局区域。


在安装了区域的 Solaris 系统上使用的命令

表 27–3 中列出的命令提供了区域功能的主要管理接口。

表 27–3 用于管理区域的命令

命令参考 

说明 

zlogin(1)

登录到非全局区域 

zonename(1)

显示当前区域的名称 

zoneadm(1M)

管理系统上的区域 

zonecfg(1M)

用于设置区域配置 

getzoneid(3C)

用于在区域 ID 和区域名称之间进行映射 

zones(5)

提供区域功能的说明 

zcons(7D)

区域控制台设备驱动程序 

zoneadmd 守护进程是管理区域虚拟平台的主要进程。zoneadmd 守护进程的手册页为 zoneadmd(1M)。此守护进程并没有构成编程接口。

下表中的命令可与资源上限设置守护进程结合使用。

表 27–4 用于 rcapd 的命令

命令参考 

说明 

rcapstat(1)

监视具有上限的项目的资源利用率。 

rcapadm(1M)

配置资源上限设置守护进程,显示已配置的资源上限设置守护进程的当前状态,以及启用或禁用资源上限设置。还可用于设置临时内存上限。 

rcapd(1M)

资源上限设置守护进程。 

下表中介绍的命令已被修改为可在安装了区域的 Solaris 系统上使用。这些命令具有的选项特定于区域或者以不同的方式显示信息。这些命令将在手册页中列出。

表 27–5 修改为可在安装了区域的 Solaris 系统上使用的命令

命令参考 

说明 

ipcrm(1)

添加了 -z zone 选项。只有在全局区域中执行命令时,此选项才有用。

ipcs(1)

添加了 -z zone 选项。只有在全局区域中执行命令时,此选项才有用。

pgrep(1)

添加了 -z zoneidlist 选项。只有在全局区域中执行命令时,此选项才有用。

ppriv(1)

添加了表达式 zone,以便与 -l 选项一起使用来列出当前区域中的所有可用权限。还可以在 zone 后使用选项 -v 来获取详细输出。

priocntl(1)

可以在 idlist-i idtype 中使用区域 ID 来指定进程。在非全局区域中,可以使用 priocntl -i zoneid 命令将正在运行的进程移至其他调度类。

proc(1)

仅向 ptree 中添加了 -z zone 选项。只有在全局区域中执行命令时,此选项才有用。

ps(1)

向与 -o 选项一起使用的已识别 format 名称的列表中添加了 zonenamezoneid

添加了 -z zonelist 以便仅列出指定区域中的进程。可以通过区域名称或区域 ID 指定区域。只有在全局区域中执行命令时,此选项才有用。

添加了 -Z 以便显示与进程关联的区域的名称。区域名称在另一个列标题 ZONE 下显示。

renice(1)

向与 -i 选项一起使用的有效参数的列表中添加了 zoneid

sar(1)

如果在启用了池功能的非全局区域中执行,则 -b-c-g-m-p-u-w-y 选项仅针对绑定有区域的池的处理器集中的处理器显示值。

auditconfig(1M)

添加了 zonename 标记。

auditreduce(1M)

添加了 -z zone-name 选项。新增了获取区域审计日志的功能。

coreadm(1M)

添加了变量 %z 以便标识执行进程的区域。

df(1M)

添加了 -Z 选项以便显示所有可见区域中的挂载。

ifconfig(1M)

添加了 zone 选项以用于全局区域(缺省设置),添加了 -zone zonename 以用于非全局区域。

iostat(1M)

如果在启用了池功能的非全局区域中执行,则仅针对绑定有区域的池的处理器集中的那些处理器提供信息。 

kstat(1M)

如果在全局区域中执行,将针对所有区域显示 kstat。如果在非全局区域中执行,则只显示具有匹配 zoneidkstat

mpstat(1M)

如果在启用了池功能的非全局区域中执行,则命令仅针对绑定有区域的池的处理器集中的处理器显示行。 

ndd(1M)

在全局区域中使用时,会显示所有区域的信息。在专用 IP 区域中,对 TCP/IP 模块执行的 ndd 只显示该区域的信息。

netstat(1M)

仅显示当前区域的信息。 

nfsstat(1M)

仅显示当前区域的统计信息。 

poolbind(1M)

添加了 zoneid 列表。有关使用具有资源池的区域的信息,另请参见区域中使用的资源池

prstat(1M)

添加了 -z zoneidlist 选项。还添加了 -Z 选项。

如果在启用了池功能的非全局区域中执行,则仅针对绑定有区域的池的处理器集中的处理器显示进程所用最近 CPU 时间的百分比。 

-a-t-T-J-Z 选项的输出显示 SWAP,而不是 SIZE 列。报告的交换是区域进程和 tmpfs 挂载所使用的总交换量。此值有助于监视每个区域预留的交换空间,可用于选择合理的 zone.max-swap 设置。

psrinfo(1M)

如果在非全局区域中执行,则仅显示有关区域可见的处理器的信息。 

traceroute(1M)

用法更改。在非全局区域中指定时,-F 选项不起作用,因为始终设置了“不要分段”位。

vmstat(1M)

在启用了池功能的非全局区域中执行时,仅针对绑定有区域的池的处理器集中的处理器报告统计信息。应用于 -p 选项以及 pagefaultscpu 等报告字段的输出。

auditon(2)

添加了 AUDIT_ZONENAME 以便生成每个审计记录的区域 ID 标记。

priocntl(2)

添加了 P_ZONEID id 参数。

processor_info(2)

如果调用方位于非全局区域中并且启用了池功能,但是处理器不在绑定有区域的池的处理器集中,则会返回错误。 

p_online(2)

如果调用方位于非全局区域中并且启用了池功能,但是处理器不在绑定有区域的池的处理器集中,则会返回错误。 

pset_bind(2)

添加了 P_ZONEID 作为 idtype。添加了区域作为可能的 P_MYID 规范选项。向 EINVAL 错误说明中的有效 idtype 列表中添加了 P_ZONEID

pset_info(2)

如果调用方位于非全局区域中并且启用了池功能,但是处理器不在绑定有区域的池的处理器集中,则会返回错误。 

pset_list(2)

如果调用方位于非全局区域中并且启用了池功能,但是处理器不在绑定有区域的池的处理器集中,则会返回错误。 

pset_setattr(2)

如果调用方位于非全局区域中并且启用了池功能,但是处理器不在绑定有区域的池的处理器集中,则会返回错误。 

sysinfo(2)

PRIV_SYS_CONFIG 更改为 PRIV_SYS_ADMIN

umount(2)

如果 file 指向的文件不是绝对路径,则会返回 ENOENT

getloadavg(3C)

如果调用方位于非全局区域中并且启用了池功能,则此行为相当于使用 PS_MYIDpsetid 进行调用。

getpriority(3C)

向可以指定的目标进程中添加了区域 ID。向 EINVAL 错误说明中添加了区域 ID。

priv_str_to_set(3C)

针对调用方区域内的所有可用权限的集合添加了 "zone" 字符串。 

pset_getloadavg(3C)

如果调用方位于非全局区域中并且启用了池功能,但是处理器不在绑定有区域的池的处理器集中,则会返回错误。 

sysconf(3C)

如果调用方位于非全局区域中并且启用了池功能,则 sysconf(_SC_NPROCESSORS_CONF)sysconf(_SC_NPROCESSORS_ONLN) 将返回绑定有区域的池的处理器集中的处理器数。

ucred_get(3C)

添加了 ucred_getzoneid() 函数,此函数将返回处理器的区域 ID 或 -1(如果未提供区域 ID)。

core(4)

添加了 n_type: NT_ZONENAME。此项包含一个描述运行进程的区域名称的字符串。

pkginfo(4)

现在,提供了可选参数和一个环境变量来支持区域。 

proc(4)

添加了获取区域中所运行进程的相关信息的功能。 

audit_syslog(5)

添加了在设置 zonename 审计策略时使用的 in<zone name > 字段。

privileges(5)

添加了 PRIV_PROC_ZONE,它允许某个进程跟踪其他区域中的进程或向这些进程发送信号。请参见 zones(5)。

if_tcp(7P)

添加了区域 ioctl() 调用。

cmn_err(9F)

添加了区域参数。 

ddi_cred(9F)

添加了 crgetzoneid(),它将从 cr 指向的用户证书中返回区域 ID。