Trusted Solaris 開発ガイド

プロセス特権セット

実行プロセスは、ファイルセットの内容と呼び出しプロセスから継承されるあらゆる特権に基づくアルゴリズムから計算されるプロセス特権セットを持ちます。プロセス特権セットには、継承可能な特権セット、保存された特権セット、許可された特権セット、有効な特権セットがあります。

継承可能な特権セット

親プロセスから受け取った特権がある場合、それらの特権は継承可能な特権セット (以下、継承可能セット) に含まれます。プロセスは、exec(1) で新しいプログラムを実行するときや、fork(2) で新しいプロセスを実行するときに継承可能セットを渡します。新しいプログラムやプロセスの継承可能セットは、常に呼び出しプロセスの継承可能セットと同じものになります。新しいプログラムやプロセスが継承された特権を使用できるのは、その特権が実行可能ファイルの許容セット内にも存在する場合にかぎります。ただし、別の新しいプログラムまたはプロセスにすべての継承可能な特権が渡されます。プログラムは、fork()exec() に先行して、その継承可能セットをクリアし、許可セット内の特権をどれでも継承可能セットに加えることができます。

システム管理者は、継承可能セットを実行プロファイル内の CDE アクションやコマンドに割り当てることができます。特権は、実行プロファイルが割り当てられたユーザーまたは役割が CDE アクションを開始するとき、またはプロファイルシェルからコマンドを実行するときに継承されます。


注 -

強制された特権がプロセスの許可セット内に存在する場合、そのプロセスはプロセス自体の継承可能セットに強制された特権を設定し、その強制された特権を新しいプロセスまたはプログラムに渡すことができます。


保存セット

保存されたセット (以下、保存セット) は、プロセスに対して使用が許容されている継承された特権のコピーです。保存セットは、許容セットによって制限された継承可能セットと同じものになります。許容セットにも存在する継承可能セット内の特権は、保存セットに置かれます。保存セットを変更するインタフェースはありません。

プログラムは、その保存セットを照会して、元の特権を確認できます。特権が保存セットに存在する場合、プログラムが起動されるとその特権は継承されます。特権が保存セットに存在しない場合、プログラムが起動されるとその特権は強制されます。

通常のユーザー (強制された特権) によって開始されたプロセスはセキュリティ関連処理のための動作がワークステーションの範囲に制限される場合があります。一方、管理役割のある承認を受けたユーザー (継承された特権) によって開始されたプロセスは、同じセキュリティ関連処理を行うためにより広く、ネットワークの範囲で動作する場合があります。

許可セット

許可された特権セット (以下、許可セット) には、プロセスが使用できる強制された特権と継承された特権が含まれます。許可セットは、強制セットと、許容セットによって制限される継承可能セットを合わせたものです。許容セットにも存在する継承可能セット内の特権は、強制セットと結合され、許可セット内に置かれます。特権プロセスは、ゼロではない許可セットを使用したプロセスです。

特権は許可セットから削除できますが、追加はできません。許可された特権がいったん削除されると、元に戻すことも、継承可能セットに加えることもできません。また、許可セットから削除される前にその特権が継承可能セットに加えられている場合には、継承可能セットからも削除されます。

セキュリティ上の予防手段として、許可セットからプログラムが使用する可能性のない特権を削除できます。それにより、実行可能ファイルに不正に割り当てられたか、誤って継承された許容特権をプログラムが使用することはありません。

有効セット

有効特権とは、プロセスが 1 つのセキュリティ関連処理のために使用する許可された特権を意味します。デフォルトでは、有効な特権セット (以下、有効セット) は、初めは許可セットと同じです。しかし、プログラムは、特権のブラケット化を行うために、実行されるとすぐに有効セットをオフにする必要があります。

特権のブラケット化とは、有効な特権セットをオフにしたあと、一定のセキュリティ関連処理に必要な特権だけをオン (有効) にし、不要になった時点ですぐにそれらの特権をオフにすることを言います。「有効な特権のブラケット化」を参照してください。

ユーザー ID の変更

setuid(2)setreuid(2)、または seteuid(2) システムコールが呼び出されると、有効な特権セットが保存セットにコピーされ、有効セットはクリアされます。有効セットが必要な場合は、保存セットからコピーして戻すか、戻す必要のある有効な特権をオンにします。元の特権を確認するなどの理由で最初の保存セットが必要な場合は、初めにテストをしておくか、保存セットをコピーします。

ユーザー ID の変更が行われている間は初めの呼び出し元のプロセスに与えられた特権をプロセスは使用できないという原則に基づいて、有効セットはクリアされます。この時点でも、setuid プログラムは、許可セットの特権を有効セットに入れることによって特権を処理できます。