如何在Linux利用Auditd监控系统中存在的孤儿进程及僵尸进程产生的异常日志

酷浩小哥_3396

酷浩小哥_3396

2026-05-12

283人浏览

原创

auditd不直接记录孤儿/僵尸进程,因其属内核正常状态转换,非需审计的安全事件;它仅捕获fork、exit、waitpid等显式系统调用,需通过监控异常kill、execve、exit_group及缺失waitpid等行为间接识别根源。

如何在linux利用auditd监控系统中存在的孤儿进程及僵尸进程产生的异常日志

auditd 本身不直接记录“孤儿进程”或“僵尸进程”的产生事件,因为这两类进程是内核调度与进程生命周期管理的自然结果,不属于需审计的安全行为。但你可以通过监控触发它们产生的关键系统调用和权限变更,间接识别异常模式,从而定位潜在问题根源。


为什么 auditd 不直接记录孤儿/僵尸进程

孤儿进程(父进程先退出)和僵尸进程(子进程退出后父进程未回收)是 Linux 进程模型的正常状态,内核不会为此生成审计事件。auditd 只捕获显式系统调用(如 fork、exit、waitpid、kill)及其参数,而非内核内部状态转换。


监控关键系统调用以发现异常线索

真正值得关注的是导致异常孤儿/僵尸泛滥的上游行为,例如:父进程意外崩溃、服务未正确处理 SIGCHLD、恶意进程暴力终止其他进程等。以下规则可帮你捕获这些信号:

  • 监控非预期的进程终止行为:
    auditctl -a always,exit -F arch=b64 -S kill -F a1=9 -k sigkill_suspicious
    记录所有发送 SIGKILL (9) 的调用,排查是否有人/脚本/守护进程在无故强杀进程(可能造成子进程变孤儿)
  • 跟踪高危 fork/exec 行为:
    auditctl -a always,exit -F arch=b64 -S execve -F uid!=0 -F a0=*sh* -k shell_spawn_unpriv
    捕获非 root 用户启动 shell 的行为,防止隐蔽子进程链绕过管控
  • 检测异常 exit 调用(尤其来自服务进程):
    auditctl -a always,exit -F arch=b64 -S exit_group -F pid=12345 -k app_exit_abnormal
    若已知某关键服务 PID,可临时监控其退出,确认是否因崩溃导致子进程失管

结合日志分析识别僵尸/孤儿相关异常模式

audit.log 中不会出现 “zombie” 或 “orphan” 字样,但可通过以下方式关联线索:

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 用 ausearch -m SYSCALL -sc fork -ts today | grep -E "(pid=[0-9]+.*ppid=[0-9]+)" 查看近期 fork 行为,再人工比对 ps 输出中是否存在大量 PPID=1 的进程(孤儿)或状态为 Z 的进程
  • 过滤高频失败的 wait 系统调用:
    ausearch -m SYSCALL -sc waitpid -sv no -i | awk '{print $1,$13}' | sort | uniq -c | sort -nr
    若某用户反复调用 waitpid 但失败(success=no),说明其程序可能未正确处理子进程退出,易积累僵尸
  • 关联 SIGCHLD 处理缺失:虽然 auditd 不审计信号接收,但若发现某进程频繁 exit_group 却无对应 waitpid 成功记录,可推断其父进程未响应子进程终止通知

辅助验证:用标准工具确认真实状态

auditd 提供线索,最终仍需靠系统命令确认:

  • 查僵尸进程:ps aux | awk '$8 ~ /Z/ {print}'
  • 查孤儿进程:ps -eo pid,ppid,state,comm | awk '$3=="S" && $2==1 {print}'(仅适用于被 init 收养的典型孤儿)
  • 查某进程的子进程树及状态:ps --forest -o pid,ppid,stat,comm $(pgrep -f "your_service")

真正的问题往往不在“有没有孤儿/僵尸”,而在于“为什么父进程不回收”或“为什么父进程提前挂了”。auditd 的价值,在于帮你锁定那个没调用 waitpid 的服务、那个被莫名 kill -9 的守护进程,或那个偷偷 fork 出百个子进程又不管理的脚本。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4290

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3633

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2873

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

7070

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6702

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3853

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3345

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3579

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习