系统审计 (auditd)
auditd(Linux Audit Daemon)是 Linux 内核级别的安全审计框架,能够记录系统调用、文件访问、用户操作等关键事件。它是满足安全合规要求(如 PCI-DSS、HIPAA、等保)的重要工具。
auditd 基础
Section titled “auditd 基础”安装 auditd
Section titled “安装 auditd”大多数企业 Linux 发行版已预装 auditd,如未安装:
sudo dnf install audit audit-libs -y启动 auditd 服务
Section titled “启动 auditd 服务”sudo systemctl enable --now auditd查看服务状态:
sudo systemctl status auditdauditd 组件概览
Section titled “auditd 组件概览”| 组件 | 说明 |
|---|---|
auditd | 审计守护进程,负责将审计事件写入日志 |
auditctl | 审计规则管理工具(临时规则) |
ausearch | 审计日志搜索工具 |
aureport | 审计日志报告生成工具 |
/etc/audit/auditd.conf | auditd 服务配置文件 |
/etc/audit/rules.d/ | 持久化审计规则目录 |
/var/log/audit/audit.log | 审计日志文件 |
使用 auditctl 管理规则
Section titled “使用 auditctl 管理规则”auditctl 用于在运行时添加、删除和查看审计规则。通过 auditctl 添加的规则是临时的,重启后会丢失。
查看当前规则
Section titled “查看当前规则”sudo auditctl -l查看审计系统状态
Section titled “查看审计系统状态”sudo auditctl -s审计规则类型
Section titled “审计规则类型”auditd 支持三类规则:
- 文件系统规则(-w):监控文件或目录的访问
- 系统调用规则(-a):监控特定的系统调用
- 控制规则(-e, -b 等):控制审计系统行为
监控文件访问
Section titled “监控文件访问”文件系统规则语法
Section titled “文件系统规则语法”-w 路径 -p 权限 -k 关键字权限标志:
| 标志 | 说明 |
|---|---|
r | 读取 |
w | 写入 |
x | 执行 |
a | 属性变更 |
监控关键配置文件
Section titled “监控关键配置文件”# 监控 /etc/passwd 的所有修改sudo auditctl -w /etc/passwd -p wa -k identity
# 监控 /etc/shadow 的所有访问sudo auditctl -w /etc/shadow -p rwa -k identity
# 监控 /etc/sudoers 的修改sudo auditctl -w /etc/sudoers -p wa -k sudoers_change
# 监控 /etc/ssh/sshd_config 的修改sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config
# 监控 /etc/hosts 的修改sudo auditctl -w /etc/hosts -p wa -k hosts_change监控整个目录
Section titled “监控整个目录”# 监控 /etc/audit/ 目录下所有文件的修改sudo auditctl -w /etc/audit/ -p wa -k audit_config
# 监控 cron 配置sudo auditctl -w /etc/cron.d/ -p wa -k cron_changesudo auditctl -w /etc/crontab -p wa -k cron_change监控命令执行
Section titled “监控命令执行”系统调用规则语法
Section titled “系统调用规则语法”-a action,filter -S 系统调用 -F 字段=值 -k 关键字常用参数:
| 参数 | 说明 |
|---|---|
-a always,exit | 总是在系统调用退出时记录 |
-S | 指定系统调用名称或编号 |
-F arch=b64 | 64 位系统架构 |
-F uid=0 | 过滤用户 ID |
-F auid>=1000 | 过滤审计 UID(真实登录用户) |
-F auid!=-1 | 排除未登录用户(系统进程) |
-k | 关键字标签,用于后续搜索 |
监控特权命令
Section titled “监控特权命令”# 监控 sudo 使用sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k privilege_escalation
# 监控 su 使用sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/bin/su -k privilege_escalation
# 监控 passwd 命令sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/bin/passwd -k password_change监控用户管理命令
Section titled “监控用户管理命令”# 监控用户和组管理命令sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/useradd -k user_managementsudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/userdel -k user_managementsudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/usermod -k user_managementsudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/groupadd -k user_management监控文件删除操作
Section titled “监控文件删除操作”sudo auditctl -a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=-1 -k file_deletion监控网络连接
Section titled “监控网络连接”sudo auditctl -a always,exit -F arch=b64 -S connect -F auid>=1000 -F auid!=-1 -k network_connect# 删除所有临时规则sudo auditctl -D
# 删除特定文件监控规则sudo auditctl -W /etc/passwd -p wa -k identity持久化规则:/etc/audit/rules.d/
Section titled “持久化规则:/etc/audit/rules.d/”临时规则重启后会丢失。要使规则持久化,需要写入 /etc/audit/rules.d/ 目录下的文件。
创建规则文件
Section titled “创建规则文件”sudo vi /etc/audit/rules.d/custom.rules添加如下内容:
# 清除已有规则-D
# 设置审计缓冲区大小-b 8192
# 设置失败处理模式(0=静默,1=打印,2=panic)-f 1
# ========== 文件访问监控 ==========# 身份认证文件-w /etc/passwd -p wa -k identity-w /etc/shadow -p wa -k identity-w /etc/group -p wa -k identity-w /etc/gshadow -p wa -k identity
# SSH 配置-w /etc/ssh/sshd_config -p wa -k sshd_config-w /etc/ssh/sshd_config.d/ -p wa -k sshd_config
# 权限提升配置-w /etc/sudoers -p wa -k sudoers_change-w /etc/sudoers.d/ -p wa -k sudoers_change
# 审计配置自身-w /etc/audit/ -p wa -k audit_config-w /var/log/audit/ -p wa -k audit_log
# 网络配置-w /etc/hosts -p wa -k network_config-w /etc/sysconfig/network-scripts/ -p wa -k network_config
# 定时任务-w /etc/crontab -p wa -k cron_change-w /etc/cron.d/ -p wa -k cron_change-w /var/spool/cron/ -p wa -k cron_change
# ========== 命令执行监控 ==========# 特权命令-a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k privilege_escalation-a always,exit -F arch=b64 -S execve -F path=/usr/bin/su -k privilege_escalation
# 用户管理-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/useradd -k user_management-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/userdel -k user_management-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/usermod -k user_management
# 文件删除-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=-1 -k file_deletion
# 系统时间修改-a always,exit -F arch=b64 -S adjtimex -S settimeofday -S clock_settime -k time_change
# ========== 锁定规则(放在最后) ==========# 取消注释以下行可防止规则在运行时被修改(需要重启才能更改规则)# -e 2加载持久化规则
Section titled “加载持久化规则”sudo augenrules --load或重启 auditd:
sudo service auditd restart验证规则已加载:
sudo auditctl -l使用 ausearch 搜索审计日志
Section titled “使用 ausearch 搜索审计日志”ausearch 是审计日志的强大搜索工具。
按关键字搜索
Section titled “按关键字搜索”# 搜索身份文件变更事件sudo ausearch -k identity
# 搜索权限提升事件sudo ausearch -k privilege_escalation按时间范围搜索
Section titled “按时间范围搜索”# 搜索今天的事件sudo ausearch -k identity -ts today
# 搜索最近 1 小时的事件sudo ausearch -k identity -ts recent
# 搜索指定时间范围sudo ausearch -ts 03/24/2026 09:00:00 -te 03/24/2026 18:00:00# 搜索指定用户的操作sudo ausearch -ua 1000
# 搜索 root 用户的操作sudo ausearch -ua 0按事件类型搜索
Section titled “按事件类型搜索”# 搜索登录事件sudo ausearch -m USER_LOGIN
# 搜索认证事件sudo ausearch -m USER_AUTH
# 搜索系统调用事件sudo ausearch -m SYSCALL -k file_deletion解释审计日志
Section titled “解释审计日志”# 以可读格式输出sudo ausearch -k identity -i-i 参数会将 UID、GID、系统调用号等转换为可读的名称。
搜索特定文件的访问记录
Section titled “搜索特定文件的访问记录”sudo ausearch -f /etc/passwdsudo ausearch -f /etc/shadow -i使用 aureport 生成报告
Section titled “使用 aureport 生成报告”aureport 可以生成各类审计统计报告。
生成汇总报告
Section titled “生成汇总报告”sudo aureport --summary常用报告类型
Section titled “常用报告类型”# 认证报告sudo aureport -au
# 登录报告sudo aureport -l
# 失败的认证报告sudo aureport -au --failed
# 文件访问报告sudo aureport -f
# 可执行文件报告sudo aureport -x
# 用户报告sudo aureport -u
# 系统调用报告sudo aureport -s
# 异常事件报告sudo aureport --anomaly
# 按关键字生成报告sudo aureport -k指定时间范围的报告
Section titled “指定时间范围的报告”sudo aureport -au -ts todaysudo aureport -l -ts 03/24/2026 09:00:00 -te 03/24/2026 18:00:00组合 ausearch 和 aureport
Section titled “组合 ausearch 和 aureport”可以使用管道将 ausearch 的结果传给 aureport:
# 查看今天的失败登录详情sudo ausearch -m USER_LOGIN --failed -ts today | aureport -l
# 查看特定关键字的文件访问统计sudo ausearch -k identity | aureport -f --summaryauditd 配置文件
Section titled “auditd 配置文件”/etc/audit/auditd.conf 核心配置
Section titled “/etc/audit/auditd.conf 核心配置”sudo vi /etc/audit/auditd.conf关键参数:
# 日志文件路径log_file = /var/log/audit/audit.log
# 日志格式(RAW 或 ENRICHED)log_format = ENRICHED
# 单个日志文件最大大小(MB)max_log_file = 50
# 达到最大大小后的处理(ROTATE, SYSLOG, SUSPEND, KEEP_LOGS)max_log_file_action = ROTATE
# 保留的日志文件数量num_logs = 10
# 磁盘空间不足时的处理space_left = 75space_left_action = SYSLOGadmin_space_left = 50admin_space_left_action = SUSPENDdisk_full_action = SUSPENDdisk_error_action = SUSPEND完整实战:部署审计策略
Section titled “完整实战:部署审计策略”-
确认 auditd 已安装并运行:
Terminal window sudo dnf install audit -ysudo systemctl enable --now auditdsudo auditctl -s -
创建审计规则文件:
Terminal window sudo tee /etc/audit/rules.d/security.rules <<'EOF'-D-b 8192-f 1# 身份文件监控-w /etc/passwd -p wa -k identity-w /etc/shadow -p wa -k identity-w /etc/group -p wa -k identity-w /etc/sudoers -p wa -k sudoers_change-w /etc/sudoers.d/ -p wa -k sudoers_change# SSH 配置监控-w /etc/ssh/sshd_config -p wa -k sshd_config# 特权命令监控-a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k privilege_escalation-a always,exit -F arch=b64 -S execve -F path=/usr/bin/su -k privilege_escalation# 用户管理命令监控-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/useradd -k user_mgmt-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/userdel -k user_mgmt-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/usermod -k user_mgmt# 文件删除监控-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=-1 -k file_deletionEOF -
加载规则:
Terminal window sudo augenrules --loadsudo auditctl -l -
测试审计是否正常工作:
Terminal window # 修改一个被监控的文件sudo touch /etc/passwd# 搜索对应的审计记录sudo ausearch -k identity -ts recent -i -
生成每日审计报告:
Terminal window # 汇总报告sudo aureport --summary -ts today# 认证报告sudo aureport -au -ts today# 关键字报告sudo aureport -k -ts today -
可选:设置每日自动报告(添加 cron 任务):
sudo tee /etc/cron.daily/audit-report <<'EOF'#!/bin/bashaureport --summary -ts yesterday -te today > /var/log/audit/daily-report-$(date +%Y%m%d).txtaureport -au --failed -ts yesterday -te today >> /var/log/audit/daily-report-$(date +%Y%m%d).txtEOFsudo chmod +x /etc/cron.daily/audit-report
auditd 是 Linux 系统安全审计的基石。通过合理配置审计规则,可以全面追踪系统中的关键操作,为安全事件调查和合规审计提供可靠的数据支撑。