本节介绍有关安装了区域的 Solaris 系统上文件系统问题的相关信息。每个区域都有自己的文件系统分层结构部分,根目录称为区域 root。区域中的进程仅可访问区域根目录下的分层结构部分中的文件。chroot 实用程序可以在区域中使用,但是仅用于将进程限制在区域内的根路径。有关 chroot 的更多信息,请参见 chroot(1M)。
mount 实用程序的 -o nosuid 选项具有以下功能:
在使用 nosetuid 选项挂载的文件系统上,setuid 二进制命令中的进程无法使用 setuid 二进制命令权限运行。而是使用执行此二进制命令的用户权限运行。
例如,如果用户执行属于 root 的 setuid 二进制命令,则进程使用此用户的权限运行。
不允许打开文件系统中的特定设备项。此行为相当于指定 nodevices 选项。
所有可使用 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 dataset 和 fs 资源类型进行挂载。 |
有关更多信息,请参见如何配置区域、在正在运行的非全局区域中挂载文件系统和 mount(1M) 手册页。
卸载文件系统的能力将取决于执行初始挂载的人员。如果使用 zonecfg 命令将文件系统指定为区域配置的一部分,则全局区域将拥有此挂载,而非全局区域的区域管理员无法卸载该文件系统。如果在非全局区域中挂载文件系统(例如指定区域 /etc/vfstab 文件中的挂载),则非全局区域的区域管理员可以卸载该文件系统。
在区域中挂载某些文件系统时存在安全限制。其他文件系统在区域中挂载时会显示出特殊行为。已修改的文件系统列表如下。
Autofs 是一项可自动挂载相应文件系统的客户端服务。当客户机尝试访问目前未挂载的文件系统时,AutoFS 文件系统会拦截请求并调用 automountd 以挂载请求的目录。在区域中建立的 AutoFS 挂载对于此区域而言是本地挂载。不能从其他区域(包括全局区域)访问这些挂载。在停止或重新引导区域时,将删除挂载。有关 AutoFS 的更多信息,请参见《系统管理指南:网络服务》中的“Autofs 如何工作”。
每个区域都运行自己的 automountd 副本。自动映射和超时由区域管理员控制。不能跨越非全局区域的 AutoFS 挂载点从全局区域触发其他区域中的挂载。
触发其他挂载时,便会在内核中创建某些 AutoFS 挂载。此类挂载不能使用常规 umount 接口删除,因为它们必须作为一个组进行挂载或卸载。请注意,提供此功能是为了关闭区域。
MNTFS 是一款虚拟文件系统,可提供本地系统中已挂载文件系统表的只读访问权限。在非全局区域中使用 mnttab 可查看的一组文件系统是该区域中已挂载的一组文件系统和一个根 (/) 项。具有无法在区域中访问的特殊设备的挂载点(例如 /dev/rdsk/c0t0d0s0)都将其特殊设备的挂载点设置为与此挂载点相同。系统中的所有挂载都可从全局区域的 /etc/mnttab 表中查看。有关 MNTFS 的更多信息,请参见《系统管理指南:设备和文件系统》中的第 19 章 “挂载和取消挂载文件系统(任务)”。
在区域中建立的 NFS 挂载对于此区域而言是本地挂载。不能从其他区域(包括全局区域)访问这些挂载。在停止或重新引导区域时,将删除挂载。
如 mount_nfs(1M) 手册页中所述,NFS 服务器不应尝试挂载自己的文件系统。因此,区域不应对由全局区域导出的文件系统执行 NFS 挂载。区域不能是 NFS 服务器。在区域中,NFS 挂载如同使用 nodevices 选项进行挂载。
nfsstat 命令输出仅与运行此命令的区域有关。例如,如果在全局区域中运行此命令,则仅报告有关此全局区域的信息。有关 nfsstat 命令的更多信息,请参见 nfsstat(1M)。
如果 zlogin 命令的打开文件或其地址空间的任意部分驻留在 NFS 上,此命令将失败。有关更多信息,请参见zlogin 命令。
/proc 文件系统(或 PROCFS)提供进程可见性和访问限制,同时还提供有关进程的区域关联的信息。通过 /proc 只能查看同一区域中的进程。
全局区域中的进程可以查看非全局区域中的进程和其他对象。这样,此类进程便可查看整个系统范围的内容。
在区域中,procfs 挂载如同使用 nodevices 选项进行挂载。有关 procfs 的更多信息,请参见 proc(4) 手册页。
通过 LOFS 进行挂载的范围被限制为区域中可见的文件系统部分。因此,对区域中的 LOFS 挂载没有任何限制。
使用 zonecfg 命令配置具有 fsck 二进制命令的基于存储的文件系统(例如 UFS)时,区域管理员必须指定 raw 参数。该参数指明原始(字符)设备,如 /dev/rdsk/c0t0d0s7。zoneadmd 在挂载文件系统之前,会自动以非交互、仅检查的模式 (fsck -m) 在此设备上运行 fsck 命令。如果 fsck 失败,则 zoneadmd 无法使区域达到就绪状态。由 raw 指定的路径不能是相对路径。
对于没有在 /usr/lib/ fstype/fsck 中提供 fsck 二进制代码的文件系统,不能为 fsck 指定设备。如果此文件系统具有 fsck 二进制命令,则必须为 fsck 指定设备。
有关更多信息,请参见zoneadmd 守护进程和 fsck(1M)。
可以使用带有 add dataset 资源的 zonecfg 命令将 ZFS 数据集添加到非全局区域。此数据集将在非全局区域中进行挂载并显示,并且在全局区域中不再可见。区域管理员可以在此数据集中创建和销毁文件系统、创建和销毁克隆对象以及修改此数据集的属性。
zfs 的 zoned 属性指明是否已将数据集添加到非全局区域。
# 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 客户机。支持版本 2、版本 3 和版本 4 协议。有关这些 NFS 版本的信息,请参见《系统管理指南:网络服务》中的“NFS 服务的功能”
缺省版本为 NFS 版本 4。可以使用以下方法之一在客户机上启用其他 NFS 版本:
可以编辑 /etc/default/nfs 以设置 NFS_CLIENT_VERSMAX=number,从而使区域在缺省情况下使用指定的版本。请参见《系统管理指南:网络服务》中的“设置 NFS 服务”。请使用任务图中的“如何通过修改 /etc/default/nfs 文件在客户机上选择不同的 NFS 版本”过程。
可以手动创建版本挂载。此方法会覆盖 /etc/default/nfs 的内容。请参见《系统管理指南:网络服务》中的“设置 NFS 服务”。使用任务图中的“如何使用命令行在客户机上选择不同的 NFS 版本”过程。
请注意,不能使用 mknod(1M) 手册页中所述的 mknod 命令在非全局区域中创建特殊文件。
区域的文件系统名称空间是可从全局区域访问的名称空间的子集。可以通过以下方式,防止全局区域中的非特权进程遍历非全局区域的文件系统分层结构:
指定区域根目录的父目录仅可由根拥有、读取、写入和执行
限制访问由 /proc 导出的目录
请注意,尝试访问为其他区域挂载的 AutoFS 节点将失败。全局管理员不必具有向下派生到其他区域的自动映射。
安装了非全局区域之后,除了系统备份实用程序之外,此区域永远不能通过其他任何命令从全局区域中直接访问。此外,当非全局区域向未知环境公开之后,便不再将其视为安全区域。例如放置在可公共访问的网络上的区域,这种情况下可能会危及区域的安全并且可能会改变其文件系统的内容。如果存在任何危及区域安全的可能性,全局管理员便应将此区域视为不可信区域。
任何可通过 -R 或 -b 选项(或等效选项)接受备用根的命令,在以下情况成立时不得使用:
命令在全局区域中运行。
备用根指非全局区域中的任何根路径,此路径既可以是当前运行的系统的全局区域的相对路径,也可以是备用根中全局区域的相对路径。
例如通过非全局区域根路径在全局区域中运行的 pkgadd 实用程序的 -R root_path 选项。
以下是通过备用根路径使用 -R 的命令、程序和实用程序的列表:
auditreduce
bart
flar
flarcreate
installf
localeadm
makeuuid
metaroot
patchadd
patchrm
pkgadd
pkgadm
pkgask
pkgchk
pkgrm
prodreg
removef
routeadm
showrev
syseventadm
以下是通过备用根路径使用 -b 的命令和程序的列表:
add_drv
pprosetup
rem_drv
roleadd
sysidconfig
update_drv
useradd