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
この行:
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
は、内部コマンドが完了するのを待っているだけで、ルート自体として実行されていることを示しています。