需用ps、pgrep与systemd三类方法精准识别真实root权限进程:先用ps筛选UID=0进程并按PID倒序排列;再通过capsh解码CapEff字段或ps的capability列验证是否保留cap_sys_admin等关键能力;最后用systemd查看root服务单元及其继承权限的完整进程树。

在银河麒麟V10系统中,需精准识别以root用户身份运行且具备实际特权能力的进程,避免将仅以root名义启动但已降权(如drop privileges)或处于cap_drop状态的进程误判为高危项——这类进程虽显示UID=0,但内核能力集已被裁剪,无法执行敏感操作。
用ps命令筛选UID为0的实时进程
这是最基础、最快速的方法,适用于终端快速排查,不依赖额外工具。
执行命令:ps -eo pid,user,comm,args --sort=-pid | awk '$2 == "root" {print $0}'。
该命令强制按PID倒序排列,确保新创建的root进程始终出现在顶部;【注意:不能只用ps aux | grep root,会混入含root字符串的普通进程名,如“postgresql”或路径中的“/root/”】。
输出中第三列(comm)是进程主程序名,第四列(args)是完整启动参数,可用于判断是否为预期服务(如sshd、systemd-journald)还是可疑二进制。
用pgrep + ps组合验证真实权限上下文
某些进程虽以root启动,但通过setuid或capabilities机制主动放弃部分权限,仅靠UID无法反映其实际能力边界。
方法一:查所有root进程的cap_eff值
执行:for pid in $(pgrep -u root); do echo -n "$pid "; capsh --decode=$(grep CapEff /proc/$pid/status 2>/dev/null | awk '{print $2}') 2>/dev/null | grep -q "cap_sys_admin\|cap_sys_ptrace\|cap_dac_override" && echo "HIGH"; done | grep HIGH。
此命令遍历每个root进程,解码其CapEff字段,仅当存在cap_sys_admin等关键能力时才输出PID+HIGH标识——这才是真正具备系统级操作能力的进程。
方法二:快速定位未降权的守护进程
运行:ps -eo pid,user,comm,capability --sort=-pid | awk '$2=="root" && $4 !~ /0000000000000000/ {print $0}'。
capability列为全0表示已完全丢弃所有能力,非全0则说明仍保留部分特权,需人工比对是否合理。
通过systemd查看root服务单元及其派生进程树
systemd管理的服务若声明User=root,则其主进程及fork出的子进程默认继承UID与能力集,是最典型的root权限进程来源。
第一步:列出所有以root用户运行的active服务
systemctl --type=service --state=running --all | awk '$4 == "root" {print $1}' | xargs -r systemctl show -p MainPID,ExecStart --all 2>/dev/null。
第二步:对每个服务的MainPID展开进程树
取上步输出中的PID(如1234),执行:ps --forest -o pid,user,comm -g $(ps -o sid= -p 1234 2>/dev/null | xargs)。
该命令以服务主进程的会话ID(SID)为根,递归展示整个进程组,包括其fork出的worker线程、日志转发子进程等——【这些子进程虽未显式声明User=root,但因继承父进程凭据,同样属于root权限进程范畴】。
第三步:过滤掉systemd自身托管的临时进程
在结果中排除COMMAND列为systemd、dbus-daemon、systemd-journald的条目,它们是系统基础设施,非用户可控服务。

















