特権は、プロセスに与えられる権利です。特権があれば、Trusted Solaris で通常禁止されている操作を実行することができます。たとえば、通常は、適切なファイルアクセス権のないプロセスはデータファイルを開くことができません。けれども Trusted Solaris 環境では、file_dac_read 特権によって、UNIX のファイルアクセス権を無視する権限がプロセスに与えられるため、ファイルアクセス権がなくてもファイルを読み取ることができるようになります。
Trusted Solaris は、アプリケーションの実行可能ファイルに割り当てられた特権と、アプリケーションのプロセスまたは親プロセスに対応付けられた特権に基づいて、プロセスが実行できる特権を判定します。アプリケーションで特権を使用できるようにするには、次の 2 つ以上の特権セットにアプリケーションを割り当てます。どれに割り当てるかは、アプリケーションをどのようにユーザーに許可するかによって異なります。
許容セット - アプリケーションの実行可能ファイルに対応付けられる。「許容された特権」は、他の条件が満たされていることを前提に、アプリケーションで使用することができます (「プロセスが特権を取得する方法」を参照)。許容された特権セットは、プロセスが特権を使うことができるかどうかを決める一般的な判定要因であるため、ここから特権を除外すると、どのユーザーも、アプリケーションで、その特権を使うことができなくなります。許容された特権は、ファイルマネージャか、setfpriv コマンドを使用して指定します。許容された特権セットに現在含まれている特権を表示するには、getfpriv コマンドを使用します。
強制セット - アプリケーションの実行可能ファイルに対応付けられる。「強制された特権」は、アクセス権のあるユーザーがアプリケーションを実行すると、無条件に有効になります。強制された特権は、許容された特権と同様に、ファイルマネージャか、setfpriv コマンドで指定します。なお、許容セットに含まれていない特権を強制セットに追加することはできません。
継承可能セット - アプリケーションのプロセスに対応付けられる。「継承可能な特権」は、実行プロファイルでアプリケーションに割り当てられた特権と、親プロセスから継承された特権の組み合わせで、プロセスが起動すると有効になります。ただし、アプリケーションの許容された特権セットに含まれていることが前提です。継承可能な特権は、プロファイルマネージャを使用して、プロセスの継承可能セットに直接割り当てることができます。プロセスは、親プロセスからも継承可能な特権を取得できます。exec コマンドによって親プロセスから子プロセスが起動された場合は、子プロセスの許容セットによって、継承される特権が制限されます。
強制された特権は、子プロセスには継承されません。ただし、Trusted Solaris 環境用に特別にカスタマイズされたアプリケーションの場合は除きます。
プロセスが特権を使うためには、次の条件が満たされている必要があります。
その特権が実行可能ファイル (またはスクリプトインタプリタ) の許容された特権セットに含まれていること
アプリケーションにアクセスできるどのユーザーも特権を使用させたい場合は、その特権が実行可能ファイルの強制された特権セットに含まれていること
特定の実行プロファイルを持つユーザーまたは役割だけに特権を使用させたい場合は、その特権がその実行プロファイルの継承可能な特権セット、またはアプリケーションを起動できる親プロセスの継承可能な特権セットに含まれていること
Trusted Solaris には、80 以上の特権が用意されています。この特権をアプリケーションに適用すると、セキュリティポリシーを無効にすることができます。すべての特権を記載したリストについては、priv_desc(4) のマニュアルページを参照してください。特権は、次の表に示すカテゴリに分類されます。
表 1-6 特権カテゴリ
特権カテゴリ |
用途 |
カテゴリに該当する特権の例 |
---|---|---|
ユーザー ID、グループ ID に対するファイルシステムの制約、アクセス権、ラベル付け、所有権、ファイルの特権セットを無効にする |
file_dac_chown - プロセスにファイル所有者のユーザー ID の変更を許可する |
|
メッセージ待ち行列、セマフォセット、共用メモリ領域の制約を無効にする |
ipc_dac_read - アクセス権ビットまたは ACL でプロセス読み取りが許可されていないプロセスに、System V IPC メッセージ待ち行列、セマフォセット、共用メモリ領域などのプロセス読み取りを許可する |
|
予約ポートの割り当てやマルチレベルポートへの関連付け、ブロードキャストメッセージの送信、セキュリティ属性 (ラベル、メッセージの特権、終端のデフォルト値など) の指定などに関する制約を無効にする |
net_broadcast - プロセスに特定のネットワーク上でのブロードキャストパケットの送信を許可する |
|
監査、ラベル付け、隠しチャネル遅延、所有権、認可上限、ユーザー ID、グループ ID などに関する制約を無効にする |
proc_mac_read - 相手のプロセスの機密ラベルよりも優位でない機密ラベルを持つプロセスに、相手のプロセスの読み取りを許可する |
|
監査、ワークステーションのブート、ワークステーションの構成管理、コンソールの出力先変更、デバイス管理、ファイルシステム、複数ディレクトリへのハードリンクの作成、メッセージ待ち行列サイズの拡大、プロセス数の増大、ワークステーションのネットワーク構成、他者の読み込み可能なモジュール、ラベル変換などに関する制約を無効にする |
sys_boot - プロセスに Trusted Solaris ワークステーションの停止またはリブートを許可する |
|
カラーマップ、ウィンドウに対する読み取りと書き込み、入力デバイス、ラベル付け、フォントパス、ウィンドウ間でのデータの移動、X サーバーのリソース管理、ダイレクトグラフィックスアクセス (DGA) の X プロトコル拡張機能などに関する制約を書き換える |
win_selection - プロセスが、選択アービトレータの介入なしでウィンドウ間のデータの移動を要求できるようにする |
ファイルマネージャを使用して、許容された特権と強制された特権を実行ファイルに割り当てます。実際には、すべての特権を許容セットに含めておき、アプリケーションで使用してはならない特権があれば、それだけを除外するのが一般的です。強制された特権は、通常、アプリケーションに不可欠な場合だけ使用します。許容されているだけで強制されていない特権は、プロセスの継承可能セットに含まれている場合に限り使用できます。
ファイルマネージャのポップアップメニューから「特権 (Privileges)」を選択すると、選択したアプリケーションアイコンの「特権 (Privileges)」ダイアログボックスが表示されます (次の図を参照)。「特権 (Privileges)」ダイアログボックスでは、実行可能ファイルのパス、所有者、グループ、ファイルタイプ (実行可能ファイルまたはスクリプトファイル) を確認したり、特権セットの種類 (許容された特権または強制された特権) を選択することができます。また、除外する特権セットに特権を追加したり、逆に削除するための 2 つのリストフィールドも表示されます。「説明 (Description)」フィールドには、選択した特権の説明が表示されます。右側の 3 つの選択制御ボタンを使用すると、特権グループ全体に対する操作を指定できます。
継承可能な特権は、プロファイルマネージャを使用して実行プロファイル中の CDE アクションとコマンドに割り当てます。プロファイル中のアプリケーションの継承可能セットに含まれる特権は、対応する実行可能ファイルの許容セットにも含まれていないと使用できません。この特権は、アプリケーションのプロセスによって、他の継承可能な特権 (許容されている場合のみ) とともに、アプリケーションが起動する子プロセスに渡されます。
同じアプリケーションを、別の継承可能セットを持つ別のプロファイルに割り当てることも可能です。
次の表は、プロセスが特権を獲得する方法を、例を挙げて示したものです。この表では、あるアプリケーションを想定して、それに対する許容セット、強制セット、継承可能セットの例を示します。
表 1-7 アプリケーションに割り当てられた特権セット (例)
特権 |
許容セット |
強制セット |
継承可能セット |
---|---|---|---|
|
|
○ |
|
file_upgrade_sl |
|
|
○ |
○ |
○ |
○ |
|
win_fontpath |
○ |
○ |
○ |
win_colormap |
○ |
○ |
○ |
○ |
|
○ |
|
file_dac_read |
○ |
|
○ |
○ |
|
|
|
file_dac_execute |
○ |
|
|
この例からは、次のことがわかります。
許容セット - 許容セットに含まれない特権は使用できない (例 : file_mac_write、file_upgrade_sl) ため、強力な特権を許容セットに含めないようにして、不用意に使用されるのを防ぐことができる。許容されているだけで強制されていない特権は、同じアプリケーションのプロファイルの継承可能セットに含まれている場合だけ使用可能 (例 : file_dac_search、file_dac_read)。許容されているだけで強制されておらず、継承可能でもない特権は、使用できない (例 : file_chown、file_dac_execute)
強制セット - 強制された特権は、そのアプリケーションを実行できるユーザーであれば無条件に使用できる。ただし、許容されていない特権を強制することはできない (win_dga、win_fontpath、win_colormap は、許容された特権のうち強制されたもの)