変更可能ゾーンと不変ゾーンは、zonecfg コマンドの file-mac-profile プロパティーで指定するそれらの MWAC セキュリティーポリシーによって区別されます。
デフォルトで file-mac-profile プロパティーは設定されず、ゾーンには書き込み可能ルートデータセットがあります。
file-mac-profile のいくつかの値は、ゾーン内からのすべてまたは一部の実行時環境へのアクセスを制限します。none 以外のすべてのプロファイルでは、/var/pkg ディレクトリとその内容がゾーンの内部から読み取り専用になります。none MWAC セキュリティーポリシーは、未設定の MWAC セキュリティーポリシーと同等です。
次の MWAC 値は、ゾーン内からのすべてまたは一部の実行時環境へのアクセスを制限します。
カーネルゾーンの大域ゾーンを含む大域ゾーンに有効です。カーネルゾーンおよび非大域ゾーンの作成と破棄を許可します。
fixed-configuration と同等ですが、カーネルゾーンと非大域ゾーンを作成および破棄する機能を追加します。
flexible-configuration に似ていますが、dynamic-zones は、/etc ディレクトリ内のファイルに書き込みできません。
システム構成コンポーネントを格納するディレクトリを除く /var/* ディレクトリへの更新を許可します。
IPS パッケージ (新しいパッケージを含む) はインストールできません。
持続的に有効な SMF サービスは固定されます。
SMF マニフェストはデフォルトの場所から追加できません。
構成ファイルのロギングおよび監査はローカルに行うことができます。syslog および監査の構成は固定されます。
/etc/* ディレクトリ内のファイルの変更、ルートのホームディレクトリへの変更、/var/* ディレクトリへの更新を許可します。この構成は、Oracle Solaris 10 ガイドOracle Solaris のシステム管理 (Oracle Solaris コンテナ: 資源管理と Oracle Solaris ゾーン)に記述されている Oracle Solaris 10 native 疎ルートゾーンにもっとも近い機能を提供します。
IPS パッケージ (新しいパッケージを含む) はインストールできません。
持続的に有効な SMF サービスは固定されます。
SMF マニフェストはデフォルトの場所から追加できません。
構成ファイルのロギングおよび監査はローカルに行うことができます。syslog および監査の構成は変更できます。
IPS パッケージはインストールできません。
持続的に有効な SMF サービスは固定されます。
SMF マニフェストはデフォルトの場所から追加できません。
構成ファイルのロギングおよび監査は固定されます。データはリモートからのみロギングできます。
このプロファイルによる不変ゾーン内での NFS サーバーの実行はサポートされていません。fixed-configuration プロファイルを使用して NFS サーバーを実行する必要があります。
この例では、ゾーンセキュリティー権利プロファイルが割り当てられ、不変大域ゾーンを作成しています。このゾーン内で、ゾーン管理者はカーネルゾーンおよび非大域ゾーンを作成および破棄できます。それ以外の場合、ゾーンは不変です。
global$ zonecfg -z global set file-mac-profile=dynamic-zones
MWAC セキュリティーポリシーが設定され、不変ゾーンをリブートすると、ゾーンが self-assembly-complete マイルストーンに達するまで、一時的な読み取り/書き込みでブートし、その後読み取り専用モードでリブートします。
zonecfg add dataset コマンドによってゾーンに追加したデータセットは MWAC ポリシーの対象となりません。ゾーンは追加されたデータセットを完全に制御できます。プラットフォームのデータセットは表示されますが、ゾーンが読み取り/書き込みでブートされないかぎり、そのデータとプロパティーは読み取り専用です。
zonecfg add fs コマンドによってゾーンに追加したファイルシステムは MWAC ポリシーの対象となりません。ポリシーを保持するには、ファイルシステムを読み取り専用でマウントします。
不変ゾーンでは、そのサービスで必要とされる承認がある場合でも、デフォルトで SMF サービスを永続的に変更することはできません。サービスを有効または無効にするか、プロパティーの値を変更するには、–t (一時) オプションを使用する必要があり、ゾーンのリブート時に変更が元に戻されます。–t オプションを使用しない場合、「権限がありません」エラーメッセージが表示されます。
不変ゾーンのリブート間で保持されるサービスの変更を行うには、トラステッドパスドメインを使用した不変ゾーンの管理に説明されているとおり、トラステッドパスドメイン (TPD) で操作している必要があります。TPD で操作している場合、必要な承認を持つすべてのサービスに対して永続的な変更を行えます。
一部のサービスは、それらのメソッドによって起動されたプロセスが TPD で実行するように構成できます。trusted_path 属性が true に設定されているサービスは TPD で実行します。
![]() | 注意 - trusted_path を true に設定すると、システムの不変性が低下します。不変ゾーンを作成したときに必要としたセキュリティーが低下します。 |
特に、ゾーンの外部からアクセス可能なサービスの trusted_path を true に設定しないでください。具体的には、SSH などの対話型ログインサービスはトラステッドパス上にあってはなりません。
RAD API は Oracle Solaris 承認をチェックし、実行できることを制限するため、RAD を使用して不変ゾーンへのリモート管理アクセスを有効にする方法に説明されている rad:remote サービスはこの注意事項の例外です。rad:remote サービスは対話型シェルを提供せず、ホストの TPD に到達するためにセキュアトランスポートに対して、強力な認証および承認 (ユーザーの user_attr エントリの tpd=yes) を使用します。
puppet:agent サービスは上記の注意事項のもう 1 つの例外です。Puppet を使用してシステムを更新することは、対話型ログインによって更新するより信頼できます。puppet:master インスタンスはトラステッドパス上にある必要がないことに注意してください。
次の例に、サービスが TPD で実行するように、trusted_path の値を設定する方法を示します。
使用例 40 Puppet サービスのトラステッドパスへの追加TPD で実行するサービスに trusted_path が設定されているかどうかを確認します。
# svcprop -p method_context/trusted_path puppet:agent svcprop: Couldn't find property group `method_context/trusted_path' for instance `svc:/application/puppet:agent'.
上記のコマンドに示されているサービスは、trusted_path 属性が設定されていないため、TPD で実行していません。trusted_path の値が false であった場合も同じことが当てはまります。
puppet:agent サービスが TPD で実行するように構成するには、trusted_path を true に設定します。この属性は、このサービスに存在しないため、値に加えて属性タイプを指定する必要があります。属性の設定後、サービスのリフレッシュと再起動を行います。次のコマンドには、検証ステップが含まれます。
# svccfg -s puppet:agent svc:/application/puppet:agent> setprop method_context/trusted_path = boolean: true svc:/application/puppet:agent> listprop method_context/trusted_path method_context/trusted_path boolean true svc:/application/puppet:agent> refresh svc:/application/puppet:agent> restart svc:/application/puppet:agent> exit # svcprop -p method_context/trusted_path puppet:agent true
次の出力は、puppet:agent サービスによって起動された puppet プロセスに関する情報を示しています。TPD フラグの説明については、getpflags(2) のマニュアルページを参照してください。
$ svcs -p puppet:agent
STATE STIME FMRI
online 15:05:50 svc:/application/puppet:agent
15:05:50 7008 puppet
$ ppriv 7008
7008: /usr/ruby/2.1/bin/ruby /usr/sbin/puppet agent --logdest /var/log/puppet
flags = PRIV_PROC_TPD|PRIV_TPD_UNSAFE|PRIV_TPD_KILLABLE
E: all
I: basic
P: all
L: all