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 查看日志

ausearchauditd 的日志搜索工具,可以用来根据不同的条件查询审计日志。

  • 查看所有审计日志

    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 审计容器行为

使用现代的监控工具如 FalcoSysdig,它们提供了容器行为的细粒度监控,能捕获容器内的各种操作。

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

  1. 创建 logrotate 配置文件

    编辑 /etc/logrotate.d/audit 文件并添加如下内容:

    /var/log/audit/audit.log {
        weekly                # 每周轮换
        rotate 4              # 保留 4 个归档日志
        compress              # 压缩归档文件
        delaycompress         # 延迟压缩
        missingok             # 如果日志文件不存在,忽略错误
        notifempty            # 如果日志为空,不进行轮换
        create 0600 root root # 设置新日志文件的权限和所有者
    }
    
  2. 手动执行 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 定期清理审计日志。下面是一个示例,展示如何每天清空审计日志文件。

  1. 编辑 cron 任务

    sudo crontab -e
    
  2. 添加以下任务,每天凌晨清空审计日志:

    0 0 * * * /usr/bin/truncate -s 0 /var/log/audit/audit.log
    
  3. 删除归档日志(可选):

    如果你想删除归档的审计日志,可以添加:

    0 0 * * * /bin/rm -f /var/log/audit/audit.log-*
    

6.4 使用脚本清理审计日志

你还可以编写一个脚本来自动清理审计日志,并通过 cron 定期执行。

  1. 创建脚本 /usr/local/bin/clear_audit_logs.sh

    #!/bin/bash
    # 清空当前审计日志
    truncate -s 0 /var/log/audit/audit.log
    # 删除归档日志
    rm -f /var/log/audit/audit.log-*
    
  2. 使脚本可执行

    chmod +x /usr/local/bin/clear_audit_logs.sh
    
  3. 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 字段、审计容器内的操作以及如何停用审计规则等内容。

posted @ 2025-04-14 14:38  蒲公英PGY  阅读(476)  评论(0)    收藏  举报