Linux中如何查找sudo启动root进程的原始用户?
如何找到sudo启动的root进程背后的原始用户
当你用sudo htop启动进程后,ps aux只能看到root身份的进程,这很正常——毕竟sudo就是用来提权的。不过要找到背后的原始用户,有几个实用的方法:
方法1:用进程树追溯父进程
sudo是从你的原始用户shell里启动的,所以通过进程树可以直接看到溯源关系:
- 运行
pstree -u htop,输出会显示进程链和对应的用户,比如:
这里括号里的bash(alice)───sudo(root)───htop(root)alice就是原始用户。 - 或者用
pstree -s htop,它会显示从根进程到htop的完整路径,找到倒数第二个bash进程,对应的用户就是原始用户。
方法2:读取进程的环境变量
sudo启动进程时,会把原始用户信息存在SUDO_USER环境变量里,你可以直接读取htop进程的环境文件:
- 先拿到htop的PID(比如你例子里的21187)
- 运行命令:
输出会是cat /proc/21187/environ | tr '\0' '\n' | grep SUDO_USERSUDO_USER=你的用户名,直接得到结果。
方法3:通过父进程ID反查
每个sudo进程都有一个父进程(就是你原始用户的shell),可以一步步反查:
- 先找到sudo进程的PID(比如你例子里的21186),然后看它的父进程ID(PPID):
ps -o ppid= -p 21186 - 用这个PPID查询对应的用户:
返回的就是原始用户的用户名。ps -o user= -p [刚才得到的PPID]
这几个方法都能快速定位到原始用户,其中方法2最直接,因为sudo已经帮你把信息存在环境变量里了~
内容的提问来源于stack exchange,提问作者hhy




