各 UNIX プロセスには、3 つの UID が関連付けられています。スーパーユーザー権限は UID=0 です。
実際の UID
これは、このプロセスを作成したユーザー/プロセスの UID です。実行中のプロセスに EUID=0 がある場合にのみ変更できます。
有効な UID
この UID は、特定のアクションを実行するプロセスの特権を評価するために使用されます。 EUID は、RUID に変更することも、EUID!=0 の場合は SUID に変更することもできます。 EUID=0 の場合、任意に変更できます。
保存された UID
set-UID ビットを設定して実行可能ファイルを実行すると、実行中のプロセスは、それを実行している実際のユーザーの実際の UID と、実行可能ファイルの所有者の有効で保存された UID で開始されます。その後、プロセスが setuid() または seteuid() を呼び出して有効な UID を変更した場合でも、保存された UID のおかげで元の特権を取り戻すことができます。 set-UID ビットが設定されていない場合、SUID が RUID になります。
実際の uid は、プロセスを起動したユーザーの ID です。
通常、有効な uid は実際の uid と同じです。次の場合にのみ異なります:
-
実行可能ファイルには set-uid ビットが設定されており、実行可能ファイルの所有者はそれを呼び出しているユーザーとは異なります
-
または set-uid プロセスが setuid(2) を呼び出した場合。プロセスがスーパーユーザー特権を持っている場合、setuid(2) への任意の引数が許可されます (ただし、すべての *-uid が同じ値に設定されます)。それ以外の場合、setuid(2) は実 uid または実効 uid または保存済み uid で呼び出すことができます。
保存された uid は、プロセスが開始されたときにプロセスが持っていた実効 uid であり、さまざまな set*uid システム コールへの引数として許可されるために保存されます。
有効な uid を変更するために setuid(2) を呼び出すスーパーユーザー権限を持つプロセスも、実際の uid と保存された uid を同じ値に変更することに注意してください。したがって、代わりに非 POSIX seteuid(2) を使用する必要があります。
上記のすべてが (実際の|有効な|保存された) グループ ID にも適用されます。
実 UID、実効 UID、保存 UID に加えて、監査が有効になっている Unix システムには、監査 UID もあります。プロセスの AUID は、プロセスを開始したユーザーを識別します。 setuid(2) または seteuid(2) によって変更されません。その意図は、プロセスを通じて一定のままであり、監査レコードにタグを付けるためにのみ使用されることです。したがって、ユーザーが特権シェルを実行すると (su または sudo を介して許可されたユーザーであっても)、そのプロセスの監査レコードはそのユーザーからタグ付けされます。