Linux安全审计实战:用auditctl监控/etc/passwd文件修改(附规则详解)
在Linux系统中,/etc/passwd文件是存储用户账户信息的关键文件,任何未经授权的修改都可能导致严重的安全问题。本文将深入探讨如何利用auditd框架中的auditctl工具,构建一套针对/etc/passwd文件的实时监控体系,并通过实际案例展示攻击溯源的全过程。
1. 审计系统核心组件与原理
Linux审计系统由内核模块和用户空间工具组成,其架构设计遵循事件驱动原则。当监控目标发生预设操作时,内核会生成审计事件并传递给auditd守护进程。整个过程涉及三个关键层级:
- 内核审计模块:拦截系统调用和文件访问
- auditd守护进程:收集并存储审计事件
- 分析工具链:
auditctl:规则配置ausearch:日志查询aureport:报告生成
审计日志采用二进制格式存储于/var/log/audit/audit.log,每条记录包含以下核心字段:
| 字段名 | 示例值 | 说明 |
|---|---|---|
| type | SYSCALL | 事件类型 |
| msg | audit(1633044800.123:123) | 时间戳和事件ID |
| arch | c000003e | CPU架构(x86_64) |
| syscall | 257 | 系统调用编号(openat) |
| success | yes | 操作是否成功 |
| key | "passwd_monitor" | 规则关联键 |
2. 关键文件监控规则配置
2.1 基础监控规则
对/etc/passwd文件实施全操作监控,建议使用以下规则组合:
# 监控文件读写和属性修改
auditctl -w /etc/passwd -p wa -k passwd_changes
# 监控文件删除/重命名操作
auditctl -a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F path=/etc/passwd -k passwd_deletion
参数解析:
-w:指定监控路径-p wa:监控写入(w)和属性修改(a)-k:设置事件关键词-S:指定系统调用-F path=:限定特定文件路径
2.2 高级规则优化
针对生产环境,建议增加以下增强规则:
# 监控特权用户操作
auditctl -a always,exit -F path=/etc/passwd -F perm=wa -F auid>=1000 -F auid!=4294967295 -k privileged_passwd_change
# 监控非交互式修改
auditctl -a always,exit -F path=/etc/passwd -F success=0 -k failed_passwd_access
# 监控批量用户添加
auditctl -a always,exit -S execve -F path=/usr/sbin/useradd -F argc>3 -k mass_user_creation
注意:
-F auid!=4294967295用于排除未设置登录UID的系统服务账户
3. 规则持久化方案
临时规则重启后会失效,需通过以下方式实现持久化:
-
RedHat/CentOS:
echo "-w /etc/passwd -p wa -k passwd_changes" > /etc/audit/rules.d/passwd.rules augenrules --load -
Debian/Ubuntu:
echo "-w /etc/passwd -p wa -k passwd_changes" >> /etc/audit/audit.rules service auditd reload -
通用方案(支持规则版本控制):
# 创建规则备份 cp /etc/audit/rules.d/audit.rules /etc/audit/rules.d/audit.rules.$(date +%Y%m%d) # 追加新规则 cat <<EOF >> /etc/audit/rules.d/audit.rules ## /etc/passwd监控规则 -w /etc/passwd -p wa -k passwd_changes EOF # 应用规则 auditctl -R /etc/audit/rules.d/audit.rules
4. 攻击场景分析与日志解读
4.1 案例:异常用户添加
当攻击者尝试添加后门账户时,典型日志如下:
type=SYSCALL msg=audit(1633044800.123:256): arch=c000003e syscall=59 success=yes exit=0 a0=55a5b5d7b260 a1=55a5b5d7b2e0 a2=55a5b5d7b320 a3=8 items=2 ppid=2546 pid=2567 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="useradd" exe="/usr/sbin/useradd" key="passwd_changes"
type=EXECVE msg=audit(1633044800.123:256): argc=5 a0="useradd" a1="-g" a2="0" a3="-o" a4="backdoor"
type=PATH msg=audit(1633044800.123:256): item=0 name="/etc/passwd" inode=786433 dev=08:01 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
关键指标分析:
- 权限提升:
uid=0但auid=1000表示普通用户通过sudo提权 - 可疑参数:
-g 0 -o尝试创建UID为0的账户 - 时间异常:非工作时间段的操作更值得关注
4.2 日志分析技巧
使用ausearch进行高效分析:
# 查询最近1小时的关键事件
ausearch -ts recent -k passwd_changes -i
# 统计异常操作来源
aureport --key --summary -i | grep -A 10 passwd_changes
# 提取完整攻击链
ausearch -k passwd_changes -i --format csv > audit_report.csv
常用过滤组合:
| 场景 | 命令示例 |
|---|---|
| 失败尝试 | ausearch -k passwd_changes -sv no -i |
| 特权操作 | ausearch -k passwd_changes -ua 0 -i |
| 特定时段 | ausearch -ts 09:00:00 -te 17:00:00 -k passwd_changes |
5. 生产环境最佳实践
5.1 性能优化配置
在/etc/audit/auditd.conf中添加:
# 控制日志轮转
max_log_file = 50
num_logs = 10
space_left = 200
space_left_action = email
admin_space_left = 50
admin_space_left_action = suspend
# 提升处理效率
flush = INCREMENTAL_ASYNC
freq = 50
5.2 安全加固措施
-
规则保护:
auditctl -e 2 # 锁定审计配置 chattr +i /etc/audit/rules.d/*.rules -
日志保护:
chmod 0600 /var/log/audit/audit.log chown root:root /var/log/audit/ -
完整性校验:
# 每日校验规则有效性 crontab -e 0 3 * * * /sbin/auditctl -l | diff - /etc/audit/rules.d/active.rules
5.3 告警集成方案
通过audispd插件实现实时告警:
-
配置
/etc/audisp/plugins.d/syslog.conf:active = yes direction = out path = /sbin/audisp-syslog type = builtin args = LOG_INFO format = string -
添加rsyslog规则
/etc/rsyslog.d/audit.conf:if $msg contains 'key="passwd_changes"' then @logserver.example.com:514 -
使用SIEM集成示例(Splunk):
[monitor:///var/log/audit/audit.log] sourcetype = linux_audit index = security
6. 高级监控技巧
6.1 关联进程跟踪
监控修改/etc/passwd的完整进程树:
auditctl -a always,exit -S execve -F path=/usr/bin/vi -k editor_activity
auditctl -a always,exit -S open -F path=/etc/passwd -k passwd_access_chain
分析时使用进程ID关联:
ausearch -k editor_activity -i | grep -B 10 -A 10 'etc/passwd'
6.2 时间窗口检测
识别高频修改行为:
aureport --file --start 08:00:00 --end 18:00:00 -i | grep '/etc/passwd'
6.3 完整性校验扩展
结合AIDE进行二次验证:
# 配置AIDE检查规则
echo "/etc/passwd CONTENT_EX" >> /etc/aide/aide.conf
aide --check | mail -s "AIDE Report" admin@example.com
322



被折叠的 条评论
为什么被折叠?



