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 字段、审计容器内的操作以及如何停用审计规则等内容。