Linux
Sudo 命令以 root 而不是指定使用者身份執行
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 然後執行的命令正在執行的使用者。Using
ps -ef|grep -i nohup
只給你那一行輸出,因為當nohup
執行它時,它會在執行它被要求執行的命令時立即關閉,然後輸出中沒有nohup
剩下的ps
grep 供以後使用。如果您改為搜尋
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 身份執行。