ps -ef | grep nginx 仅显示含关键词的进程行,无法反映父子关系;应结合 pstree -p | grep nginx 查进程树、ps -eo pid,ppid,user,comm,args 检查PPID归属与启动参数,识别非nginx子进程或异常路径。

直接看 ps -ef | grep nginx 只能列出含 “nginx” 的进程行,但无法反映父子关系,容易漏掉伪装成合法子进程的恶意程序。真正有效的排查,得结合进程树结构和父进程归属来判断异常。
别只靠 grep,先理解 nginx 正常进程树结构
标准 nginx 启动后,进程树应为:
- 主进程(master):UID 通常是 root,PPID 是 1(init/systemd),CMD 含
nginx: master process - 工作进程(worker):UID 通常是 www-data 或 nginx,PPID 指向主进程 PID,CMD 含
nginx: worker process - 不会有三级或更深的子进程——nginx 本身不 fork 出 shell、curl、wget、bash 等工具进程
用 pstree 快速定位异常分支
执行 pstree -p | grep nginx,观察输出中 nginx 进程是否挂载了可疑子树。例如:
- 正常:
nginx(1234)─┬─nginx(1235) - 异常:
nginx(1234)─┬─sh(5678)───curl(5679)或nginx(1234)───bash(8901)───python3(8902)
只要看到 nginx 下挂了非 nginx 二进制的进程(尤其是解释型语言、下载工具、反向shell 类命令),基本可判定被注入或劫持。
用 ps -eo 精准查父进程与启动命令
运行以下命令,聚焦真实父子链和完整启动参数:
ps -eo pid,ppid,user,comm,args --sort=pid | grep -E "(nginx|<em>可疑PID</em>)"
-
comm显示进程调用名(防参数伪造),args显示完整命令行(含路径和参数) - 重点检查:worker 进程的 PPID 是否真为 master PID;args 中是否含异常路径(如
/tmp/.a、/dev/shm/bot)或 base64 载荷 - 若发现某个 “nginx” 进程 PPID 是 1 或其他服务(如 cron、sshd),而非 nginx master,则极可能是独立伪造进程
验证父进程是否可信
对疑似异常进程的 PPID,回溯检查其 UID 和 CMD:
- 执行
ps -o pid,user,comm,args -p <em>PPID值</em> - 若该父进程是 root 启动的合法 nginx master,但子进程 args 明显异常(如带
-c "rm -rf /"),说明 master 被利用 spawn 了恶意子进程 - 若父进程 UID 是普通用户、CMD 是
sh或bash,而它下面挂着 “nginx”,那整个链都是伪造的


















