系统事件审计:监控与安全分析¶
在这篇文章中
确保 Linux 系统的安全性和稳定性不仅需要防范威胁,还必须能够检测和调查安全事件。**系统审计**本身并不阻止攻击,但它允许你记录入侵行为、识别其来源和影响范围,并收集证据以供分析。
大多数发行版中的关键审计工具是 auditd 守护进程。它跟踪内核调用(系统调用),记录用户和进程的操作,并将事件存储在结构化日志中。
auditd 的工作原理¶
审计系统通过**触发器**附加到内核,这些触发器在系统调用进入(entry)或退出(exit)时触发。规则决定了监控哪些调用、文件、用户或进程。所有捕获的事件都会写入 /var/log/audit/audit.log。
使用 auditd 你可以跟踪:
- 系统和服务的启动/停止
- 对关键文件的操作,如
/etc/passwd、/etc/shadow、SSH 配置等 - 文件权限、所有权或属性的更改
- 文件、目录和链接的创建/删除
- 文件系统挂载
- 网络连接和配置更改
- 特定用户或进程的操作
安装与组件¶
在 CentOS/RHEL 中,audit 包默认已安装。 在 Debian/Ubuntu 中,使用以下命令安装:
关键实用程序:
| 实用程序 | 用途 |
|---|---|
auditctl | 管理审计规则和状态(动态配置) |
ausearch | 按各种条件搜索日志(用户、文件、系统调用等) |
aureport | 生成摘要报告(按文件、用户、时间等) |
autrace | 跟踪进程的系统调用(类似于 strace,但与审计集成) |
守护进程配置位于 /etc/audit/auditd.conf(缓冲区、溢出行为、日志轮转等)。默认设置通常适用于大多数场景。
配置审计规则¶
可以通过 auditctl 动态设置规则,或在 /etc/audit/audit.rules 中静态设置。
基本语法:¶
-
事件列表:
task— 进程创建
entry/exit— 系统调用进入/退出(最常见)
user— 用户空间事件
exclude— 排除项 -
操作:
always— 记录事件
never— 忽略 -
示例:
# 跟踪 /etc 中的文件打开操作,涉及写入或属性更改
sudo auditctl -a task,always -S open -F dir=/etc -F auid>=1000 -F perm=wa
# 同上,但更简单且对文件/目录更有效
sudo auditctl -a task,always -S open -F dir=/etc -F perm=wa
# 特定文件
sudo auditctl -a task,always -F path=/etc/passwd -F perm=wa
备注
-p wa 过滤器表示*写入*和*属性*更改。
持久化规则 — 在 /etc/audit/audit.rules 中¶
格式与 auditctl 命令匹配,但不包含命令本身:
# 示例条目(每行一个)
-a task,always -S open -F dir=/etc -F perm=wa
-a task,always -S open -F path=/etc/passwd -F perm=wa
编辑文件后,应用更改:
日志分析¶
日志存储在 /var/log/audit/ 中。关键工具是 aureport 和 ausearch。
aureport — 摘要和报告¶
# 文件访问报告
sudo aureport -f
# 仅最近 10 分钟(人类可读名称)
sudo aureport -f -i --start recent
# 按文件汇总(每个文件被访问的次数)
sudo aureport -f --summary
# 特定时间段的报告
sudo aureport --start 08/20/2025 12:00 --end 08/20/2025 13:00 -f
# 便捷的时间标记:today, yesterday, this-week, recent, now
sudo aureport -f --start today --summary
搜索可疑访问的示例:
ausearch — 详细事件分析¶
# 按事件 ID(来自 aureport)
sudo ausearch -a 123456
# 按用户(UID)
sudo ausearch -ui 1001 -i
# 按可执行文件
sudo ausearch -x /usr/bin/sudo -i
# 按系统调用
sudo ausearch -sc openat -i
# 按服务(例如 cron)
sudo ausearch -tm cron -i
# 带时间限制
sudo ausearch --start 08/20/2025 12:00 --end 08/20/2025 13:00 -f /etc/passwd
备注
-i(或 --interpret)标志将 UID/GID 和系统调用代码替换为人类可读的名称。