auditd:Linux 系统审计日志,记录谁动了你的服务器

auditd:Linux 系统审计日志,记录谁动了你的服务器

服务器被入侵后,管理员面临的第一个问题往往不是"怎么修复",而是"到底发生了什么"------攻击者登录了哪个账号?修改了哪些文件?执行了什么命令?没有完善的审计日志,这些问题无从回答。auditd(Linux Audit Daemon)是 Linux 内核内置的审计子系统的用户空间组件,它在内核级别拦截系统调用,记录文件访问、用户登录、权限提升、命令执行等关键事件,生成不可篡改的审计日志,是服务器安全合规(PCI DSS、等保、CIS Benchmark)的核心组件。

本文将从安装配置到规则编写,带你全面掌握 auditd 的使用,让"谁动了你的服务器"这个问题有据可查。


适用场景与服务器配置

auditd 适用于所有需要安全合规或事后审计的场景:

  • 生产 Web 服务器:监控 Web 目录文件变更,及时发现 Webshell 植入。
  • 数据库服务器:监控配置文件、敏感目录的访问,记录 DBA 操作。
  • 跳板机 / 堡垒机:记录所有用户的登录和命令执行,满足操作审计要求。
  • 合规场景:满足 PCI DSS、ISO 27001、等保 2.0 等对操作日志的要求。

auditd 对机型没有特殊要求,资源占用极低,任何机型均可部署。推荐在雨云服务器 rainyun-com 上部署,该机型配置均衡,适合同时运行业务服务和审计系统,日志可存储在系统盘或挂载的 20GB 数据盘 上。注册填码 2026off 领 5 折,低成本搭建合规审计环境。


安装

Debian / Ubuntu:

bash 复制代码
apt update
apt install -y auditd audispd-plugins

CentOS / Rocky Linux / AlmaLinux:

bash 复制代码
dnf install -y audit audit-libs

安装完成后启动并设置开机自启:

bash 复制代码
systemctl enable --now auditd
systemctl status auditd

验证审计子系统状态:

bash 复制代码
auditctl -s

输出应包含 enabled 1,表示审计已启用。


核心概念

审计规则类型

auditd 的规则分为三类:

  1. 控制规则(Control rules):修改审计系统行为,如设置缓冲区大小、锁定规则集。
  2. 文件系统规则(Filesystem watch rules,-w:监控指定文件或目录的访问。
  3. 系统调用规则(Syscall rules,-a:监控特定系统调用,支持按用户、进程、参数过滤。

关键字段解析

查看审计日志时,常见字段含义:

字段 含义
type 事件类型(SYSCALL、PATH、USER_AUTH 等)
uid 真实用户 ID
auid 审计用户 ID(登录时的原始用户,即使 sudo 后也保留)
exe 执行的程序路径
key 规则标签,用于搜索过滤
success 操作是否成功(yes/no)
comm 进程名称
hostname 主机名
addr 远程 IP(登录事件)

查看当前规则

bash 复制代码
# 列出当前加载的所有规则
auditctl -l

# 查看审计系统状态
auditctl -s

实时查看审计日志

bash 复制代码
# 原始日志位置
tail -f /var/log/audit/audit.log

# 结构化搜索(推荐)
ausearch -m USER_LOGIN -i

# 生成报告
aureport --summary

实战配置

规则文件管理

推荐将规则写入 /etc/audit/rules.d/ 目录下的 .rules 文件,而不是直接使用 auditctl 临时添加(重启后会丢失)。文件按字典序加载,建议按功能分文件。

规则一:监控 /etc/passwd 和 /etc/shadow 修改

这两个文件的修改意味着用户账户变更,是最常见的入侵痕迹之一。

创建文件 /etc/audit/rules.d/10-identity.rules

bash 复制代码
cat > /etc/audit/rules.d/10-identity.rules << 'EOF'
# 监控用户账户相关文件
-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
-w /etc/sudoers -p wa -k identity
-w /etc/sudoers.d/ -p wa -k identity
EOF

参数说明:

  • -w:监控的文件或目录路径
  • -p wa:监控的权限类型(w=写入,a=属性变更,r=读取,x=执行)
  • -k identity:规则标签,用于 ausearch 过滤

规则二:监控 sudo 使用

bash 复制代码
cat > /etc/audit/rules.d/20-sudo.rules << 'EOF'
# 监控 sudo 相关操作
-w /usr/bin/sudo -p x -k sudo_usage
-w /etc/sudoers -p rwa -k sudo_config
EOF

规则三:监控 SSH 登录

bash 复制代码
cat > /etc/audit/rules.d/30-ssh.rules << 'EOF'
# 监控 SSH 认证相关文件
-w /etc/ssh/sshd_config -p wa -k ssh_config
-w /var/log/auth.log -p wa -k auth_log
# 监控 SSH 登录(通过 PAM)
-w /etc/pam.d/ -p wa -k pam_config
EOF

规则四:监控 Web 目录文件访问

这对于检测 Webshell 植入和文件篡改至关重要:

bash 复制代码
cat > /etc/audit/rules.d/40-webaccess.rules << 'EOF'
# 监控 Web 根目录的读写执行和属性变更
-w /var/www -p rwxa -k webaccess
EOF

注意:-p r(读取)会产生大量日志,如果 Web 目录访问频繁,建议只监控 wa,避免日志爆炸。

规则五:监控特权命令执行(root 命令审计)

bash 复制代码
cat > /etc/audit/rules.d/50-privileged.rules << 'EOF'
# 64位系统:监控所有以 root 身份执行的命令
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
-a always,exit -F arch=b32 -S execve -F euid=0 -k root_commands

# 监控权限提升相关系统调用
-a always,exit -F arch=b64 -S setuid -S setgid -F a0=0 -k setuid_root
-a always,exit -F arch=b32 -S setuid -S setgid -F a0=0 -k setuid_root
EOF

参数说明:

  • -a always,exit:在系统调用退出时记录,always 表示始终记录
  • -F arch=b64:仅匹配 64 位系统调用
  • -S execve:监控 execve 系统调用(执行程序)
  • -F euid=0:过滤有效用户 ID 为 0(root)的进程

规则六:监控关键系统目录

bash 复制代码
cat > /etc/audit/rules.d/60-system.rules << 'EOF'
# 监控定时任务配置
-w /etc/cron.d/ -p wa -k cron
-w /etc/crontab -p wa -k cron
-w /var/spool/cron/ -p wa -k cron

# 监控内核模块加载
-w /sbin/insmod -p x -k kernel_modules
-w /sbin/rmmod -p x -k kernel_modules
-w /sbin/modprobe -p x -k kernel_modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k kernel_modules

# 锁定规则(防止在运行时修改,需重启才能更改)
# -e 2
EOF

最后的 -e 2 会将规则集锁定,防止运行时修改,适合高安全场景,但需谨慎使用(锁定后只能重启解锁)。

加载规则

修改规则文件后,重新加载:

bash 复制代码
augenrules --load
# 或
systemctl restart auditd

# 验证规则已加载
auditctl -l

日志查询:ausearch 与 aureport

ausearch 按条件过滤

bash 复制代码
# 按时间范围查询(最近 1 小时)
ausearch --start recent -i

# 按关键标签查询
ausearch -k identity -i
ausearch -k webaccess -i

# 按用户查询
ausearch -ua root -i

# 按事件类型查询(用户认证)
ausearch -m USER_AUTH -i

# 按时间段查询
ausearch --start 05/16/2026 08:00:00 --end 05/16/2026 18:00:00 -i

# 查询失败的操作
ausearch --success no -i

# 组合查询:查询特定用户的失败操作
ausearch -ua www-data --success no -i

-i 参数将 UID/GID 等数字解析为人类可读的用户名。

aureport 生成摘要报告

bash 复制代码
# 总体事件摘要
aureport --summary

# 认证事件报告(登录/登出)
aureport --auth

# 失败操作报告
aureport --failed

# 文件操作报告
aureport --file

# 登录报告
aureport --login

# 用户报告
aureport --user

# 可执行文件报告
aureport --executable

# 时间范围报告(今天)
aureport --start today --summary

# 仅查看失败的认证事件
aureport --auth --failed

日志轮转与归档配置

长期运行后,审计日志会占用大量磁盘空间。在 /etc/audit/auditd.conf 中配置日志轮转策略:

bash 复制代码
# 编辑 auditd.conf
vi /etc/audit/auditd.conf

关键配置项:

ini 复制代码
# 日志文件路径
log_file = /var/log/audit/audit.log

# 单个日志文件最大大小(MB)
max_log_file = 100

# 保留的日志文件数量
num_logs = 10

# 磁盘空间不足时的动作(suspend=暂停记录,rotate=轮转,halt=关机)
space_left = 500
space_left_action = rotate

# 磁盘空间严重不足时的动作
admin_space_left = 100
admin_space_left_action = SUSPEND

# 磁盘满时的动作(HALT 最安全,可防止日志被绕过)
disk_full_action = SUSPEND
disk_error_action = SUSPEND

修改后重启 auditd 生效:

bash 复制代码
systemctl restart auditd

将日志发送到远程服务器

在多机环境中,集中收集审计日志可以防止本地日志被攻击者篡改。audisp-remote 是 auditd 的远程日志转发插件。

在日志服务器(接收端)上:

bash 复制代码
# 编辑 /etc/audit/auditd.conf,启用远程接收
# tcp_listen_port = 60

在被监控服务器(发送端)上:

安装 audisp-remote 插件(通常随 audispd-plugins 安装):

bash 复制代码
# 编辑 /etc/audisp/plugins.d/au-remote.conf
cat > /etc/audisp/plugins.d/au-remote.conf << 'EOF'
active = yes
direction = out
path = /sbin/audisp-remote
type = always
args = 192.168.1.100
format = string
EOF

# 编辑远程配置
cat > /etc/audisp/audisp-remote.conf << 'EOF'
remote_server = 192.168.1.100
port = 60
mode = immediate
queue_depth = 20
EOF

重启审计服务使配置生效:

bash 复制代码
service auditd restart

CIS Benchmark 常见审计规则清单

以下是 CIS Linux Benchmark 推荐的核心审计规则,适合作为合规基准:

bash 复制代码
cat > /etc/audit/rules.d/99-cis.rules << 'EOF'
# CIS Benchmark 推荐规则

# 确保收集时间修改事件
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-w /etc/localtime -p wa -k time-change

# 确保收集用户/组信息修改事件
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity

# 确保收集网络环境修改事件
-a always,exit -F arch=b64 -S sethostname -S setdomainname -k system-locale
-w /etc/hosts -p wa -k system-locale
-w /etc/network/ -p wa -k system-locale

# 确保收集强制访问控制策略修改事件
-w /etc/apparmor/ -p wa -k MAC-policy
-w /etc/apparmor.d/ -p wa -k MAC-policy

# 确保收集登录/注销事件
-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-w /var/log/tallylog -p wa -k logins

# 确保收集会话初始化事件
-w /var/run/utmp -p wa -k session
-w /var/log/wtmp -p wa -k session
-w /var/log/btmp -p wa -k session

# 确保收集 Discretionary Access Control 权限修改事件
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod

# 确保收集未授权文件访问尝试
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access

# 确保收集 sudo 日志
-w /var/log/sudo.log -p wa -k sudo_log
EOF

加载 CIS 规则:

bash 复制代码
augenrules --load
auditctl -l | wc -l  # 查看已加载规则数量

常用命令速查

操作 命令
查看审计状态 auditctl -s
列出当前规则 auditctl -l
临时添加文件监控 auditctl -w /etc/passwd -p wa -k passwd_change
临时删除规则 auditctl -W /etc/passwd -p wa -k passwd_change
加载规则文件 augenrules --load
清除所有规则 auditctl -D
查看最近认证事件 ausearch -m USER_AUTH -i
按标签查询日志 ausearch -k identity -i
按时间查询 ausearch --start recent -i
查询失败操作 ausearch --success no -i
生成总体报告 aureport --summary
认证事件报告 aureport --auth
失败操作报告 aureport --failed
文件操作报告 aureport --file
手动轮转日志 service auditd rotate
查看原始日志 tail -f /var/log/audit/audit.log

小结

auditd 是 Linux 服务器安全体系中不可缺少的一环。通过合理的规则配置,它能够记录服务器上发生的一切关键操作,为安全审计、事件溯源和合规检查提供可靠依据。建议将本文的规则与自动化告警(如将日志接入 ELK、Wazuh 等 SIEM 平台)结合,构建完整的安全运营能力。

相关推荐
你好潘先生3 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
一点一木5 小时前
🚀 2026 年 6 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
orion5715 小时前
Missing Semester Class1:course overview and introduction of shell
linux
用户1204872216121 小时前
Linux驱动编译与加载
linux·嵌入式
程序员老赵1 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
OpenTiny社区1 天前
从零开发 AI 聊天页要两周?试试这款 Vue3 垂直对话组件库 TinyRobot,直接开箱即用
前端·vue.js·github
逛逛GitHub1 天前
2 万多 Star!Google 开源了这个神级 GitHub 项目。
github
逛逛GitHub1 天前
免费 Token 烧掉 5 万亿之后,他们出了个一站式创作平台。
github
vivo互联网技术1 天前
从 10 分钟到 1 秒:ES 深度分页任意跳页的三轮优化实战
服务器·数据库·redis·elasticsearch·深度分页