APUEから
プログラムファイルを実行するとき、プロセスの実効ユーザーIDは通常実際のユーザーIDです。ただし、ファイルのモードワード(
st_mode
)にset-user-IDビットを設定することもできます。これは、「このファイルが実行されると、プロセスの有効なユーザーIDをファイル所有者(st_uid
)に設定します。」を意味します。 'たとえば、ファイル所有者がスーパーユーザーで、ファイルのset-user-IDビットが設定されている場合プログラムファイルがプロセスとして実行されると、スーパーユーザー権限があります。。これは、ファイルを実行しているプロセスの実際のユーザーIDに関係なく発生します。。たとえば、誰でも自分のパスワードを変更できるUNIXシステムプログラム(1)が
passwd
Set User IDプログラムです。これは、プログラムが通常、スーパーユーザーだけが書き込むことができるファイルであるパスワード/etc/passwd
ファイルに新しいパスワードを書き込むことを可能にするために必要です。/etc/shadow
他のユーザーに対してset-user-IDを実行するプロセスは、しばしば追加の権限を想定しているため、慎重に作成する必要があります。
プログラムファイルに設定されたユーザIDビットが設定されているものとする。
プロセスの有効なユーザーIDがファイル所有者に変更された場合、今後または後ろにカーネルは、ファイルアクセステストによってプロセスがファイルを実行できることを確認します。
「古い」の場合、プロセスの有効なユーザーIDが最初にファイルの所有者に変更されるので、カーネルはプロセスがファイルを実行できるかどうかを判断するために常にファイルアクセステストに合格しませんか?
「after」の場合、カーネルはファイルアクセステストによってプロセスがファイルを実行できると判断するため、プロセスにはファイル所有者と一致する有効なIDが必要であり、ファイルには許可ビットも設定されている必要があります。それでは、プロセスの有効なユーザーIDをファイル所有者に変更する必要があるのはなぜですか?
ありがとうございます。