Go to main content
Oracle® Solaris 11.3 でのユーザーとプロセスのセキュリティー保護

印刷ビューの終了

更新: 2016 年 11 月
 
 

プロセス権管理

Oracle Solaris でのプロセス権管理は、特権により実装されます。特権により、コマンド、ユーザー、役割、および特定のシステムリソースのレベルにプロセスを制限できます。特権は、システムに対するすべてのスーパーユーザー権限を 1 人のユーザーまたは 1 つのプロセスだけが持っている場合に伴うセキュリティーリスクを軽減します。プロセス権利とユーザー権利によって、従来のスーパーユーザーモデルの魅力的な代替モデルが提供されます。

従来、特権は権利を追加するために使用されました。ただし、setuid root プログラムの、特権を認識するプログラムへの変更など、特権を使用して権利を制限することもできます。また拡張特権ポリシーにより、管理者は指定の特権のみをファイルオブジェクト、ユーザー ID、またはポートで使用できるように許可できます。このきめ細かな特権割り当てでは、このようなリソースに対し基本特権以外のそのほかのすべての特権が拒否されます。

カーネルプロセスを保護する特権

特権とは、プロセスが操作を実行するために必要とする権利です。この権利はカーネルにおいて実効性があります。特権の基本セットの範囲内で動作するプログラムは、システムセキュリティーポリシーの範囲内で動作します。setuid root プログラムは、システムセキュリティーポリシーの範囲を超えて動作するプログラムの例です。特権を使用することで、プログラムは setuid root を呼び出さなくてすみます。

特権は、システム上で行える処理をエミュレートします。プログラムは、その実行に必要な最小限の特権で実行できます。たとえば、ファイルを操作するプログラムには、file_dac_write および file_flag_set 特権が必要になることがあります。プロセス上のこれらの特権により、root としてプログラムを実行する必要がなくなります。

これまでシステムは、特権モデルで導入されたユーザー権利およびプロセス権利の基本情報、つまり権利モデルに準拠していませんでした。逆に、システムはスーパーユーザーモデルを使用していました。スーパーユーザーモデルでは、プロセスは root またはユーザーとして実行されていました。ユーザープロセスは、ユーザーのディレクトリとファイルにだけ作用するように限定されました。root プロセスは、システム上の任意の場所にディレクトリとファイルを作成できました。ユーザーのディレクトリ以外の場所にディレクトリを作成する必要があるプロセスは、UID=0 を使用して (つまり root として) 実行されました。セキュリティーポリシーは、システムファイルを保護するのに、任意アクセス制御 (Discretionary Access Control、DAC) に依存していました。デバイスノードは、DAC によって保護されました。たとえば、グループ sys が所有しているデバイスをオープンできるのはこのグループのメンバーだけでした。

しかし、setuid プログラムやファイルアクセス権、管理アカウントなどは悪用される危険性があります。setuid プロセスに許可されているアクションは、このプロセスがその処理に必要な数を上回っています。setuid root プログラムが侵入者に攻撃された場合には、全権を有する root ユーザーとしてふるまわれてしまいます。同様に、root パスワードにアクセスできるユーザーは誰でもシステム全体に損害を与えかねません。

対照的に、特権付きポリシーを適用するシステムでは、ユーザー権利からroot 権利までの間が段階的です。あるユーザーに通常のユーザーの権利を超える動作を実行するための特権を付与したり、root の特権を root が現在所有している数より少ない数に制限したりできます。権利により、特権で実行されるコマンドを権利プロファイルとして分離し、これを 1 人のユーザーまたは 1 つの役割に割り当てることができます。表 1は、権利モデルが提供するユーザー権利と root 特権との間の段階を示しています。

権利モデルでは、スーパーユーザーモデルより高いレベルのセキュリティーが実現されます。プロセスから削除された特権が悪用される可能性はありません。プロセス特権は、弱点を突かれてアクセス権が取得される可能性がある DAC 保護だけの場合と比較して、重要なファイルとデバイスの保護を強化できます。

特権を使用することで、必要な権利しか持たないようにプログラムとプロセスを制限できます。最小特権が実装されたシステムでは、プロセスを取得した侵入者がアクセスできるのはそのプロセスに割り当てられた特権だけです。システムのほかの部分を攻撃することはできません。

特権の説明

特権は、それぞれの領域に基づいて論理的にグループ化されます。

  • FILE 特権 – 文字列 file で始まる特権は、ファイルシステムオブジェクトに対して作用します。たとえば、file_dac_write 特権は、ファイルへの書き込みの際に任意アクセス制御をオーバーライドします。

  • IPC 特権 – 文字列 ipc で始まる特権は、IPC オブジェクトアクセス制御をオーバーライドします。たとえば、ipc_dac_read 特権を使用すると、DAC によって保護されているリモート共有メモリーを読み取るプロセスが可能となります。

  • NET 特権 – 文字列 net で始まる特権は、特定のネットワーク機能へのアクセスを可能にします。たとえば、net_rawaccess 特権を使用すると、デバイスをネットワークに接続できます。

  • PROC 特権 – 文字列 proc で始まる特権は、プロセスがそれ自体の限定されたプロパティーを変更できるようにします。PROC 特権の中には、ごくわずかな効果しかない特権もあります。たとえば、proc_clock_highres 特権は、プロセスが高分解能タイマーを使用できます。

  • SYS特権 – 文字列 sys で始まる特権は、各種のシステムプロパティーに対する無制限のアクセス権をプロセスに付与します。たとえば、sys_linkdir 特権を使用すると、プロセスはディレクトリに対するハードリンクの確立と解除が行えます。

その他の論理グループには、CONTRACT、CPC、DAX、DTRACE、GRAPHICS、VIRT、WIN などがあります。

特権の中にはシステムに対する影響が少ないものもあれば、大きな影響を与えるものもあります。次の proc_taskid 特権の定義は、この特権の影響が小さいことを示しています。

proc_taskid
        Allows a process to assign a new task ID to the calling process.

net_rawaccess 特権の定義は、その影響が広範囲に及ぶことを示しています。

net_rawaccess
        Allows a process to have direct access to the network layer.

privileges(5) のマニュアルページに、各特権の説明が提供されています。特権の一覧表示も参照してください。

特権を使用したシステムにおける管理上の相違点

特権を持つシステムと特権を持たないシステムとでは、明白な違いがいくつかあります。次の表に相違点の一部を示します。

表 2  特権を持つシステムと特権を持たないシステムとの明白な違い
機能
特権なし
特権
デーモン
デーモンが root として実行されます。
デーモンが、ユーザー daemon として実行されます。
たとえば、デーモン lockd および rpcbind には限定された特権が割り当てられており、daemon として実行されます。
ログファイルの所有権
ログファイルは root によって所有されます。
ログファイルは、そのログファイルを作成する daemon によって所有されます。root ユーザーがこのファイルを所有することはありません。
エラーメッセージ
エラーメッセージでスーパーユーザーが言及されます。
たとえば、chroot: not superuser
エラーメッセージで特権の使用が言及されます。
たとえば、chroot エラーと同等のエラーメッセージは chroot: exec failed
setuid プログラム
プログラムは、通常のユーザーが実行を許可されていないタスクを完了するために setuid root を使用します。
多くの setuid root プログラムは、必要な特権のみで実行されます。
たとえば、コマンド auditikeadmipadmipsecconfpingtraceroute、および newtask は特権を使用します。
ファイルアクセス権
デバイスアクセス権は DAC によって制御されます。たとえば、グループ sys のメンバーは /dev/ip を開くことができます。
デバイスを開くことができるユーザーをファイルアクセス権 (DAC) が予測することはありません。デバイスは、DAC デバイスポリシーによって保護されます。
たとえば、/dev/ip ファイルには 666 アクセス権がありますが、デバイスを開くことができるのは適切な特権を持つプロセスだけです。
監査イベント
su コマンドの使用の監査によって、多くの管理機能がカバーされます。
特権の使用の監査によって、ほとんどの管理機能がカバーされます。cusa 監査クラスには、管理機能をモニターする監査イベントが含まれています。
プロセス
プロセスは、プロセス所有者の権利によって保護されます。
プロセスは特権によって保護されます。プロセス特権とプロセスフラグは、/proc/<pid>/priv ディレクトリ内の新しいエントリとして確認できます。
デバッグ
コアダンプ内で特権の言及はありません。
コアダンプの ELF 注記セクションで、NT_PRPRIV および NT_PRPRIVINFO の注記にプロセス特権とフラグについての情報が示されます。
ppriv コマンドやその他のコマンドでは、適切にサイズ設定されたセットの正しい数が示されます。これらのコマンドでは、ビットセット内のビットが特権名に正しく対応付けられます。