setuid
私はこのドリルがどのように機能するのか、どのように機能するのかに関する多くの質問と回答を読んで理解しているsudo
と思います。
しかし、sudoを介してプログラムを実行すると何が起こるのかわかりません。プログラム自体でsetuid
ビットを設定した場合。この質問は、次の例で最もよく説明されています。
そのシステムにはというユーザーがいますuser1
。ユーザーが他のユーザーとしてプログラムを実行できるsudo
ように、システムが正しくインストールおよび構成されています。また、合計ビットを所有して設定するroot
プログラムもあります。/usr/bin/exampleprog
root:wheel
setuid
setgid
root@morn ~ # dir /usr/bin/exampleprog
-rwsr-sr-x 1 root wheel 92K 2017-11-16 23:42 /usr/bin/exampleprog
今ログインしましたrootユーザーとしてそして、次のコマンドを実行します。
root@morn ~ # sudo -u user1 /usr/bin/exampleprog
それではどうなりますか?exampleprog
rootとして実行されていますかuser1
(与えられたオプションを使用して期待どおりにsudo
)、またはrootとして実行されていますか(実行ファイルがルート所有であり、対応するsetuid
ビットが設定されているため)。
物事をより複雑にするためにも/usr/bin/wrapper
属する追加のプログラムがありますが、root:wheel
いいえそしてsetuid
場所setgid
:
root@morn ~ # dir /usr/bin/wrapper
-rwxr-xr-x 1 root wheel 15K 2017-11-16 23:42 /usr/bin/wrapper
プログラムが実行されるwrapper
と、ある時点で実行(生成)されます/usr/bin/exampleprog
。
次に、次を実行します。
root@morn ~ # sudo -u user1 /usr/bin/wrapper
wrapper
作成されると、後者は次に実行されexampleprog
ますか?user1
root
ベストアンサー1
id
プログラムをどこかにコピーし、権限を変更して試してみることができます。これにより、exampleprog
ルートの有効なuidと対応する実際のuidが表示されますuser1
。
user1
ログインして以下を実行すると、何が起こるかを考えてみてくださいexampleprog
。後者は suid root なので、ルートの有効な uid として実行したいと思います。でプログラムを実行する場合も同様ですsudo
。