各プロセスには、次の 4 種類の特権セットが割り当てられます。
許可セット (P)
有効セット (E)
継承可能セット (I)
exec(2) によって新しい別のプログラムが呼び出された際に、新しいプロセスに引き渡す特権のセットです。
新しいプログラムを呼び出すとき、継承可能特権セットは最初、現在のプログラムを呼び出したプロセスと同じ継承可能特権に設定されます。
I[new]=I[old] |
保存セット (S)
「保存セット (S)」には、最初は、「既存の継承可能セット」とファイルの「許容された特権」に共通する特権が設定されます。
S=(I[process] intersected by A) |
プロセスが execve(2) システムコールを使用してプログラムを実行すると、「許可セット (P)」と「有効セット (E)」は、プログラムファイルの「許容された特権 (A)」、「強制された特権 (F)」、プロセスの以前に存在していた「継承可能な特権 (I)」のすべてを集めた特権のセットになります。
P=E=(I[process] union F[program] restricted by A[program]) |
実行中のプログラムの「強制された特権」または「許容された特権」を参照せずに「継承可能な特権」を設定する利点については、「継承可能な特権が重要な理由 」を参照してください。
setuid(2) によって元の UID とは異なる実効 UID が設定された場合、「有効セット (E)」が「保存セット (S)」にコピーされ、「有効セット (E)」は消去されます。
S=E; E=0 |
プロセスが実効ユーザー ID を元の値に戻すと、「保存セット (S)」が「有効セット (E)」にコピーされ、特権の状態が復元されます。
E=S |