私はすでに実際のユーザーIDを知っています。これは、システム内のユーザーの一意の番号です。私のシステムでは、私のuidは
$ echo $UID
1014
$
他の2つのIDは何を表していますか。また、有効なユーザーIDと保存されたユーザーIDの使用と、システム内での使用場所は何ですか。
別のユーザーのIDを一時的に取得する必要がある場合があるため、実際のユーザーIDと有効なユーザーIDは区別されます(ほとんどの場合、root
になりますが、どのユーザーでもかまいません)。ユーザーIDが1つしかない場合、後で元のユーザーIDに戻す方法はありません(Wordを当然と見なす場合、およびroot
の場合はroot
の権限を使用します)任意のユーザーに変更します)。
したがって、実際のユーザーIDはあなたが本当に誰であるか(プロセスを所有している人)であり、有効なユーザーIDはオペレーティングシステムがあなたが何かを行うことができるかどうかを決定するために見るものです(ほとんどの場合、いくつかの例外があります)。
ログインすると、ログインシェルは、実際のユーザーIDと有効なユーザーIDの両方を、パスワードファイルで指定されたものと同じ値(実際のユーザーID)に設定します。
現在、setuidプログラムを実行し、別のユーザー(たとえばroot
)として実行することに加えて、setuidプログラムはalsoに代わって何かを行うことになっています。これはどのように作動しますか?
setuidプログラムを実行すると、setuidであるため、実際のID(プロセス所有者であるため)とファイル所有者の有効なユーザーID(たとえばroot
)を取得します。
このプログラムは、スーパーユーザー特権を使用して必要な魔法を実行し、ユーザーに代わって何かを実行したいと考えています。つまり、できないはずのことをしようとすると失敗するはずですになります。どうやってそれをしますか?まあ、明らかに、その実効ユーザーIDを実際のユーザーIDに変更することによって!
カーネルはすべてあなたのIDと... あなたのIDを知っているので、そのsetuidプログラムには元に戻す方法がありません。バング、あなたは死んでいる。
これは、保存されたset-user idの目的です。