bashをuid 0とは異なるeuidとして実行できますか?

bashをuid 0とは異なるeuidとして実行できますか?

コードを書いていますが、bashスクリプトにroot権限があることを確認したいと思います。他の人から見たすべてのコードは、$EUID == 0UID = 0とEUID> 0で他のプログラムを実行することが完全に可能です。私のコードは両方を確認してはいけませんか?それとも、このような(奇妙な)状況が発生しないようにbashに何かがありますか?

このようなことが起こるのを見たい人のために、以下は概念証明です。

[root@new-host bennett]# cp /bin/sleep .
[root@new-host bennett]# chown bennett sleep
[root@new-host bennett]# chmod 4755 sleep
[root@new-host bennett]# ll sleep 
-rwsr-xr-x. 1 bennett root 32188 Sep  9 02:38 sleep
[root@new-host bennett]# ./sleep 1000 &
[root@new-host bennett]# ps -e -o user= -o ruser= -o comm= | awk '$1 != $2'
bennett  root     sleep

質問を見てみましょう。どんな状況でもbashこれは可能ですか?(( $UID == 0 && $EUID > 0 ))他のプログラムは大丈夫です。

ベストアンサー1

例:

$ env UID=0 EUID=90 bash -c 'echo $UID $EUID'
0 90

上記は変数値のみを変更することに注意してください。これ実際UIDとEUIDは影響を受けません。

を使用する必要がありますid。たとえば、質問を参照してください。ルートでない場合にスクリプトが実行されないようにするにはどうすればよいですか? (「ルートとして実行されません!終了中...」と表示されます。)

スクリプトがset-uidビットを設定している場合(そしてこれらのスクリプトset-uidを実行するのはUnixの仕事です)、有効なユーザーIDも実際のIDとは異なります。この場合、UIDはスクリプトを呼び出すユーザーのUIDになり、EUIDはスクリプト所有者のUIDになります。

関連:シェルスクリプトでsetuid設定を許可する

おすすめ記事