Trusted Solaris 開発ガイド

継承可能セットのクリアと設定

fork によるプロセスまたは exec によるプログラムの継承可能セットに含めたい特権が継承可能セットに含まれていない場合は、fork(2) または exec(1) を呼び出す前に、親プロセスの継承可能セットをクリアして渡したい特権によって初期化します。

この例は、継承可能特権セットをクリアします。PRIV_SET パラメータは、継承可能特権セットをクリアします。ゼロ (0) パラメータは、特権 ID のパラメータリストが存在しないことを示します。

if (set_inheritable_priv(PRIV_SET, 0) == -1)
 	perror("Cannot clear inheritable privileges");

この呼び出し以前は、継承可能セットに次の特権が含まれます。

Inheritable = file_mac_write&file_setpriv$proc_setid

呼び出し後は、継承可能セットに次の特権が含まれます。

Inheritable = none

次の例は、継承可能特権セット内に proc_setid 特権を設定します。継承可能セットには、許可セット内のどの特権でも含めることができますが、このセットにそれ以外の特権を含めると Invalid Argument エラーが発生します。proc_setid 特権は、executable の許可セットに存在するため、継承可能セットに含めることができます。この特権は execfile の許容セットにも存在するため、「ファイルの実行」において、execfileexec に使用されるときに新しいプログラムで使用できます。

if (set_inheritable_priv(PRIV_ON, 1, PRIV_PROC_SETID) == -1)
 	perror("Cannot set proc_setid privilege in inheritable set");

このコールの後、継承可能セットは次の特権を含みます。

Inheritable = proc_setid