Sudo 命令以 root 而不是指定用户身份执行

AVS*_*AVS 7 linux bash sudo

sudo -EH -u someuser nohup sh check.sh &
Run Code Online (Sandbox Code Playgroud)

以上命令以 root 身份运行进程,而不是以 -u 标志指定的用户身份运行。

root      4056  2388  0 13:00 pts/4    00:00:00 sudo -EH -u someuser nohup sh /tmp/check.sh &
Run Code Online (Sandbox Code Playgroud)

下面是 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
Run Code Online (Sandbox Code Playgroud)

%sudmygroup 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
Run Code Online (Sandbox Code Playgroud)

Mic*_*mer 17

这一行:

root 4056 2388 0 13:00 pts/4 00:00:00 sudo -EH -u someuser nohup sh /tmp/check.sh
Run Code Online (Sandbox Code Playgroud)

正在报告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
Run Code Online (Sandbox Code Playgroud)

这表明该sh命令运行的SomeUser的,而sudo只是坐在那里等待内部命令完成,如根本身仍在运行。

  • 是的,它确实。“内部”命令 `sh` 以 someuser 身份运行,而“外部”命令 `sudo` 以 root 身份等待内部命令完成。 (3认同)