sudoはどのように機能しますか(setuidに加えて)?

sudoはどのように機能しますか(setuidに加えて)?

sudoバイナリが有効になっているため、起動時にルートに昇格しますsetuid。ただし、/bin/login正しい権限を付与しsudoて root 以外のユーザーから実行しようとすると、次のエラーが発生します。

No utmp entry.  You must exec "login" from the lowest level "sh"

最初の質問は、このエラーはどういう意味ですか? 2番目の質問は、sudo login同じユーザーとして実行するとなぜ機能するのですか?です。 aを使用してrootに昇格する以外に、setuuid他の機能は何ですかsudo?実行して終了dashする簡単なスクリプトを作成しましたが、権限のないユーザーのユーザー名が返されました。~/rootwhoami

$ ls -l ./root /usr/bin/sudo
-rwsr-xr-x 1 root root     29 Jul 15 02:40 ./root
-rwsr-xr-x 1 root root 157760 Jan 10  2016 /usr/bin/sudo

$ ./root
unprivileged user

だから、3つの質問があります。

  1. どのエラーが発生しますかlogin
  2. なぜlogin一緒に働くのですsudoか?
  3. 単純な実行スクリプトwhoamiが機能しないのはなぜですか?

ベストアンサー1

どのエラーが発生しますかlogin

ソースコードを検索すると、次のようなフレーズを見るloginことができます。

amroot = (getuid () == 0);
[...]
utent = get_current_utmp ();
/*
 * Be picky if run by normal users (possible if installed setuid
 * root), but not if run by root. This way it still allows logins
 * even if your getty is broken, or if something corrupts utmp,
 * but users must "exec login" which will use the existing utmp
 * entry (will not overwrite remote hostname).  --marekm
 */
if (!amroot && (NULL == utent)) {
     (void) puts (_("No utmp entry.  You must exec \"login\" from the lowest level \"sh\""));
     exit (1);
}

興味深い部分は最後のif節です。getuid()このエラーメッセージは、がゼロではなくutmpエントリがない場合に発生します。getuid()返品実際のユーザーID呼び出しプロセス。呼び出し時にsetuidフラグを設定すると、login実際のuidと有効なuidが異なります。loginソースコードの断片の注釈が示すように、この場合は「トリッキー」な作業を行う必要があります。失敗し、言及されたエラーが発生します。


なぜlogin一緒に働くのですsudoか?

sudosetuid ビット自体がセットされているので、euid と ruid は異なります。ただし、sudoはバイナリを実行し、実用login的で効果的なuidをターゲットユーザーに設定します。その後、再び失敗しません。


単純な実行スクリプトwhoamiが機能しないのはなぜですか?

#!スクリプトにshebang行()があるようです。何が起こるかは次のとおりです。カーネルは実行可能ファイル(あなたのテキストファイル)を開き、テキスト文書ではなくスクリプト名を最初の引数として使用してshebang行(または)#!に指定されたインタプリタを呼び出します。ほとんどの UNIX および Linux オペレーティングシステムはセキュリティ上の問題であるため、スクリプトの設定時に setuid ビットを無視します。/bin/bash/bin/sh

setuidを設定するスクリプトを想像してください。その後、攻撃者はそのスクリプトへのシンボリックリンクを作成し、そのスクリプトを呼び出してから、通訳者がシンボリックリンクの背後にあるスクリプトを開く前に自分のスクリプトへのシンボリックリンクを変更する可能性があります(これは邪悪なスクリプトです)。

おすすめ記事