Go to main content

マニュアルページ セクション 7: 標準、環境、マクロ、文字セット、その他

印刷ビューの終了

更新: 2022年7月27日
 
 

sandboxing(7)

名前

sandboxing - 隔離された実行環境

説明

サンドボックスは、セキュリティーとリソースの分離の要件を指定するために使用できる、一意の名前が付けられたプロセス属性のセットです。それぞれのサンドボックス仕様は、プロジェクト名、ラベル、およびユーザー属性のセットで構成されます。

プロジェクト名がサンドボックス名と同じリソース管理プロパティーのセットは、サンドボックスに関連付けられています。使用可能なプロパティーの詳細は、resource-controls(7) のマニュアルページを参照してください。これらのリソース制御は、サンドボックス内で実行されているすべてのプロセスに適用されます。

それぞれのサンドボックスには、その他すべてのサンドボックスに階層的に関連する方法を指定する一意のラベルがあります。詳細は、labels(7) のマニュアルページを参照してください。サンドボックスで実行されるプロセスには、サンドボックスのラベルより優位である認可上限が必要です。プロセスのラベル付けの詳細は、clearance(7) のマニュアルページを参照してください。認可上限とラベルは、格付け名と 1 つ以上のコンパートメント名で構成されます。名前は、SMF サービスで使用される label_encodings ファイルで定義されます。

labeld:clearance

詳細は、label_encodings(5) のマニュアルページを参照してください。

sandboxing 機能には格付けの値が必要であり、コンパートメントは無関係な方法で割り当てられます。「Sandbox Labels v1.0」という特定のエンコード規則が使用されます。利便性と整合性のために、sandbox(1)init サブコマンドを使用して、準拠したラベルエンコードファイルを生成できます。これは、格付け、コンパートメント、およびその接頭辞の合計数を指定するオプションを提供します。一意性を確保するために、これらの接頭辞には、1 で始まる整数値が付加されます。格付けとコンパートメント名の最大数は 8 と 4096 です。デフォルトの接頭辞は Class および Sandbox です。格付け名 Public は、デフォルトの認可上限でもある最小ラベル用に予約されています。

これらの番号付き格付けとコンパートメントのビット値は無関係です。接頭辞 "All" は、格付けまたはコンパートメントの親子階層を指定するために使用されます。たとえば、ラベル Class1 SandboxAll を持つサンドボックスは、Class1 の格付けを共有するすべてのサンドボックスの親です。そのラベルは、その子のラベルより優位であると言えます。すべての子サンドボックスがほかの子と無関係であり、すべての親サンドボックスがほかの親と無関係です。最大値を使用する場合、8 つのそれぞれの親サンドボックスは 4096 個の子を持つことができ、合計で 32,776 のサンドボックスが可能です。サンドボックス内のプロセスは、その認可上限がターゲットオブジェクトのラベルより優位な場合にのみ、ほかのプロセス、ファイル、および共有メモリーセグメントにアクセスできます。特殊なプロセス認可上限である ClassAll SandboxAll は、すべてのサンドボックスラベルより優位です。

認可上限を作成するときには、特殊なコンパートメント SandboxAll を使用した場合を除き、Sandbox コンパートメント名は相互に排他的であるため結合できません。Class1Class2 のような格付け名は無関係で、サンドボックスラベルでは結合できませんが、ユーザー認可上限では結合できます。たとえば、次の認可上限を持つユーザーの場合、次のようになります。

Class2 Class1 SandboxAll

次のラベルを持つ 2 つの親サンドボックスの管理者にできます。

Class1 SandboxAll
Class2 SandboxAll

適切なプロセス資格を持つプロセスは、sandbox_enter を使用するか、sandbox コマンドを使用することで、認証なしか特権の使用なしでサンドボックスを起動できます。次のセキュリティーポリシーが適用されます。

  • プロセスの UID が、サンドボックスに関連付けられたユーザーの UID と等しい場合、親サンドボックスを起動でき、プロセス認可上限はサンドボックスのラベルより優位です。ADMIN_HIGH で実行されているルートプロセスも、親サンドボックスの起動を許可されます。起動時に、プロセス認可上限はサンドボックスのラベルに設定され、UID とプロジェクトはサンドボックスに設定されます。ユーザーに関連付けられたプライマリグループと補助グループもプロセスで設定されます。

  • プロセスがその親のサンドボックスで実行されている場合、子サンドボックスを起動できます。プロセス project は子サンドボックスのプロセスに設定されます。認可上限を下げるには、SandboxAll コンパートメントを、一意に番号付けされて子に関連付けられた Sandbox コンパートメントで置き換えます。

子サンドボックスを起動するときに、呼び出し元には、一時的に起動するか永続的に起動するかのオプションがあります。一時的なオプションを指定した場合、親サンドボックスの UID が保持されます。追加 (非サンドボックス) のコンパートメントが親サンドボックスに割り当てられている場合、オプションで新しいプロセス認可上限で保持できます。その後、呼び出し元は、sandbox_exit(3SANDBOX) 関数を使用して親サンドボックスに戻ることがあります。この関数は、親に関連付けられたプロセス属性を復元します。または、呼び出し元は、今回は永続オプションを指定して sandbox_enter(3SANDBOX) 関数を再度呼び出すことがあります。

永続オプションを選択した場合、呼び出し元は、その UID とホームディレクトリを子サンドボックスの UID とホームディレクトリに設定することを指定することもあります。UID が変更された場合、ユーザーに関連付けられたプライマリグループと補助グループもプロセスで設定されます。

親と子のサンドボックスは、ssh(1) のように PAM サービスを使用して起動することもできます。これは、サンドボックスに対応する UID、認可上限、プロジェクトのような属性がユーザーに割り当てられている場合に可能です。これは、sandbox_enter(3SANDBOX) 関数の呼び出しに似ていますが、最初にユーザーを認証する必要があります。さらに、ユーザーの監査 ID と監査マスクが設定され、操作は監査可能です。

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
security/sandboxing

関連項目

plabel(1), sandbox(1), getlabel(2), libtsol(3LIB), setproject(3PROJECT), sandbox_create(3SANDBOX), label_to_str(3TSOL), setclearance(3TSOL), setflabel(3TSOL), str_to_label(3TSOL), label_encodings(5), attributes(7), clearance(7), labels(7), resource-controls(7), projmod(8), sandboxadm(8)

History

Support for sandboxing was added in Oracle Solaris 11.4.0.