web-dev-qa-db-ja.com

指定されたユーザーの代わりにrootとしてSudoコマンドが実行される

Sudo -EH -u someuser Nohup sh check.sh &

上記のコマンドは、-uフラグで指定されたユーザーの代わりにrootとしてプロセスを実行します。

root      4056  2388  0 13:00 pts/4    00:00:00 Sudo -EH -u someuser Nohup sh /tmp/check.sh &

以下はsudoersエントリです。

Cmnd_Alias Sudo_CMNDS = /bin/echo,/bin/ls,/bin/cat,/bin/vim,/bin/mv,/bin/cp,/bin/rm,/bin/mkdir,/bin/diff,/bin/id,/bin/hostname,/bin/grep,/bin/Nohup,/bin/locate,/bin/find,/bin/sed,/bin/awk,/usr/bin/whoami

%sudomygroup ALL =(someuser)NOPASSWD:SETENV:Sudo_CMNDS

@michael homerによって提案された追加出力

$ ps -ef|grep -i check 
root     14260 14090  0 13:20 pts/4    00:00:00 Sudo -HE -u someuser Nohup sh /tmp/check.sh
someuser    14261 14260  0 13:20 pts/4    00:00:00 sh /tmp/check.sh
6
AVS

この行:

root 4056 2388 0 13:00 pts/4 00:00:00 Sudo -EH -u someuser Nohup sh /tmp/check.sh

は、Sudo ...がrootユーザーとして実行されたことを報告しています。これは、Sudoバイナリがsetuidであり、予期されているために発生します(どのユーザーがSudoに実行を要求したかに関係なく)。あなたが見つけようとしているのは、どのユーザーSudoが実行したコマンドがどのユーザーとして実行されているかです。

Nohupを実行すると、実行を要求されたコマンドを実行するとすぐに遮断され、Nohupの出力にpsが残っていないため、後でgrepに出力するため、ps -ef|grep -i Nohupを使用すると出力は1行だけになりました。

代わりにcheck.shを検索すると、(少なくとも)2行の出力が表示されます。既に表示されている行と、sh /tmp/check.shだけの行です。

root        14260 14090  0 13:20 pts/4    00:00:00 Sudo -HE -u someuser Nohup sh /tmp/check.sh
someuser    14261 14260  0 13:20 pts/4    00:00:00 sh /tmp/check.sh

これは、shコマンドisがsomeuserとして実行されているのに対して、Sudoは、内部コマンドが完了するのを待っているだけで、ルート自体として実行されていることを示しています。

16
Michael Homer