Linux 审计日志管理与解析文档
Linux 审计日志管理与解析文档
本文将详细介绍如何在 Linux 系统中配置和查看审计规则,如何使用审计工具查看日志,如何解析 proctitle 字段,以及如何对审计规则进行管理和分析。
1. Linux 审计系统概述
Linux 的 审计系统(auditd)是一个内核级的安全审计框架,能够追踪系统事件、进程活动和用户行为。审计日志能够帮助系统管理员监控安全事件、跟踪非法访问和操作,并为合规性审计提供重要数据。
审计日志的常见用途:
- 跟踪进程启动、退出、文件操作等。
- 监控特定用户或进程的活动。
- 记录网络连接和访问控制事件。
- 防止数据泄露或恶意操作。
2. 配置审计规则
2.1 审计规则定义
审计规则通过 /etc/audit/rules.d/ 目录下的规则文件进行定义。每条规则定义了要监控的事件类型、相关路径、系统调用、关键字等。例如:
-a always,exit -F arch=b64 -S connect -k net-out
这条规则的含义是:
- 监控所有执行
connect系统调用的事件。 - 规则作用于64位架构(
arch=b64)。 - 使用关键字
net-out对该事件进行标记。
2.2 动态添加和删除规则
-
添加规则:通过
auditctl动态添加审计规则。例如,添加一个规则来监控所有对ssh服务的网络连接:auditctl -a always,exit -F arch=b64 -S connect -F dir=/usr/bin/ssh -k ssh-out -
删除规则:通过
auditctl -d删除特定规则。删除规则时需要提供完全相同的参数。例如:auditctl -d -a always,exit -F arch=b64 -S connect -F dir=/usr/bin/ssh -k ssh-out -
清空所有规则:使用
auditctl -D清空所有动态添加的规则:auditctl -D
2.3 永久化审计规则
永久性的审计规则存储在 /etc/audit/rules.d/ 目录中的规则文件中。编辑文件并添加规则,然后通过重启 auditd 服务使规则生效:
systemctl restart auditd
3. 查看审计日志
3.1 使用 ausearch 查看日志
ausearch 是 auditd 的日志搜索工具,可以用来根据不同的条件查询审计日志。
-
查看所有审计日志:
ausearch这将列出所有的审计事件。
-
根据规则关键字筛选日志:
使用
-k参数可以按规则的关键字过滤日志。例如,查看与net-out相关的日志:ausearch -k net-out -
根据时间筛选日志:
使用
-ts和-te参数设置时间范围:ausearch -k net-out -ts 2025-04-14 00:00:00 -te 2025-04-14 23:59:59这样就可以查看指定时间段内的相关日志。
-
查看特定事件的详细信息:
使用
-i参数将输出转换为人类可读格式:ausearch -k net-out -i -
查看配置更改日志:
查询审计规则的配置更改日志:
ausearch -m CONFIG_CHANGE
4. 解析 proctitle 字段
审计日志中的 proctitle 字段记录了进程启动时的命令行参数。它通常以16进制编码存储,需要解码为可读的文本。
4.1 提取 proctitle 字段
在审计日志中,proctitle 字段的内容通常为16进制字符串,例如:
type=PROCTITLE msg=audit(1744611164.339:15): proctitle=617564697463746C002D6100616C776179732C65786974002D46006172636800623634002D5300636F6E6E656374002D4600657865002F7573722F62696E2F737368002D6B007373682D6F7574
4.2 使用 xxd 解码
你可以使用 xxd 工具将16进制字符串转换为可读的命令行:
echo "617564697463746C002D6100616C776179732C65786974002D46006172636800623634002D5300636F6E6E656374002D4600657865002F7573722F62696E2F737368002D6B007373682D6F7574" | xxd -r -p
输出将是:
auditctl -a always,exit -F arch=b64 -S connect -k net-out /usr/bin/ssh -k ssh-out
4.3 手动解码
如果你不想使用脚本,可以手动提取 proctitle 字段的16进制字符串,并用 xxd -r -p 来进行解码。
5. 审计容器中的操作
默认情况下,auditd 无法直接监控 Docker 容器中的操作,因为容器内的进程是隔离的。要监控容器内的操作,可以考虑以下几种方法:
5.1 在宿主机上使用审计规则
你可以在宿主机上添加全局审计规则,监控所有的 connect 系统调用。例如:
auditctl -a always,exit -F arch=b64 -S connect -k net-out
这种方法能够监控宿主机和容器内的网络连接。
5.2 在容器内运行 auditd
你也可以在容器内运行 auditd,但是这需要容器以 privileged 模式启动,并且配置较为复杂。
5.3 使用 Sysdig 或 Falco 审计容器行为
使用现代的监控工具如 Falco 或 Sysdig,它们提供了容器行为的细粒度监控,能捕获容器内的各种操作。
6. 审计日志的清理与管理
6.1 清空审计日志
要清空当前的审计日志,可以使用以下命令:
-
清空当前日志文件:
truncate -s 0 /var/log/audit/audit.log -
删除归档日志文件:
如果你希望删除归档的审计日志(如
audit.log-1),可以执行:rm -f /var/log/audit/audit.log-*
6.2 使用 logrotate 进行日志轮换和清理
为了确保审计日志不会占用过多磁盘空间,并且能够定期清理,你可以配置 logrotate 工具来自动进行日志轮换、压缩和删除。
6.2.1 配置 logrotate
-
创建
logrotate配置文件:编辑
/etc/logrotate.d/audit文件并添加如下内容:/var/log/audit/audit.log { weekly # 每周轮换 rotate 4 # 保留 4 个归档日志 compress # 压缩归档文件 delaycompress # 延迟压缩 missingok # 如果日志文件不存在,忽略错误 notifempty # 如果日志为空,不进行轮换 create 0600 root root # 设置新日志文件的权限和所有者 } -
手动执行
logrotate(立即应用配置):sudo logrotate -f /etc/logrotate.d/audit
6.2.2 配置 logrotate 自动运行
logrotate 默认已经配置为通过 cron 定期执行。你可以检查 /etc/cron.daily/logrotate 文件,确保它每天都会执行。如果没有,可以手动添加:
sudo vim /etc/cron.daily/logrotate
内容如下:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
并确保它可执行:
sudo chmod +x /etc/cron.daily/logrotate
6.3 使用 Cron 定期清理审计日志
如果你不希望使用 logrotate,可以通过 cron 定期清理审计日志。下面是一个示例,展示如何每天清空审计日志文件。
-
编辑
cron任务:sudo crontab -e -
添加以下任务,每天凌晨清空审计日志:
0 0 * * * /usr/bin/truncate -s 0 /var/log/audit/audit.log -
删除归档日志(可选):
如果你想删除归档的审计日志,可以添加:
0 0 * * * /bin/rm -f /var/log/audit/audit.log-*
6.4 使用脚本清理审计日志
你还可以编写一个脚本来自动清理审计日志,并通过 cron 定期执行。
-
创建脚本
/usr/local/bin/clear_audit_logs.sh:#!/bin/bash # 清空当前审计日志 truncate -s 0 /var/log/audit/audit.log # 删除归档日志 rm -f /var/log/audit/audit.log-* -
使脚本可执行:
chmod +x /usr/local/bin/clear_audit_logs.sh -
在
cron中添加任务:0 0 * * * /usr/local/bin/clear_audit_logs.sh
7. 停用审计规则
7.1 查看已启用的审计规则
可以使用以下命令查看当前所有启用的审计规则:
auditctl -l
7.2 停用单条审计规则
要停用特定的审计规则,可以使用 auditctl -d 删除该规则:
auditctl -d -a always,exit -F arch=b64 -S connect -k net-out
7.3 停用所有审计规则
要清空所有当前的审计规则,可以使用:
auditctl -D
7.4 永久停用规则
如果你需要永久停用某些规则,可以编辑 /etc/audit/rules.d/ 中的规则文件,删除相关规则,并重新启动 auditd 服务:
systemctl restart auditd
总结
Linux 审计系统 (auditd) 提供了强大的日志记录和审计功能,能够帮助管理员追踪系统事件、监控用户和进程活动。本文介绍了如何配置审计规则、查看审计日志、解析 proctitle 字段、审计容器内的操作以及如何停用审计规则等内容。

浙公网安备 33010602011771号