Auditd是Linux内核中一个强大的审计框架,能够详细记录系统中各类安全相关的操作行为,如文件访问、系统调用、用户命令和网络连接等。通过配置Auditd,您可以满足合规性要求、监控可疑活动、进行事后追溯和故障排查。
核心功能
文件和目录监控:监控指定文件或目录的访问、修改、执行和属性变更。
系统调用监控:跟踪所有或特定的系统调用,了解底层程序行为。
用户命令记录:记录用户在终端执行的所有命令。
网络访问监控:审计网络连接和数据包。
安全事件告警:记录身份验证失败、权限变更等关键安全事件。
生成审计报告:提供工具用于搜索、分析和生成审计报告。
前提条件
您已拥有一台运行Linux操作系统的ECS实例。本文以CentOS 7/8为例。
您已使用具有
root
权限的用户或sudo
权限的用户登录到该实例。
操作步骤
步骤一:安装并启动Audit服务
执行以下命令安装Audit软件包。
yum -y install audit audit-libs
启动并设置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
查看其内容。以下是关键配置项的说明:
指令 | 解释 |
| 定义审计日志文件的存放路径,默认为 |
| 定义审计日志的存储格式,默认为 |
| 定义日志写入磁盘的方式, |
| 定义保留的轮转日志文件数量。当日志文件达到 |
| 定义单个日志文件的最大大小(单位MB)。 |
| 当日志文件达到 |
2. 规则配置文件 (/etc/audit/rules.d/
)
Auditd的审计规则决定了要监控哪些事件。推荐将自定义规则写入/etc/audit/rules.d/
目录下的.rules
文件中。系统启动或重启Auditd服务时,会自动将此目录下所有.rules
文件合并到主规则文件/etc/audit/audit.rules
中。
Audit软件包在/usr/share/doc/audit/rules/
目录中提供了一些预置的合规性规则模板,您可以根据需要选用。
规则模板文件 | 说明 |
| 符合美国《国家工业安全计划操作手册》(NISPOM)要求的规则。 |
| 符合支付卡行业数据安全标准(PCI-DSS)v3.1要求的规则。 |
| 符合美国国防信息系统局(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
的常用选项:
选项 | 说明 |
| 列出当前所有审计规则。 |
| 删除所有当前的审计规则和监控。 |
| 从指定列表(list)中删除一条规则。 |
| (推荐) 添加对文件或目录的监控(watch)。这是一个高级语法的简化形式。 |
| 删除对指定文件或目录的监控。 |
| 指定监控的权限: |
| 为规则设置一个易于搜索的关键字(key),强烈推荐使用此选项。 |
| 在规则列表的末尾添加一条规则。例如 |
| 指定要监控的系统调用名称或编号。 |
| 定义规则字段,用于精确匹配条件。例如 |
通过命令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
中。推荐使用ausearch
和aureport
工具进行查询和分析。
1. 使用 ausearch
查询日志
ausearch
是一个强大的日志查询工具。
选项 | 说明 |
| 根据规则中设置的关键字(key)进行查询。 |
| 根据文件名查询相关事件。 |
| 根据命令名(例如 |
| 根据系统调用名称查询。 |
| 根据用户UID查询。 |
| 根据可执行文件的完整路径查询。 |
| 根据系统调用是否成功进行筛选。 |
| 查询指定开始时间之后的日志。 |
| 查询指定结束时间之前的日志。 |
| 将日志中的数字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"
字段 | 解释 |
| 记录的类型,例如 |
|
|
| 发生的系统调用名称或编号。可使用 |
| 系统调用是否成功 ( |
| 系统调用的退出码。对于成功的调用,通常是文件描述符;对于失败的调用,是负值的错误码。 |
| 触发事件的进程ID(PID)和其父进程ID(PPID)。 |
| 审计用户ID(Audit UID)。这是用户首次登录时分配的ID,即使之后切换用户(如 |
| 触发事件的有效用户ID和组ID。 |
| 触发事件的命令名(command name)。 |
| 触发事件的可执行文件的完整路径。 |
| 进程执行时的当前工作目录(current working directory)。 |
| 您在审计规则中设置的关键字,便于快速过滤和识别事件。 |