免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3532 | 回复: 6
打印 上一主题 下一主题

Solaris Zone对于文件系统的支持应用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-10 09:05 |只看该作者 |倒序浏览
全局Zone可见性和访问权限
全局Zone既可作为系统的缺省Zone,也可作为在系统范围内实施管理控制的Zone。这种双重角色会引起管理问题。由于全局Zone内的应用程序有权访问其他Zone中的进程和其他系统对象,因此,管理操作的影响范围会比预期的范围更广。例如,服务关闭脚本通常使用pkill 来通知退出具有给定名称的进程。在全局Zone中运行此脚本时,将通知退出系统中所有Zone内的所有此类进程。
通常需要将整个系统作为考虑范围。例如,要监视系统范围内的资源使用情况,必须查看整个系统中的进程统计信息。如果仅查看全局Zone活动,则会遗漏系统中可能正在共享部分或全部系统资源的其他Zone的相关信息。在没有使用资源管理功能对系统资源(如CPU)进行严格分区的情况下,此类查看尤为重要。
因此,全局Zone中的进程可以查看非全局Zone中的进程和其他对象。这样,此类进程便可查看整个系统范围的内容。控制信号或将信号发送到其他Zone中进程的功能由权限PRIV_PROC_ZONE 加以限制。此权限类似于 PRIV_PROC_OWNER,因为它允许进程覆盖对非特权进程设定的限制。在这种情况下,所谓的限制是指全局Zone中的非特权进程无法向其他Zone中的进程发送信号或控制这些进程。即使进程的用户 ID 相匹配或者正在运行的进程拥有PRIV_PROC_OWNER 权限,也会存在上述限制。可以删除其他特权进程的 PRIV_PROC_ZONE 权限,以将操作限制为仅对全局Zone有效。
有关使用 zoneidlist 匹配进程的信息,请参见 pgrep(1) pkill(1) 手册页。

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


Zone中的系统可查看性
对 ps 命令进行了以下修改:
-o 选项用于指定输出格式。使用此选项,可以列显进程的Zone ID 或运行此进程的Zone名称。
-z zonelist 选项用于仅列出指定Zone中的进程。Zone可以通过Zone名称或Zone ID 指定。
此选项仅在全局Zone中执行命令时有用。
-Z 选项用于列显与进程关联的Zone名称。Zone名称在列标题 ZONE 下列显。
有关更多信息,请参见 ps(1) 手册页。
已将 -z zonename 选项添加到以下 Solaris 实用程序。可以使用此选项将信息过滤为仅包括指定的一个或多个Zone。
ipcs(请参见 ipcs(1) 手册页)
pgrep(请参见 pgrep(1) 手册页)
ptree(请参见 proc(1) 手册页)
prstat(请参见 prstat(1M) 手册页)


非全局Zone节点名称

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



文件系统和非全局Zone
每个Zone都有自己的文件系统分层结构部分,根目录称为Zone root。Zone中的进程仅可访问Zone根目录下的分层结构部分中的文件。chroot 实用程序可以在Zone中使用,但是仅用于将进程限制在Zone内的根路径。有关 chroot 的更多信息,请参见 chroot(1M)。

-o nosuid 选项
mount 实用程序的 -o nosuid 选项具有以下功能:
在使用 nosetuid 选项挂载的文件系统上,setuid 二进制命令中的进程无法使用 setuid二进制命令权限运行,而是使用执行此二进制命令的用户权限运行。
例如,如果用户执行属于 root 的 setuid 二进制命令,则进程使用此用户的权限运行。

不允许打开文件系统中的特定设备项。此行为相当于指定 nodevices 选项。

在Zone中挂载文件系统


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

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

文件系统                                                                   非全局Zone中的挂载选项
AutoFS                                         不能使用 zonecfg 挂载,不能从全局Zone中手动挂载到非全局Zone。可以在Zone中挂载。
CacheFS                                         不能在非全局Zone中使用。
FDFS                                           可以使用 zonecfg 挂载,可以从全局Zone中手动挂载到非全局Zone,可以在Zone中挂载。
HSFS                                           可以使用 zonecfg 挂载,可以从全局Zone中手动挂载到非全局Zone,可以在Zone中挂载。
LOFS                                            可以使用 zonecfg 挂载,可以从全局Zone中手动挂载到非全局Zone,可以在Zone中挂载。
        MNTFS                                          不能使用 zonecfg 挂载,不能从全局Zone中手动挂载到非全局Zone。可以在Zone中挂载。
NFS                                            不能使用 zonecfg 挂载。当前Zone所支持的版本V2、V3 和 V4 可以在Zone中挂载。
PCFS                                           可以使用 zonecfg 挂载,可以从全局Zone中手动挂载到非全局Zone,可以在Zone中挂载。
PROCFS                                         不能使用 zonecfg 挂载,不能从全局Zone中手动挂载到非全局Zone。可以在Zone中挂载。
TMPFS                                          可以使用 zonecfg 挂载,可以从全局Zone中手动挂载到非全局Zone,可以在Zone中挂载。
UDFS                                          可以使用 zonecfg 挂载,可以从全局Zone中手动挂载到非全局Zone,可以在Zone中挂载。
UFS                                         可以使用 zonecfg 挂载,可以从全局Zone中手动挂载到非全局Zone,可以在Zone中挂载。
XMEMFS              可以使用 zonecfg 挂载,可以从全局Zone中手动挂载到非全局Zone,可以在Zone中挂载。在未来的发行版中,可能不包括此文件系统。
ZFS                                     可以使用 zonecfg 的 dataset 资源进行挂载。


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


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

AutoFS
Autofs 是一项可自动挂载相应文件系统的客户端服务。当客户机尝试访问目前未挂载的文件系统时,autofs 文件系统会拦截请求并调用 automountd 以挂载请求的目录。在Zone中建立的 AutoFS 挂载对于此Zone而言是本地挂载。不能从其他Zone(包括全局Zone)访问这些挂载。在停止或重新引导Zone时,将删除挂载。
每个Zone都运行自己的 automountd 副本。自动映射和超时由Zone管理员控制。不能跨越非全局Zone的 AutoFS 挂载点从全局Zone触发其他Zone中的挂载。触发其他挂载时,便会在内核中创建某些 AutoFS 挂载。此类挂载不能使用常规 umount接口删除,因为它们必须作为一个组进行挂载或卸载。请注意,提供此功能是为了关闭Zone。

MNTFS
MNTFS 是一款虚拟文件系统,可提供本地系统中已挂载文件系统表的只读访问权限。在非全局Zone中使用 mnttab 可查看的文件系统集合是此Zone中已挂载的文件系统集合和一个根 (/) 项。具有无法在Zone中访问的特殊设备的挂载点(例如 /dev/rdsk/c0t0d0s0)都将其特殊设备的挂载点设置为与此挂载点相同。系统中的所有挂载都可从全局Zone的/etc/mnttab 表中查看。

NFS
在Zone中建立的 NFS 挂载对于此Zone而言是本地挂载。不能从其他Zone(包括全局Zone)访问这些挂载。在停止或重新引导Zone时,将删除挂载。
如 mount_nfs(1M) 手册页中所述,NFS 服务器不应尝试挂载自己的文件系统。因此,Zone不应对由全局Zone导出的文件系统执行 NFS 挂载。Zone不能是 NFS 服务器。在Zone中,NFS 挂载如同使用 nodevices 选项进行挂载。nfsstat 命令输出仅与运行此命令的Zone有关。例如,如果在全局Zone中运行此命令,则仅报告有关此全局Zone的信息。有关 nfsstat 命令的更多信息,请参见 nfsstat(1M)。
如果 zlogin 命令的打开文件或其地址空间的任意部分驻留在 NFS 上,此命令将失败。


PROCFS
/proc 文件系统(或 PROCFS)提供进程可见性和访问限制,同时还提供有关进程的Zone关联的信息。通过 /proc 只能查看同一Zone中的进程。全局Zone中的进程可以查看非全局Zone中的进程和其他对象。这样,此类进程便可查看整个系统范围的内容。
在Zone中,procfs 挂载如同使用 nodevices 选项进行挂载。有关 procfs 的更多信息,请参见 proc(4) 手册页。

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

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

ZFS
可以使用带有 add dataset 资源的 zonecfg 命令将 ZFS 数据集添加到非全局Zone。此数据集将在非全局Zone中进行挂载并显示,并且在全局Zone中不再可见。Zone管理员可以在此数据集中创建和销毁文件系统,并可修改此数据集的属性。
zfs 的 zoned 属性指明是否已将数据集添加到非全局Zone。

#zfs get zoned tank/sales

NAME             PROPERTY             VALUE                     SOURCE

tank/sales     zoned          on                  local


作为 NFS 客户机的非全局Zone
Zone可以是 NFS 客户机。支持版本 2、版本 3 和版本 4 协议。。
缺省版本为 NFS 版本 4。可以使用以下方法之一在客户机上启用其他 NFS 版本:

可以编辑 /etc/default/nfs 以设置 NFS_CLIENT_VERSMAX=number,从而使Zone在缺省情况下使用指定的版本。
可以通过修改 /etc/default/nfs 文件来在客户机上选择不同的 NFS 版本”过程。

可以手动创建版本挂载。此方法会覆盖 /etc/default/nfs 的内容。

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

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

指定Zone根目录的父目录仅可由根拥有、读取、写入和执行

限制访问由 /proc 导出的目录
请注意,尝试访问为其他Zone挂载的 AutoFS 节点将失败。全局管理员不必具有向下派生到其他Zone的自动映射。

从全局Zone中访问非全局Zone的限制
安装了非全局Zone之后,除了系统备份实用程序之外,此Zone永远不能通过其他任何命令从全局Zone中直接访问。此外,当非全局Zone向未知环境公开之后,便不再将其视为安全Zone。例如放置在可公共访问的网络上的Zone,这种情况下可能会危及Zone的安全并且可能会改变其文件系统的内容。如果存在任何危及Zone安全的可能性,全局管理员便应将此Zone视为不可信Zone。
当出现下面的情况时,不能使用任何通过 -R 或 -b 选项(或等价选项)接受备用根的命令:

命令在全局Zone中运行。

备用根指非全局Zone中的任何根路径,此路径既可是当前运行的系统的全局Zone的相对路径,也可是备用根中全局Zone的相对路径。
例如通过非全局Zone根路径在全局Zone中运行的 pkgadd 实用程序的 -R root_path 选项

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

auditreduce

bart

flar

flarcreate

installf

localeadm

makeuuid

metaroot

patchadd

patchrm

pkgadd

pkgadm

pkgask

pkgchk

pkgrm

prodreg

removef

routeadm

showrev

yseventadm


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

add_drv

pprosetup

rem_drv

roleadd

sysidconfig

update_drv

useradd

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

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

系统上的每个逻辑接口都属于特定的Zone,缺省情况下属于全局Zone。借助 zonecfg 实用程序指定给Zone的逻辑网络接口用于在网络上进行通信。每个流和连接都属于打开它的进程所在的Zone。
上层流和逻辑接口之间的绑定会受到限制。流只能与同一Zone中的逻辑接口建立绑定。同样,来自逻辑接口的包只能传递到此逻辑接口所在Zone中的上层流。
每个Zone都有自己的一组绑定。每个Zone都可以运行侦听同一端口号的相同应用程序,而且绑定不会失败,因为地址已处于使用状态。每个Zone都可以运行自己版本的以下服务:

具有完整配置文件的 Internet 服务守护进程(请参见 inetd(1M) 手册页)

sendmail(请参见 sendmail(1M) 手册页)

apache(请参见 apache(1M) 手册页)
除全局Zone之外的Zone拥有受限的网络访问权限。标准 TCP 和 UDP 套接字接口均可用,但是 SOCK_RAW 套接字接口被限制为 (Internet Control Message Protocol,ICMP)ICMP 是检测和报告网络错误状态或使用 ping 命令时所必需的。


网络接口
每个需要网络连接的非全局Zone都有一个或多个专用 IP 地址。这些地址与可以使用ifconfig 命令放入Zone中的逻辑网络接口关联。引导Zone时,将在其中自动探测并放置通
过 zonecfg 配置的Zone接口。运行Zone时,可使用 ifconfig 命令添加或删除逻辑接口。只有全局管理员才能修改接口配置和网络路由。
在非全局Zone内,只有此Zone的接口才能通过 ifconfig 进行查看。有关更多信息,请参见 ifconfig(1M) 和 if_tcp(7P) 手册页。

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

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

在由匹配路由指定的输出接口上选择包的源地址。

缺省情况下,允许地址位于同一子网上的两个Zone之间进行通信。在这种情况下,匹配路由即为子网的接口路由。

如果给定Zone具有缺省路由,并且网关位于此Zone的一个子网上,则允许此Zone与所有其他Zone进行通信。在这种情况下,匹配路由即为缺省路由。

如果匹配路由具有 RTF_REJECT 标志,则包会触发 ICMP 不可访问的消息。如果匹配路由具有 RTF_BLACKHOLE 标志,则会放弃包。全局管理员可以使用下表所述的 route 命令选项来创建具有这些标志的路由。

修饰符                    标志                        说明
-reject                RTF_REJECT                    匹配时会发出 ICMP 不可访问的消息
-blackhole             RTF_BLACKHOLE               在更新过程中以静默方式放弃包

Zone中的 IP 网络多路径

在同一个 IP 链路上,IP 网络多路径 (IP network multipathing, IPMP) 为具有多个接口的系统提供了物理接口故障检测和透明网络访问故障转移功能。IPMP 还为具有多个接口的系统提供了包负荷分配。
所有网络配置均在全局Zone中完成。可以在全局Zone中配置 IPMP,然后将功能扩展到非全局Zone。当配置非全局Zone时,将此Zone的地址放入 IPMP 组中即可实现功能扩展。此后,如果全局Zone中有一个接口出现故障,则非全局Zone地址将迁移到其他网络接口卡。
在给定的非全局Zone中,只有与此Zone关联的接口才能通过 ifconfig 命令进行查看。

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

/dev 和 /devices 名称空间

Solaris 系统使用 devfs(7FS) 手册页中所述的 devfs 文件系统来管理 /devices。此名称空间中的每个元素都表示指向硬件设备、伪设备或 nexus 设备的物理路径。名称空间是设备树的一种表现形式。同样,文件系统由目录和特定于设备的文件分层结构填充。现在作为 /(根)文件系统一部分的 /dev 文件分层结构由指向 /devices 中的物理路径的符号链接或逻辑路径组成。应用程序引用指向 /dev 中设备的逻辑路径。/dev 文件系统使用只读挂载回送挂载到Zone。
/dev 文件分层结构由以下列出的组件所组成的系统进行管理:

devfsadm

syseventd

libdevinfo 设备信息库

devinfo 驱动程序

重新配置调整管理器 (Reconfiguration Coordination Manager, RCM)

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

专用设备

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

在为特定Zone指定 SCSI 磁带设备之前,请查看 sgen(7D) 手册页。

将物理设备放入多个Zone可以在Zone之间创建隐藏通道。使用此类设备的全局Zone应用程序可能会存在非全局Zone危及数据或损坏数据的风险。

设备驱动程序管理
在非全局Zone中,可以使用 modinfo(1M) 手册页中所述的 modinfo 命令来检查已装入的内核模块列表。
大多数与内核、设备和平台管理相关的操作都不能在非全局Zone内部执行,因为修改平台
硬件配置会破坏Zone安全模型。这些操作包括:

添加和删除驱动程序

明确装入和卸载内核模块

启动动态重新配置 (dynamic reconfiguration, DR) 操作

使用影响物理平台状态的功能

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

无法在非全局Zone中使用的实用程序
以下实用程序无法在Zone中使用,因为它们所依赖的设备通常不存在:
prtconf
prtdiag

SPARC: 修改为可在非全局Zone中使用的实用程序
eeprom 实用程序可用于查看Zone中的设置,但不能用于更改设置。有关更多信息,请参见eeprom(1M) 和 openprom(7D) 手册页。

在非全局Zone中运行应用程序

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

使用影响系统整体的特权操作的应用程序。例如设置全局系统时钟或锁定物理内存的操作。

依赖于非全局Zone中不存在的某些设备的极少数应用程序,例如 /dev/kmem 或 /dev/ip。

预期在运行时或者在安装、修补或升级后能够写入 /usr 的应用程序。这是因为在缺省情况下,/usr 对于非全局Zone而言是只读的。有时,无需更改应用程序本身,便可缓解与此应用程序类型关联的问题。


在非全局Zone中使用的资源控制
任何资源控制和属性都可以在非全局Zone /etc/project 文件、NIS映射或 LDAP 目录服务中设置。给定非全局Zone的设置仅影响此Zone。在不同Zone中独立运行的项目可以在每个Zone中分别设置控制。例如,项目 A 在全局Zone中可以设置project.cpu-shares=10,而在非全局Zone中可以设置 project.cpu-shares=5。可能同时运行若干个 rcapd 实例,而每个实例都仅在自己的Zone中运行。
某个Zone中用于在该Zone中控制项目、任务和进程的资源控制和属性还要满足其他与池和Zone范围资源控制相关的要求。
一个Zone,一个池”规则适用于非全局Zone。多个非全局Zone可以共享一个池的资源。但是,全局Zone中的进程可以由拥有足够权限的进程绑定到任意池。资源控制器 poold 仅在全局Zone中运行,它可以在其中的多个池中运行。在非全局Zone中运行的 poolstat 实用程序仅显示与此Zone关联的池的相关信息。在非全局Zone中运行的不带参数的 pooladm 命令仅显示与此Zone关联的池的相关信息。Zone范围的资源控制在 project 文件中设置时不会生效。Zone范围的资源控制通过 zonecfg实用程序设置。

论坛徽章:
0
2 [报告]
发表于 2007-09-10 09:14 |只看该作者
转载注明出处
http://docs.sun.com/app/docs/coll/1584.1?l=zh
《系统管理指南:Solaris Containers-资源管理和 Solaris Zones 》

[ 本帖最后由 race 于 2007-9-10 09:36 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-09-10 10:02 |只看该作者
HIEHIE~被版主发现了......

论坛徽章:
0
4 [报告]
发表于 2007-09-10 10:35 |只看该作者
原帖由 yuhuohu 于 2007-9-10 10:02 发表
HIEHIE~被版主发现了......


精不精华没有什么关系,重要的是对大家有帮助就好. 任何的华丽光环都是虚无的.真正有用处,能帮助大家的才是重要的.帮我所有的精华都取消我个人认为也没有什么关系.这些无非都是一些虚无的东西.

论坛徽章:
0
5 [报告]
发表于 2007-09-10 10:41 |只看该作者

境界高呀

有觉悟

论坛徽章:
0
6 [报告]
发表于 2007-09-10 10:59 |只看该作者
原帖由 jeffqin 于 2007-9-10 10:41 发表
有觉悟

呵呵.不是觉悟是事实呀. 有了这些东西你是你,没有这些东西你还是你呀. 佛曰:"空即是色,色即是空" 哈哈.

论坛徽章:
0
7 [报告]
发表于 2007-09-10 12:15 |只看该作者

回复 #1 风之幻想 的帖子

支持............
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP