Solaris Zones 分区技术Chien Yen,2005 年 3 月 目录: 1.0 介绍Solaris 操作系统中的 Solaris Zones[1][2] 功能是一种用于虚拟化操作系统服务的分区技术,可提供安全的隔离环境以便承载和运行各种应用程序。区域是一个虚拟的操作系统环境,它是在 Solaris 操作系统的单个实例中创建的。区域有两种类型:全局区域 (global zone) 和非全局区域 (non-global zone)。 全局区域包含一次 Solaris OS 的完全正常运行的安装,可由系统硬件来引导。如果 Solaris OS 安装由系统硬件引导,它即为全局区域。一个系统中只能运行一个全局区域。全局区域管理员可使用 Solaris Zones 功能为非全局区域中运行的进程提供服务虚拟和名称空间隔离。非全局区域中的进程与其他区域中的进程相互隔离。这种隔离可防止非全局区域中运行的进程监视或影响其他区域中运行的进程。对于非全局区域中运行的进程,即使具有超级用户凭证也不能查看或影响其他区域中的活动。 区域还提供一个抽象层,用于将应用程序与部署应用程序的计算机的物理属性分隔开,物理设备路径和网络接口名称都是这些属性的示例。 在任何支持 Solaris 10 发行版的计算机中都可以使用区域。单个物理服务器中的区域数上限为 8192。单个物理服务器中可以有效承载的区域数取决于在组合的所有区域中运行的应用程序的总资源需求。 1.1 Solaris Zones 功能:Solaris Containers 的组件 Solaris 容器是一个虚拟的运行时环境,它对工作负荷所使用的系统资源(例如 CPU)进行了限制。Solaris Containers 将 Solaris OS 资源管理功能与 Solaris Zones 相结合,以提供一个对工作负荷具有固定资源边界的虚拟环境。 工作负荷是一个或一组应用程序的所有进程的总和。除进程实体外,Solaris OS 还添加了两种用于标识工作负荷的功能:项目和任务。如果不使用 Solaris 资源管理功能,则 Solaris OS 在响应工作负荷要求时会为系统中的所有活动提供相同的资源访问权限。借助 Solaris OS 中的资源管理功能,系统管理员可以分别处理各个工作负荷,并可分配工作负荷所能使用的资源数量。通过这些资源管理功能,系统管理员可以执行下列操作:
工作负荷的概念已得到扩展,以便适用于 Solaris Zones。每个区域都有自己的 2.0 Solaris Zones 软件的优点Solaris Zones 的主要优点是可以利用服务器整合来降低总体拥有成本 (total cost of ownership, TCO)。利用 Solaris Zones 软件可以实现:
3.0 区域 (Zone) 创建和初启全局区域管理员使用 非全局区域可处于以下状态之一:
在标准的非全局区域初启过程中,区域会经过以下状态:CONFIGURED(已配置) -> INSTALLED(已安装) -> READY(就绪) -> RUNNING(正在运行)(请参见图 1)。
以下是一个快速区域配置样例,其中区域名称为 global# zonecfg -z my-zone zonecfg:my-zone> create /* 缺省为稀疏根模型,请参见第 3.4 节了解详细信息*/ zonecfg:my-zone> set zonepath=/export/home/my-zone zonecfg:my-zone> add net zonecfg:my-zone:net> set address=10.0.0.1 zonecfg:my-zone:net> set physical=eri0 zonecfg:my-zone:net> end zonecfg:my-zone> verify zonecfg:my-zone> commit zonecfg:my-zone> ^D 在此处,创建了一个区域配置文件 global# zoneadm -z my-zone install 执行完 global# zoneadm -z my-zone boot 此语句将引导区域。在区域内挂载相应的文件系统,启动 # zlogin -C my-zone 【连接到区域 配置非全局区域的根文件系统有两种方法:完全根模型 (whole-root model) 和稀疏根模型 (sparse-root model)。 完全根模型将所有必需的软件包和任何选定的可选 Solaris 软件包安装到区域的专用文件系统中,因此可提供最大化的配置能力。此模型的优点是:允许区域管理员定制其区域的文件系统布局(例如,创建 稀疏根模型只安装(即将 4.0 区域安全性每个非全局区域都有一个安全边界。该安全边界通过以下各项进行维护:
传统的 UNIX 权限模型将所有的权限与有效的
Solaris 10 OS 通过实现进程权利管理[3]的原则解决了上述问题,该原则是将用户的权限限制为执行作业所需的权限。进程权利管理通过权限集扩展了 Solaris 进程模型。每个权限集包含零个或多个权限。每个进程有四个权限集。其中的一个权限集-有效权限集,决定进程是否可以使用特定权限。 这四个权限集包括:
其中
C.E-父进程的有效权限集
C.P-父进程的允许权限集
C.I-父进程的可继承权限集
C.L-父进程的限制权限集
C'.E-子进程的有效权限集
C'.P-子进程的允许权限集
C'.I-子进程的可继承权限集
C'.L-子进程的限制权限集
所有内核安全策略检查都只能使用权限来执行。
内核提供用户使用系统所需的基本权限集。登录时,每个用户都会继承基本权限集。可以使用 如果进程的权限识别状态 (Privilege Aware State, PAS) 是不可识别权限 (not privilege aware, NPA),则进程会忽略权限模型。进程的权限状态可以通过 PAS 进行扩展,PAS 可取以下值:
进程可以通过 在非全局区域中运行的所有进程都可以识别权限。这意味着非全局区域中的所有进程都受创建进程时为其分配的权限集的约束。系统创建非全局区域时,会创建一个内核伪进程 下面的列表显示非全局区域中的进程所具有的权限。由于非全局区域中进程的权限受限,因此某些系统可能返回错误。在大多数情况下,拥有权限的进程将返回 所有权限 区域权限 ========================================================= PRIV_CONTRACT_EVENT PRIV_CONTRACT_EVENT PRIV_CONTRACT_OBSERVER PRIV_CONTRACT_OBSERVER PRIV_CPC_CPU PRIV_DTRACE_PROC PRIV_DTRACE_USER PRIV_DTRACE_KERNEL PRIV_FILE_CHOWN PRIV_FILE_CHOWN PRIV_FILE_CHOWN_SELF PRIV_FILE_CHOWN_SELF PRIV_FILE_DAC_EXECUTE PRIV_FILE_DAC_EXECUTE PRIV_FILE_DAC_READ PRIV_FILE_DAC_READ PRIV_FILE_DAC_SEARCH PRIV_FILE_DAC_SEARCH PRIV_FILE_DAC_WRITE PRIV_FILE_DAC_WRITE PRIV_FILE_LINK_ANY PRIV_FILE_LINK_ANY PRIV_FILE_OWNER PRIV_FILE_OWNER PRIV_FILE_SETID PRIV_FILE_SETID PRIV_IPC_DAC_READ PRIV_IPC_DAC_READ PRIV_IPC_DAC_WRITE PRIV_IPC_DAC_WRITE PRIV_IPC_OWNER PRIV_IPC_OWNER PRIV_NET_ICMPACCESS PRIV_NET_ICMPACCESS PRIV_NET_PRIVADDR PRIV_NET_PRIVADDR PRIV_NET_RAWACCESS PRIV_PROC_CHROOT PRIV_PROC_CHROOT PRIV_PROC_CLOCK_HIGHRES PRIV_PROC_AUDIT PRIV_PROC_AUDIT PRIV_PROC_EXEC PRIV_PROC_EXEC PRIV_PROC_FORK PRIV_PROC_FORK PRIV_PROC_INFO PRIV_PROC_INFO PRIV_PROC_LOCK_MEMORY PRIV_PROC_OWNER PRIV_PROC_OWNER PRIV_PROC_PRIOCNTL PRIV_PROC_SESSION PRIV_PROC_SESSION PRIV_PROC_SETID PRIV_PROC_SETID PRIV_PROC_TASKID PRIV_PROC_TASKID PRIV_PROC_ZONE PRIV_SYS_ACCT PRIV_SYS_ACCT PRIV_SYS_ADMIN PRIV_SYS_ADMIN PRIV_SYS_AUDIT PRIV_SYS_AUDIT PRIV_SYS_CONFIG PRIV_SYS_DEVICES PRIV_SYS_IPC_CONFIG PRIV_SYS_LINKDIR PRIV_SYS_MOUNT PRIV_SYS_MOUNT PRIV_SYS_NET_CONFIG PRIV_SYS_NFS PRIV_SYS_NFS PRIV_SYS_RESOURCE PRIV_SYS_RESOURCE PRIV_SYS_SUSER_COMPAT PRIV_SYS_TIME 5.0 区域资源和服务虚拟Solaris Zones 提供了强健的分区解决方案,以便为进程虚拟计算机操作环境。当非全局区域中的进程的活动与其他区域中的进程隔离时,这些进程能够访问在操作环境中需要的资源和服务。这些资源和服务包括:
每个非全局区域都有自己的逻辑网络和回送接口。上层流与逻辑接口之间的绑定受到限制,因此流只能与同一区域中的逻辑接口建立绑定。同样,来自逻辑接口的包只能传递到此逻辑接口所在区域中的上层流。 与回送地址之间的绑定也保留在区域内,但有一项例外:当一个区域中的流试图访问另一区域中某一接口的 IP 地址时。 此外,以下联网虚拟和限制适用于非全局区域:
尽管可在各区域之间共享文件系统,但每个非全局区域都有自己的文件系统名称空间。全局区域文件系统使用 要从非全局区域中隐藏全局区域目录,例如 global# zonecfg -z my-zone
zonecfg:my-zone> add fs
zonecfg:my-zone:fs> set dir=/usr/local
zonecfg:my-zone:fs> set special=/empty
zonecfg:my-zone:fs> set type=lofs
zonecfg:my-zone:fs> add options ro
zonecfg:my-zone:fs> end
有多种方式可用于向非全局区域中添加文件系统:
global# newfs /dev/rdsk/c1t0d0s0 global# mount /dev/dsk/c1t0d0s0 /mystuff global# zonecfg -z my-zone zonecfg:my-zone> add fs zonecfg:my-zone:fs> set dir=/usr/mystuff zonecfg:my-zone:fs> set special=/mystuff zonecfg:my-zone:fs> set type=lofs zonecfg:my-zone:fs> end global# newfs /dev/rdsk/c1t0d0s0 global# zonecfg -z my-zone zonecfg:my-zone> add fs zonecfg:my-zone:fs> set dir=/usr/mystuff zonecfg:my-zone:fs> set special=/dev/dsk/c1t0d0s0 zonecfg:my-zone:fs> set raw=/dev/rdsk/c1t0d0s0 zonecfg:my-zone:fs> set type=ufs zonecfg:my-zone:fs> end global# zonecfg -z my-zone zonecfg:my-zone> add device zonecfg:my-zone:device> set match=/dev/rdsk/c1t0d0s0 zonecfg:my-zone:fs> end zonecfg:my-zone> add device zonecfg:my-zone:device> set match=/dev/dsk/c1t0d0s0 zonecfg:my-zone:fs> end my-zone# newfs /dev/rdsk/c1t0d0s0 my-zone# mount /dev/dsk/c1t0d0s0 /usr/mystuff # mount /dev/dsk/c1t0d0s0 /export/home/my-zone/root/usr/mystuff global# newfs /dev/rdsk/c1t0d0s0 global# mount /dev/dsk/c1t0d0s0 /mystuff global# mkfile 1g /mystuff/myfile global# lofiadm -a /mystuff/myfile global# zonecfg -z my-zone zonecfg:my-zone> add device zonecfg:my-zone:device> set match=/dev/rlofi/1 zonecfg:my-zone:fs> end zonecfg:my-zone> add device zonecfg:my-zone:device> set match=/dev/lofi/1 zonecfg:my-zone:fs> end 5.3 进程间通信 (Interprocess Communication, IPC) Solaris Zones 的基本设计原则是:非全局区域中的进程只能使用 IPC 与同一区域中的其他进程通信。对于基于文件系统的 IPC,例如管道(使用 其他 IPC(例如 Solaris 门和 System V IPC)将区域 ID 附加到通信对象中,使得非全局区域中运行的进程能够访问或控制仅与同一区域关联的对象。 设备通常是系统中的共享资源。因此,为了使设备可用于非全局区域,需要进行一些限制,以免危及系统安全。
zonecfg:my-zone> add device
zonecfg:my-zone:device> set match=/dev/dsk/c1t1d0s0
zonecfg:my-zone:device> end
/dev 项的实用程序无法在非全局区域中工作。这些实用程序包括:
/dev/zconsole 由 zcons(7D) 驱动程序实现。zcons 驱动程序的每个实例表示一个全局区域/非全局区域对。该驱动程序可将 I/O 从全局区域传递到非全局区域,然后再反向传回。/dev/console、/dev/msglog、/dev/syscon、/dev/sysmsg 以及 /dev/systty 都是到 /dev/zconsole 的符号链接。区域设计的一个基本原则是:非全局区域中的进程不能影响或查看在其他区域中运行的进程的活动。每个进程都与一个区域关联。对进程可见性的限制可通过限制 在非全局区域中, 尝试向其他区域中的进程发送信号或对其进行控制(例如,使用 通过 Solaris 资源管理,系统管理员可以控制工作负荷的资源使用情况。Solaris OS 中的工作负荷与项目、任务以及进程实体相关联。传统的按进程进行的资源控制已扩展到任务和项目实体。 项目(如用户和组)是相关工作在网络范围内的管理标识符。任务将一组进程收集到表示工作负荷组件的可管理实体中。 系统管理员使用 这些资源管理概念已得到扩展,以便适用于区域。每个区域都有自己的 一个区域,一个资源池规则适用于非全局区域。这意味着非全局区域完全与池绑定。池中所有资源在区域的所有进程间共享。将非全局区域中的单个进程、任务或项目绑定到其他池的任何尝试都将失败。 每个区域都维护自己的软件包和修补程序数据库。可以从全局区域将软件包或修补程序单独安装到某个非全局区域中,或安装到所有非全局区域中。 区域环境中的打包行为会根据以下因素而有所变化:
如果软件包的 以下列表指定了在全局和非全局区域中使用
6.0 区域限制由于上述各节所介绍的安全、进程隔离和资源分区等约束的影响,已对非全局区域中运行的进程强加了系统调用、设备可用性和联网使用等方面的限制。这些限制通过以下各项来实施:
以下各节[4]中列出了一些在非全局区域中使用时可能会返回错误的接口(API、CLI、设备文件等)。
下面列出的命令可能在非全局区域中不能实现全部功能。例如,可在非全局区域中使用 add_drv(1M)/rem_drv(1M)-向系统中添加/删除新设备驱动程序arp(1M)-地址分辨率显示和控制autopush(1M)-配置自动推送的 STREAMS 模块列表cfgadm(1M)-配置管理cpustat(1M)-使用 CPU 性能计数器监视系统行为devfsadm(1M)-用于 /dev 的管理命令devlinks(1M)-为各种设备和伪设备添加 /dev 项dispadmin(1M)-进程调度程序管理disks(1M)-为附加到系统的硬盘创建 /dev 项drvconfig(1M)-对设备应用权限和拥有权更改dtrace(1M)-DTrace 动态跟踪编译器和跟踪实用程序intrstat(1M)-报告中断统计信息ipf(1M) 和相关的 IP 过滤器命令-更改 IP 包输入和输出的包过滤列表modload(1M)/modunload(1M)-加载/卸载内核模块plockstat(1M)-报告用户级别的锁定统计信息pooladm(1M)-激活和取消激活资源池功能poolcfg(1M)-创建和修改资源池配置文件poolbind(1M)-将进程、任务、项目或进程的查询绑定绑定到资源池ports(1M)-为序列行创建 /dev 项和 inittab 项prtconf(1M)-打印系统配置prtdiag(1M)-显示系统诊断信息psrset(1M)-处理器集的创建和管理 route(1M)-手动处理路由表share(1M)-使本地资源可供远程系统挂载snoop(1M)-捕获并检查网络数据包tapes(1M)-为附加到系统的磁带机创建 /dev 项trapstat(1M)-报告陷阱统计信息
支持 DLPI 编程接口的所有 NIC 设备在非全局区域中都不可访问。此类设备节点的示例包括: 7.0 参考资料[1] 《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》,Sun Microsystems, Inc. [2] BigAdmin 系统管理门户-Solaris 区域,Sun Microsystems, Inc. [3]《系统管理指南:安全性服务》中的第 8 章“使用角色和权限(概述)”,Sun Microsystems, Inc. [4] Solaris 10 Reference Manual Collection,Sun Microsystems, Inc. 关于作者Chien-Hua Yen 是 Sun Microsystems 市场开发工程部门的高级工程师。 除非另行说明,否则此处所有技术手册(包括文章、常见问题解答和样例)中的代码都按此许可提供。 |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||