Linux

Sudo 命令以 root 而不是指定使用者身份執行

  • April 29, 2019
sudo -EH -u someuser nohup sh check.sh &

上述命令以 root 身份執行程序,而不是 -u 標誌指定的使用者。

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 然後執行的命令正在執行的使用者。

Usingps -ef|grep -i nohup只給你那一行輸出,因為當nohup執行它時,它會在執行它被要求執行的命令時立即關閉,然後輸出中沒有nohup剩下的psgrep 供以後使用。

如果您改為搜尋check.sh,您將(至少)獲得兩行輸出:您已經看到的一行,以及另一行僅用於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命令正在以某個使用者身份執行,而sudo只是坐在那裡等待內部命令完成,仍然以 root 身份執行。

引用自:https://unix.stackexchange.com/questions/516113