Skip to content

系统事件审计:监控与安全分析

在这篇文章中

确保 Linux 系统的安全性和稳定性不仅需要防范威胁,还必须能够检测和调查安全事件。**系统审计**本身并不阻止攻击,但它允许你记录入侵行为、识别其来源和影响范围,并收集证据以供分析。

大多数发行版中的关键审计工具是 auditd 守护进程。它跟踪内核调用(系统调用),记录用户和进程的操作,并将事件存储在结构化日志中。

auditd 的工作原理

审计系统通过**触发器**附加到内核,这些触发器在系统调用进入(entry)或退出(exit)时触发。规则决定了监控哪些调用、文件、用户或进程。所有捕获的事件都会写入 /var/log/audit/audit.log

使用 auditd 你可以跟踪:

  • 系统和服务的启动/停止
  • 对关键文件的操作,如 /etc/passwd/etc/shadow、SSH 配置等
  • 文件权限、所有权或属性的更改
  • 文件、目录和链接的创建/删除
  • 文件系统挂载
  • 网络连接和配置更改
  • 特定用户或进程的操作

安装与组件

CentOS/RHEL 中,audit 包默认已安装。 在 Debian/Ubuntu 中,使用以下命令安装:

sudo apt-get install auditd

关键实用程序:

实用程序 用途
auditctl 管理审计规则和状态(动态配置)
ausearch 按各种条件搜索日志(用户、文件、系统调用等)
aureport 生成摘要报告(按文件、用户、时间等)
autrace 跟踪进程的系统调用(类似于 strace,但与审计集成)

守护进程配置位于 /etc/audit/auditd.conf(缓冲区、溢出行为、日志轮转等)。默认设置通常适用于大多数场景。

配置审计规则

可以通过 auditctl 动态设置规则,或在 /etc/audit/audit.rules 中静态设置。

基本语法:

sudo auditctl -a <list>,<action> -S <syscall> -F <filter>
  • 事件列表:
    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

编辑文件后,应用更改:

sudo systemctl restart auditd

日志分析

日志存储在 /var/log/audit/ 中。关键工具是 aureportausearch

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

搜索可疑访问的示例:

sudo aureport -f -i --start today | grep /etc/passwd

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 和系统调用代码替换为人类可读的名称。

question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×