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
答案1
这行:
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 然后运行的命令正在执行为。
使用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 身份运行。