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 が報告されます。
ゾーンの状態には、次のいくつかの種類があります。
ゾーンの構成が完全に指定および確定されて、安定した記憶領域に保存されていることを示します。
ゾーンのインストールまたはアンインストールが完了していないか、またはそのような状態への移行中に操作が中断されたことを示します。
ゾーンの構成がシステムにインストールされたことを示します。パッケージはゾーンのルートパスにインストールされています。
ゾーンの仮想プラットフォームが確立されていることを示します。ネットワークインタフェースの plumb、ファイルシステムのマウント、およびデバイスの設定は完了していますが、ゾーンに関連付けられているプロセスはまだ開始していません。
ゾーンのアプリケーション環境に関連付けられたユーザープロセスが稼働状態であることを示します。
ゾーンが停止していることを示します。アプリケーション環境の状態 (ファイルシステムをマウントした状態など) を切り離せない場合、または仮想プラットフォームの一部を破棄できない場合に、ゾーンがそれらの状態に固定されることがあります。そのような場合には、オペレータの介入が必要です。
あるゾーン (大域ゾーンを除く) で実行中のプロセスからほかのプロセスへのアクセスは制限されています。/proc (proc(4) を参照) またはプロセス ID を引数に持つシステムコールインタフェース (kill(2)、priocntl(2) など) を使用してアクセスできるプロセスは、同じゾーンのプロセスだけです。ほかのゾーン (大域ゾーンを含む) にあるプロセスにアクセスしようとすると、指定したプロセスがなかった場合に返されるエラーコードと同じエラーコードで失敗します。
非大域ゾーンで実行されるプロセスでは、あるゾーンで実行する操作がほかのゾーンの操作に影響することがないように、一部の特権が制限されています。特権が制限されることによって、そのゾーンで特権ユーザー (スーパーユーザー、ルートユーザーなど) が実行できる操作が制限されます。ゾーンで許可される特権のリストは、ppriv(1) ユーティリティーを使って表示できます。特権に関する詳細については、privileges(5) を参照してください。
あるゾーンのプロセスが別のゾーンのプロセスに干渉することがないよう、ゾーン内部で利用可能なデバイスセットには制限があります。たとえば、ゾーンで実行されるプロセスから、/dev/kmem を使用してカーネルメモリーを変更したり、ルートディスクの内容を変更したりすることはできません。このため、デフォルトでは、ゾーン内で安全に利用可能であると見なされるいくつかの仮想デバイスだけを使用できます。特定のゾーンで使用できるデバイスを追加するときは、zonecfg(1M) ユーティリティーを使用します。
デバイスおよび特権が制限されることで、非大域ゾーンで実行できるユーティリティーにもいくつかの影響があります。たとえば、eeprom(1M)、prtdiag(1M)、および prtconf(1M) ユーティリティーは、通常は利用できないデバイスを操作するため、ゾーンでは使用できません。
各ゾーンは、ゾーンの root と呼ばれるディレクトリをルートとする、ファイルシステム階層の独自領域を保持します。ゾーンで実行されるプロセスがアクセスできるファイルは、階層のその領域にあるファイル (ゾーンのルートにあるファイル) だけです。この制限により、あるゾーンのプロセスから、別のゾーンに関連付けられているファイルシステムのデータを破壊または検査できないようになっています。chroot(1M) ユーティリティーをゾーンで使用することはできますが、その処理はゾーンでアクセスできるルートパスだけに制限されます。
ファイルシステムの領域を保護するために、ファイルシステムの領域を 1 つ以上のゾーンにマウントするときには、lofs(7FS) ファイルシステムの読み取り専用オプションを使用して行います。このように操作することで、同じファイルシステムのデータを複数のゾーンで共有するときに、ゾーンのセキュリティーを確保することができます。
あるゾーンで確立された NFS および autofs マウントへのアクセスは、そのゾーンだけに制限され、ほかのゾーン (大域ゾーンを含む) からアクセスすることはできません。ゾーンが停止または再起動すると、マウントは削除されます。
ゾーンを論理ネットワークインタフェースに割り当てて、そのインタフェースを使用してネットワークと通信することができます。これらのインタフェースを設定するときは、zonecfg(1M) ユーティリティーを使用します。ゾーンが停止または再起動すると、インタフェースは削除されます。ゾーンに割り当てることができるのは論理インタフェースだけです。
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|
属性タイプ |
属性値 |
|---|---|
|
使用条件 |
SUNWcsu |