Oracle Solaris でのプロセス権管理は、特権により実装されます。特権により、コマンド、ユーザー、役割、および特定のシステムリソースのレベルにプロセスを制限できます。特権は、システムに対するすべてのスーパーユーザー権限を 1 人のユーザーまたは 1 つのプロセスだけが持っている場合に伴うセキュリティーリスクを軽減します。プロセス権利とユーザー権利によって、従来のスーパーユーザーモデルの魅力的な代替モデルが提供されます。
従来、特権は権利を追加するために使用されました。ただし、setuid root プログラムの、特権を認識するプログラムへの変更など、特権を使用して権利を制限することもできます。また拡張特権ポリシーにより、管理者は指定の特権のみをファイルオブジェクト、ユーザー ID、またはポートで使用できるように許可できます。このきめ細かな特権割り当てでは、このようなリソースに対し基本特権以外のそのほかのすべての特権が拒否されます。
拡張特権ポリシーと制限特権については、拡張特権ポリシーを使用した特権使用の制限を参照してください。
ユーザー権利については、ユーザー権管理を参照してください。
特権を管理する方法については、Oracle Solaris での権利の割り当てを参照してください。
特権に関する参照情報については、特権のリファレンスを参照してください。
特権とは、プロセスが操作を実行するために必要とする権利です。この権利はカーネルにおいて実効性があります。特権の基本セットの範囲内で動作するプログラムは、システムセキュリティーポリシーの範囲内で動作します。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) のマニュアルページに、各特権の説明が提供されています。特権の一覧表示も参照してください。
特権を持つシステムと特権を持たないシステムとでは、明白な違いがいくつかあります。次の表に相違点の一部を示します。
|