見ようpasswdおよびgpasswdプログラムのソースコード。これらのツールは、実行を正常に完了するためにゼロに設定された有効なUIDを確認します。しかし、私はC愚かなノルムで、プロセスがUID == 0で実行されていることを確認するコード行を見つけることができません。どんなアドバイスや解決策にも感謝します。
答え1
「shadow-utils」の実装に言及している場合は、passwd
テストを見つけることができます。ここ:
/*
* The program behaves differently when executed by root than when
* executed by a normal user.
*/
amroot = (getuid () == 0);
では、gpasswd
テストは次の2つのステップで定義されます。UIDが保存されました:
/*
* Make a note of whether or not this command was invoked by root.
* This will be used to bypass certain checks later on. Also, set
* the real user ID to match the effective user ID. This will
* prevent the invoker from issuing signals which would interfere
* with this command.
*/
bywho = getuid ();
それからamroot
巨視的:
/* Indicate if gpasswd was called by root */
#define amroot (0 == bywho)