ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
マニュアルページセクション 5: 標準、環境、マクロ Oracle Solaris 11 Information Library (日本語) |
- Solaris アプリケーションコンテナ
Solaris のゾーン機能を使用して、アプリケーションを実行するための独立した環境を作成することができます。ゾーンで実行するプロセスは、システム上のほかのアクティビティーから監視されたり干渉されたりすることはありません。ほかのプロセス、ネットワークインタフェース、ファイルシステム、デバイス、およびプロセス間通信機能へのアクセスは、別のゾーンで実行されているプロセスと対話することがないように制限されます。
ゾーンで使用できる特権は、操作がシステム全体に影響することがないように制限されます。privileges(5) を参照してください。
ゾーンの構成と管理は、zoneadm(1M) および zonecfg(1M) ユーティリティーを使って行います。ゾーンごとに詳細な構成を指定し、ファイルシステムの内容 (ソフトウェアパッケージなど) をゾーンにインストールし、ゾーンの実行時の状態を管理することができます。zlogin(1) を使用すれば、アクティブなゾーンでコマンドを実行することができます。この操作を行うときに、in.rlogind(1M) や sshd(1M) などのネットワークベースのログインサーバーからログインする必要はありません。
ゾーンを自動的にブートするかどうかは、次のように FMRI で識別されるゾーンサービスを使って切り替えます。
svc:/system/zones:default
zoneadm(1M) を参照してください。ゾーンの autoboot プロパティーに true を設定して、常に自動的にブートする方法もあります。ただし、ゾーンサービスが無効になっている場合は、ゾーンの autoboot プロパティーの設定に関係なく、ゾーンは自動的にブートしません。zonecfg(1M) を参照してください。
アクティブなゾーンは、英数字の名前と数値の ID によって識別されます。英数字の名前は、zonecfg(1M) ユーティリティーを使用して構成します。数値の ID は、ゾーンがブートするときに自動的に割り当てられます。zonename(1) ユーティリティーを実行すると、現在のゾーン名が報告されます。zoneadm(1M) ユーティリティーを実行すると、構成済みゾーンの名前と ID が報告されます。
ゾーンの状態には、次のいくつかの種類があります。
ゾーンの構成が完全に指定および確定されて、安定した記憶領域に保存されていることを示します。
ゾーンのインストールまたはアンインストールが完了していないか、またはそのような状態への移行中に操作が中断されたことを示します。
ゾーンの構成がシステムにインストールされたことを示します。 パッケージはゾーンのルートパスにインストールされています。
ゾーンの仮想プラットフォームが確立されていることを示します。たとえば、ファイルシステムのマウントおよびデバイスの構成は完了していますが、ゾーンに関連付けられているプロセスはまだ開始していません。
ゾーンのアプリケーション環境に関連付けられたユーザープロセスが稼働状態であることを示します。
ゾーンが停止していることを示します。アプリケーション環境の状態 (ファイルシステムをマウントした状態など) を切り離せない場合、または仮想プラットフォームの一部を破棄できない場合に、ゾーンがそれらの状態に固定されることがあります。そのような場合には、オペレータの介入が必要です。
あるゾーン (大域ゾーンを除く) で実行中のプロセスからほかのプロセスへのアクセスは制限されています。/proc (proc(4) を参照) またはプロセス ID を引数に持つシステムコールインタフェース (kill(2)、priocntl(2) など) を使用してアクセスできるプロセスは、同じゾーンのプロセスだけです。ほかのゾーン (大域ゾーンを含む) にあるプロセスにアクセスしようとすると、指定したプロセスがなかった場合に返されるエラーコードと同じエラーコードで失敗します。
非大域ゾーンで実行されるプロセスでは、あるゾーンで実行する操作がほかのゾーンの操作に影響することがないように、一部の特権が制限されています。特権が制限されることによって、そのゾーンで特権ユーザー (スーパーユーザー、ルートユーザーなど) が実行できる操作が制限されます。ゾーンで許可される特権のリストは、ppriv(1) ユーティリティーを使って表示できます。特権に関する詳細については、privileges(5) を参照してください。
あるゾーンのプロセスが別のゾーンのプロセスに干渉することがないよう、ゾーン内部で利用可能なデバイスセットには制限があります。たとえば、ゾーンで実行されるプロセスから、/dev/kmem を使用してカーネルメモリーを変更したり、ルートディスクの内容を変更したりすることはできません。このため、デフォルトでは、ゾーン内で安全に利用可能であると見なされるいくつかの仮想デバイスだけを使用できます。特定のゾーンで使用できるデバイスを追加するときは、zonecfg(1M) ユーティリティーを使用します。
デバイスおよび特権が制限されることで、非大域ゾーンで実行できるユーティリティーにもいくつかの影響があります。たとえば、eeprom(1M)、prtdiag(1M)、および prtconf(1M) ユーティリティーは、通常は利用できないデバイスを操作するため、ゾーンでは使用できません。
ゾーンを最初に作成するとき、ゾーンにブランドを割り当てることができます。ブランドゾーン内のソフトウェアは、大域ゾーンにある同じソフトウェアとは異なります。このようなソフトウェアには、構成や配置の異なる Solaris ソフトウェア、Solaris 以外のソフトウェアなどがあります。このような特定のソフトウェアの集まりを「ブランド」と呼びます (brands(5) を参照)。いったんインストールされると、ゾーンをアンインストールしない限り、ゾーンのブランドは変更できません。
各ゾーンは、ゾーンの root と呼ばれるディレクトリをルートとする、ファイルシステム階層の独自領域を保持します。ゾーンで実行されるプロセスがアクセスできるファイルは、階層のその領域にあるファイル (ゾーンのルートにあるファイル) だけです。この制限により、あるゾーンのプロセスから、別のゾーンに関連付けられているファイルシステムのデータを破壊または検査できないようになっています。chroot(1M) ユーティリティーをゾーンで使用することはできますが、その処理はゾーンでアクセスできるルートパスだけに制限されます。
ファイルシステムの領域を保護するために、ファイルシステムの領域を 1 つ以上のゾーンにマウントするときには、lofs(7FS) ファイルシステムの読み取り専用オプションを使用して行います。このように操作することで、同じファイルシステムのデータを複数のゾーンで共有するときに、ゾーンのセキュリティーを確保することができます。
あるゾーンで確立された NFS および autofs マウントへのアクセスは、そのゾーンだけに制限され、ほかのゾーン (大域ゾーンを含む) からアクセスすることはできません。ゾーンが停止またはリブートすると、マウントは削除されます。
ゾーンに委任された ZFS データセットは、そのゾーン内で管理できます。委任されたデータセット内に子データセットを作成できます。委任されたデータセット内にデータセットを作成すると、それらも委任されます。委任されたデータセットは、最上位のもの以外は破棄できます。委任されたデータセットには、ほとんどのプロパティーを設定できます。詳細については、zfs(1M) を参照してください。
各ゾーンには委任された最上位のデータセットが 1 つあり、そのデータセットには ROOT データセットがあるほか、.../export や .../export/home などのデータセットが含まれる場合もあります。ROOT データセットの下にあるデータセットは、そのゾーンのブート環境を構成します。ブート環境のデータセットを作成または破棄する場合は、必ず zoneadm(1M) コマンドまたは beadm(1M) コマンドを使用するようにしてください。
ゾーンでは、TCP、UDP、および SCTP アプリケーションに独自のポート番号空間を使用し、通常は 1 つ以上の個別の IP アドレスを使用します (ただし、Trusted Extensions の特定の構成ではゾーン間で IP アドレスが共有される)。
ゾーンでは、IP レイヤー (IP ルーティング、ARP、IPsec、IP フィルタなど) の構成および状態を大域ゾーンと共有するか (共有 IP ゾーン)、異なる IP レイヤーの構成および状態を使用する (排他的 IP ゾーン) ことができます。
ゾーンが大域ゾーンと同じデータリンクに接続される、つまり、同じ IP サブネット上に配置される場合は、ゾーンに共有 IP インスタンスを使用することをお勧めします。
ゾーンが大域ゾーンやほかの非大域ゾーンとは異なる VLAN や LAN に接続される場合など、ネットワークの IP レイヤーで隔離されている必要がある場合は、隔離の理由から、ゾーンに排他的 IP を使用するようにしてください。
共有 IP ゾーンでは、ネットワークに対する特定の操作 (IP アドレスの変更、IP または Ethernet の偽装パケットの送信など) が禁止されます。これに対し、排他的 IP ゾーンでは、同じネットワークインタフェースに接続されている独立したホストと同等のネットワーク機能を使用できます。特に、そのようなゾーンのスーパーユーザーは、IP アドレスの変更および ARP パケットの偽装を行うことができます。
共有 IP ゾーンには、1 つ以上のネットワークインタフェース名と IP アドレスが zonecfg(1M) で割り当てられます。ネットワークインタフェース名は大域ゾーンでも構成する必要があります。
排他的 IP ゾーンには、1 つ以上のネットワークインタフェース名が zonecfg(1M) で割り当てられます。ネットワークインタフェース名はそのゾーンに排他的に割り当てる必要があります。つまり、同じネットワークインタフェース名をほかの稼働中のゾーンに割り当てたり、大域ゾーンで使用したりすることはできません。
DHCP クライアント、IPsec および IP フィルタという形での IP レベルの完全な機能は、排他的 IP ゾーンで使用できますが、共有 IP ゾーンでは使用できません。
ゾーンは 32 ビットのホスト識別子をエミュレートできます。ホスト識別子は、システム統合を目的として、zonecfg(1M) 経由で構成できます。ゾーンがホスト識別子をエミュレートすると、hostid(1) や sysdef(1M) などのコマンドだけでなく、ゾーンのコンテキスト内で実行される sysinfo(2) や gethostid(3C) などの C インタフェースも、ホストマシンの識別子ではなく、エミュレートされたゾーンのホスト識別子を表示するか、返します。
属性についての詳細は、attributes(5) を参照してください。
|
hostid(1), zlogin(1), zonename(1), beadm(1M), in.rlogind(1M), sshd(1M), sysdef(1M), zfs(1M), zoneadm(1M), zonecfg(1M), kill(2), priocntl(2), sysinfo(2), gethostid(3C), getzoneid(3C), ucred_get(3C), proc(4), attributes(5), brands(5), privileges(5), crgetzoneid(9F)