私はすでに実ユーザーIDシステム内のユーザーに固有の番号です。
私のシステムでは、私のuid
は
$ echo $UID
1014
$
他の 2 つの ID は何を表していますか?
そして、有効なユーザーIDそして保存されたユーザーIDそしてシステムのどこでそれらを使用するのでしょうか?
ベストアンサー1
実ユーザー ID と有効ユーザー ID を区別するのは、一時的に別のユーザーの ID を取得する必要があるかもしれないためです (ほとんどの場合、それは ですroot
が、任意のユーザーである可能性があります)。 ユーザー ID が 1 つしかない場合、後で元のユーザー ID に戻す方法はありません (自分の言葉を鵜呑みにし、 である場合は の権限root
を使用してroot
任意のユーザーに変更する以外)。
したがって、実ユーザー ID は、あなたが実際に誰であるか (プロセスを所有しているユーザー) であり、実効ユーザー ID は、オペレーティング システムが、あなたが何かを行うことを許可されているかどうかを判断するために参照するものです (ほとんどの場合、いくつか例外があります)。
ログインすると、ログイン シェルは実際のユーザー ID と有効なユーザー ID の両方を、パスワード ファイルによって提供されるのと同じ値 (実際のユーザー ID) に設定します。
さて、setuidプログラムを実行すると、別のユーザー(例root
)として実行されるだけでなく、setuidプログラムはまたあなたに代わって何かを行うはずです。これはどのように機能しますか?
setuid プログラムを実行すると、setuid であるため、実際の ID (プロセス所有者であるため) とファイル所有者の実効ユーザー ID (例root
) が設定されます。
プログラムはスーパーユーザー権限で必要な魔法をすべて実行し、ユーザーに代わって何かをしようとします。つまり、ユーザーが実行できないはずのことをしようとするのです。失敗するはずどうやってそれを実現するのでしょうか? 当然ですが、実効ユーザー ID を実際のユーザー ID に変更します。
カーネルが認識しているのはユーザーの ID だけなので、setuid プログラムでは元に戻す方法はありません。あなたのIDバンッ、君は死んだ。
これが保存された set-user ID の目的です。