この節では、ゾーンがインストールされている Solaris システムでファイルシステムを使用する場合の問題について説明します。各ゾーンは、ゾーンの root と呼ばれるディレクトリをルートとする、ファイルシステム階層の独自領域を保持します。ゾーン内のプロセスは、ゾーンルート以下の階層部分内のファイルだけにアクセスできます。ゾーン内で chroot ユーティリティーを使用できますが、プロセスをゾーン内のルートパスに制限する場合だけです。chroot の詳細については、chroot(1M) のマニュアルページを参照してください。
mount ユーティリティーで -o nosuid オプションを指定する場合、次の機能を利用できます。
nosetuid オプションを使用してマウントされたファイルシステム上の setuid バイナリに基づくプロセスは、setuid バイナリの権限では動作しません。プロセスは、バイナリを実行するユーザーの権限で動作します。
たとえば、ユーザーが root の所有する setuid バイナリを実行する場合、プロセスはそのユーザーの権限で動作します。
ファイルシステム内のデバイス特殊エントリを開くことはできません。この動作は、nodevices オプションを指定する場合と同じです。
mount(1M) のマニュアルページに記載されているように、このファイルシステム固有オプションは、mount ユーティリティーでマウントできるすべての Solaris ファイルシステムで使用できます。これらのファイルシステムの一覧については、このマニュアルの 「ゾーン内でのファイルシステムのマウント」を参照してください。マウント機能についても説明します。-o nosuid オプションの詳細は、『Solaris のシステム管理 (ネットワークサービス)』の「ネットワークファイルシステムへのアクセス (リファレンス)」を参照してください。
ファイルシステムをゾーン内部でマウントする場合、nodevices オプションが適用されます。たとえば、ゾーンに、UFS ファイルシステムに対応するブロックデバイス (/dev/dsk/c0t0d0s7) および raw デバイス (/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 の詳細は、『Solaris のシステム管理 (ネットワークサービス)』の「autofs のしくみ」を参照してください。
各ゾーンは、automountd の独自コピーを実行します。自動マップおよびタイムアウトは、ゾーン管理者により制御されます。大域ゾーンから非大域ゾーンの AutoFS マウントポイントを横断的に使用して、別のゾーン内でマウントを始動させることはできません。
別のマウントが始動する際、カーネル内で特定の AutoFS マウントが作成されます。この種のマウントは、一括してマウントまたはマウント解除する必要があるため、通常の umount インタフェースを使用して削除することはできません。この機能は、ゾーンの停止処理用であることに注意してください。
MNTFS は、ローカルシステムのマウント済みファイルシステムのテーブルに読み取り専用アクセスを提供する仮想ファイルシステムです。非大域ゾーン内から mnttab を使用して表示可能なファイルシステムのセットは、ゾーン内でマウントされたファイルシステムセットおよびルート (/) のエントリで構成されます。/dev/rdsk/c0t0d0s0 などの、ゾーン内からアクセス不可能な特殊なデバイスを保持するマウントポイントは、マウントポイントと同じ特殊なデバイスセットを保持します。システム内のすべてのマウントが、大域ゾーンの /etc/mnttab テーブルから表示可能になります。MNTFS の詳細は、『Solaris のシステム管理 (デバイスとファイルシステム)』の第 18 章「ファイルシステムのマウントとマウント解除 (手順)」を参照してください。
ゾーン内部で確立された NFS マウントは、そのゾーンでのみ有効です。大域ゾーンを含むほかのゾーンからそのマウントにアクセスすることはできません。ゾーンが停止または再起動すると、マウントは削除されます。
mount_nfs(1M) のマニュアルページに記載されているように、NFS サーバーが独自のファイルシステムのマウントを試みることはできません。このため、大域ゾーンによりエクスポートされたファイルシステムを、ゾーンが NFS マウントしてはいけません。ゾーンを NFS サーバーにすることはできません。ゾーン内部からの NFS マウントは、nodevices オプションを使用してマウントされたかのように動作します。
nfsstat コマンドの出力は、コマンドが実行されたゾーンにのみ関係があります。たとえば、コマンドが大域ゾーン内で実行される場合、大域ゾーンに関する情報だけが出力されます。nfsstat コマンドの詳細は、nfsstat(1M) のマニュアルページを参照してください。
開かれているファイルのいずれか、またはそのアドレス空間のいずれかの部分が NFS 上に存在する場合、zlogin コマンドは失敗します。詳細は、「zlogin コマンド」を参照してください。
PROCFS とも呼ばれる /proc ファイルシステムは、プロセスの可視性とアクセス制限、およびプロセスのゾーン関連性に関する情報を提供します。/proc では、同じゾーン内のプロセスだけを表示できます。
大域ゾーン内のプロセスから、非大域ゾーン内のプロセスおよびほかのオブジェクトを監視できます。これにより、この種のプロセスがシステム規模の監視機能を備えることが可能になります。
ゾーン内部からは、procfs マウントは nodevices オプションを使用してマウントされたかのように動作します。procfs の詳細は、proc(4) のマニュアルページを参照してください。
LOFS でマウント可能なファイルシステムの範囲は、ゾーンで表示可能なファイルシステム部分に限定されています。このため、ゾーン内での LOFS マウントには制限はありません。
zonecfg コマンドを使用して、UFS などの fsck バイナリを保持するストレージに基づいたファイルシステムを構成する場合、ゾーン管理者は raw パラメータを指定する必要があります。このパラメータは、/dev/rdsk/c0t0d0s7 などの raw (文字) デバイスを示します。zoneadmd は、このデバイス上で fsck コマンドを非対話型の検査専用モード (fsck -m) で自動実行してから、ファイルシステムをマウントします。fsck が失敗した場合、zoneadmd を使用してゾーンを準備完了状態にすることはできません。raw により指定されるパスを、相対パスにするこ とはできません。
/usr/lib/ fstype/fsck 内で fsck バイナリを提供しないファイルシステムで、デバイスを fsck に指定するのは誤りです。また、そのファイルシステムに fsck バイナリが存在する場合に、デバイスを fsck に指定しないことも誤りです。
詳細は、「zoneadmd デーモン」および fsck(1m) のマニュアルページを参照してください。
zonecfg コマンドに add dataset 資源を指定して実行することにより、非大域ゾーンに ZFS データセットを追加できます。データセットは非大域ゾーンでマウントされ可視になり、大域ゾーンでは不可視になります。ゾーン管理者は、そのデータセット内のファイルシステムの作成と破棄、クローンの作成と破棄、およびデータセットのプロパティーの変更を行うことができます。
zfs の zoned 属性は、データセットが非大域ゾーンに追加されたかどうかを示します。
# zfs get zoned tank/sales NAME PROPERTY VALUE SOURCE tank/sales zoned on local |
大域ゾーンのデータセットを共有する場合は、zonecfg コマンドとともに add fs サブコマンドを使用して、LOFS マウントした ZFS ファイルシステムを追加できます。大域管理者は、データセットのプロパティーの設定および制御を担当します。
ZFS の詳細については、『Oracle Solaris ZFS 管理ガイド』の第 10 章「Oracle Solaris ZFS の高度なトピック」を参照してください。
ゾーンは、NFS クライアントとしても機能できます。バージョン 2、バージョン 3、およびバージョン 4 プロトコルがサポートされます。これらの NFS バージョンの詳細は、『Solaris のシステム管理 (ネットワークサービス)』の「NFS サービスの機能」を参照してください。
デフォルトのバージョンは、NFS バージョン 4 です。次のいずれかの方法を使用して、クライアント上でほかの NFS バージョンを有効にできます。
/etc/default/nfs を編集して NFS_CLIENT_VERSMAX=number を設定することで、指定したバージョンをゾーンのデフォルトとして使用できます。『Solaris のシステム管理 (ネットワークサービス)』の「NFS サービスの設定」を参照してください。作業マップの「/etc/default/nfs ファイルを変更して、クライアント上で異なるバージョンの NFS を選択する方法」に記載された手順を実行します。
バージョンマウントを手動で作成できます。この方法を使用すると、/etc/default/nfs の内容が上書きされます。『Solaris のシステム管理 (ネットワークサービス)』の「NFS サービスの設定」を参照してください。作業マップの「コマンド行を使用して、クライアント上で異なるバージョンの NFS を選択する方法」に記載された手順を実行します。
mknod(1M) のマニュアルページに記載されているように、mknod コマンドを使用して、非大域ゾーン内で特殊ファイルを作成することはできません。
ゾーンのファイルシステム名前空間は、大域ゾーンからアクセス可能な名前空間の一部です。大域ゾーン内の特権のないプロセスが、非大域ゾーンのファイルシステム階層を行き来することはできません。これには、次のような理由があります。
root だけが、ゾーンルートの親ディレクトリを所有、読み込み可能、書き込み可能、および実行可能に指定する
/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