Linux系统使用Audit工具配置操作审计

AuditdLinux内核中一个强大的审计框架,能够详细记录系统中各类安全相关的操作行为,如文件访问、系统调用、用户命令和网络连接等。通过配置Auditd,您可以满足合规性要求、监控可疑活动、进行事后追溯和故障排查。

核心功能

  • 文件和目录监控:监控指定文件或目录的访问、修改、执行和属性变更。

  • 系统调用监控:跟踪所有或特定的系统调用,了解底层程序行为。

  • 用户命令记录:记录用户在终端执行的所有命令。

  • 网络访问监控:审计网络连接和数据包。

  • 安全事件告警:记录身份验证失败、权限变更等关键安全事件。

  • 生成审计报告:提供工具用于搜索、分析和生成审计报告。

前提条件

  • 您已拥有一台运行Linux操作系统的ECS实例。本文以CentOS 7/8为例。

  • 您已使用具有root权限的用户或sudo权限的用户登录到该实例。

操作步骤

步骤一:安装并启动Audit服务

  1. 执行以下命令安装Audit软件包。

    yum -y install audit audit-libs
  2. 启动并设置Auditd服务开机自启。

    # 启动auditd服务
    systemctl start auditd
    # 设置开机自启
    systemctl enable auditd
    # 查看服务状态,确保其处于 active (running) 状态
    systemctl status auditd

步骤二:修改Audit配置文件

Audit的核心配置涉及服务守护进程配置 (auditd.conf) 和审计规则配置 (audit.rules)。默认的 auditd 配置应该适合于大多数环境。但是,如果您的环境必须满足严格的安全策略,建议根据需求对文件进行修改。

1. 服务配置文件

此文件控制Auditd守护进程的行为,例如日志文件的位置、大小和轮转策略。

您可以使用 cat /etc/audit/auditd.conf 查看其内容。以下是关键配置项的说明:

指令

解释

log_file

定义审计日志文件的存放路径,默认为 /var/log/audit/audit.log

log_format

定义审计日志的存储格式,默认为RAW

flush

定义日志写入磁盘的方式,incremental_async兼顾性能和数据及时性。

num_logs

定义保留的轮转日志文件数量。当日志文件达到max_log_file大小时会进行轮转。

max_log_file

定义单个日志文件的最大大小(单位MB)。

max_log_file_action

当日志文件达到max_log_file设置的限制后,采取什么处理方式。rotate表示轮转,keep_logs表示继续写入(不推荐),syslog表示写入系统日志,suspend表示暂停审计。

2. 规则配置文件 (/etc/audit/rules.d/)

Auditd的审计规则决定了要监控哪些事件。推荐将自定义规则写入/etc/audit/rules.d/目录下的.rules文件中。系统启动或重启Auditd服务时,会自动将此目录下所有.rules文件合并到主规则文件/etc/audit/audit.rules中。

Audit软件包在/usr/share/doc/audit/rules/目录中提供了一些预置的合规性规则模板,您可以根据需要选用。

规则模板文件

说明

nispom.rules

符合美国《国家工业安全计划操作手册》(NISPOM)要求的规则。

pci-dss-v31.rules

符合支付卡行业数据安全标准(PCI-DSS)v3.1要求的规则。

stig.rules

符合美国国防信息系统局(DISA)安全技术实施指南(STIG)要求的规则。

示例:应用预置规则 例如,您可以将NISPOM和网络相关的规则应用到您的系统中。

# 假设您的audit版本为2.8.5,请根据实际情况调整路径
cd /usr/share/doc/audit-2.8.5/rules/

# 将预置规则复制到规则目录
cp 30-nispom.rules /etc/audit/rules.d/
cp 71-networking.rules /etc/audit/rules.d/

# 重启auditd服务以加载新规则
systemctl restart auditd

步骤三:管理审计规则 (auditctl)

auditctl是用于实时管理审计规则的命令行工具。请注意,使用auditctl直接添加的规则在系统重启后会丢失。 要使规则永久生效,必须将其写入/etc/audit/rules.d/目录下的.rules文件中。

以下是auditctl的常用选项:

选项

说明

-l

列出当前所有审计规则。

-D

删除所有当前的审计规则和监控。

-d list,action

从指定列表(list)中删除一条规则。

-w path

(推荐) 添加对文件或目录的监控(watch)。这是一个高级语法的简化形式。

-W path

删除对指定文件或目录的监控。

-p [r,w,x,a]

指定监控的权限:r=读取,w=写入,x=执行,a=属性更改。

-k key

为规则设置一个易于搜索的关键字(key),强烈推荐使用此选项。

-a list,action

在规则列表的末尾添加一条规则。例如 -a always,exit 表示在系统调用退出时始终生成审计记录。

-S syscall

指定要监控的系统调用名称或编号。

-F field=value

定义规则字段,用于精确匹配条件。例如 -F path=/etc/shadow 或 -F auid>=1000

通过命令auditctl -h可以查看更多命令详情。

用法示例

  • 查看和删除规则

    # 查看所有规则
    auditctl -l
  • 监控重要文件的变更 以下两条命令效果相同,都用于监控/etc/shadow文件的写入和属性更改,并为该规则打上shadow-write的标签。

    # 方式一:使用-w简化语法
    auditctl -w /etc/shadow -p wa -k shadow-write
    
    # 方式二:使用-a标准语法
    auditctl -a always,exit -F path=/etc/shadow -F perm=wa -k shadow-write
    说明:要使此规则永久生效,请将 -w /etc/shadow -p wa -k shadow-write 这一行写入到例如 /etc/audit/rules.d/my-custom.rules 文件中,然后重启auditd服务。
  • 递归监控目录的变更 监控/etc/目录下所有文件和子目录的写入和属性更改。

    auditctl -w /etc/ -p wa -k etc-changes

步骤四:查询与解读审计日志

所有审计记录都保存在/var/log/audit/audit.log中。推荐使用ausearchaureport工具进行查询和分析。

1. 使用 ausearch 查询日志

ausearch是一个强大的日志查询工具。

选项

说明

-k, --key "key"

根据规则中设置的关键字(key)进行查询。

-f, --file "filename"

根据文件名查询相关事件。

-c, --comm "comm-name"

根据命令名(例如 vimuseradd)查询。

-sc, --syscall "syscall"

根据系统调用名称查询。

-ui, --uid "user-id"

根据用户UID查询。

-x, --executable "path"

根据可执行文件的完整路径查询。

-sv, --success "yes/no"

根据系统调用是否成功进行筛选。

-ts, --start [date] [time]

查询指定开始时间之后的日志。

-te, --end [date] [time]

查询指定结束时间之前的日志。

-i, --interpret

将日志中的数字ID(如UID, GID)转换为人类可读的名称。推荐始终使用此选项。

查询示例:

# 查询所有与关键字 "shadow-write" 相关的事件,并以可读格式显示
ausearch -i -k shadow-write

# 查询所有对 /etc/resolv.conf 文件的访问事件
ausearch -i -f /etc/resolv.conf

# 查询所有由 "vim" 命令产生的事件
ausearch -i -c vim

# 查询所有失败的系统调用事件
ausearch -i -sv no

2. 解读审计日志字段

一条审计日志通常由多个记录(record)组成,它们共享同一个时间戳和序列号。使用ausearch -i后,您会看到如下格式的日志,以下是关键字段的解释:

type=SYSCALL msg=audit(1678886400.123:456): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffc... items=1 ppid=1234 pid=5678 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 ... comm="touch" exe="/usr/bin/touch" key="etc-changes"

字段

解释

type

记录的类型,例如SYSCALL(系统调用)、USER_AUTH(用户认证)、PROCTITLE(进程标题)等。

msg

audit(timestamp:serial_number),事件的时间戳和序列号。

syscall

发生的系统调用名称或编号。可使用ausyscall --dump查看所有系统调用。

success

系统调用是否成功 (yes 或 no)。

exit

系统调用的退出码。对于成功的调用,通常是文件描述符;对于失败的调用,是负值的错误码。

pidppid

触发事件的进程ID(PID)和其父进程ID(PPID)。

auid

审计用户ID(Audit UID)。这是用户首次登录时分配的ID,即使之后切换用户(如su),该ID也不会改变,便于追踪原始用户。

uidgid

触发事件的有效用户ID和组ID。

comm

触发事件的命令名(command name)。

exe

触发事件的可执行文件的完整路径。

cwd

进程执行时的当前工作目录(current working directory)。

key

您在审计规则中设置的关键字,便于快速过滤和识别事件。

相关文档

系统审计