APUEから
- プロセスにスーパーユーザー権限がある場合、setuid関数は実際のユーザーID、有効なユーザーID、および保存されたset-user-IDをuidに設定します。
- プロセスにスーパーユーザー権限がないが、uidが実際のユーザーIDまたは保存されたset-user-IDと同じ場合、setuidは有効なユーザーIDのみをuidに設定します。実際のユーザーIDと保存されたセットユーザーIDは変更されません。
- どちらの条件も真でない場合、errno が EPERM に設定され、-1 が返されます。
「プロセスにスーパーユーザー権限があります」とはどういう意味ですか?
これは、プロセスの実際のユーザーIDが0、つまりルートであることを意味しますか?
これは、プロセスの有効なユーザーIDが0、つまりルートであることを意味しますか?
ありがとうございます。
答え1
POSIXでプロセスにスーパーユーザー権限がある場合効果的なユーザーIDは0です。
(一部のUnixスタイルシステムには他のメカニズムがあります。たとえば、基本的なアクセス制御システムも機能を考慮しているLinuxでは、root有効ユーザーとして実行されますが、機能がないため、あまりやらないsetuidバイナリを生成できます。setuid
マンページ.)
アプエ指定された動作説明setuid
。コンテキストはユーザーID設定形式で提供されます。exec
:実行可能ファイルにsetuid
このビットが設定されていて、そのファイルシステムが無効にされずにマウントされている場合、setuid
それを実行すると、exec
有効なユーザーがファイルの所有者であり、実際のユーザーと保存されたユーザーが呼び出し側のユーザーであるプロセスが作成されます。
有効なrootユーザーとして呼び出されると、setuid
すべてのユーザーIDが置き換えられます。それ以外の場合は、有効なIDのみが置き換えられます。これは最終的に混乱しています...この動作の理由はPOSIX仕様の理論的根拠に示されています。login
そして、su
キャンセルできない方法でユーザーIDを変更する機能が必要です。これを行う唯一の方法は、すべてのIDを変更することです。 ID。