核心目标:记录谁、什么时间、在哪台机器、执行了什么命令、操作结果、访问了哪些文件;区分两类审计:
系统自带日志(auth.log/secure):登录、sudo、su 这类认证事件,轻量、开箱即用
auditd(Linux 内核审计框架):内核层审计,文件读写、进程创建、系统调用,生产环境做用户行为溯源首选
会话录制(tlog /script/asciinema):录制终端屏幕输入输出,可回放操作画面
重要前提:审计日志不能只存在本机,攻击者拿到权限第一件事就是删本地日志;生产务必转发到独立日志服务器(rsyslog、syslog-ng、Loki、ELK)。
一、先分清:各类工具适用场景对比
生产推荐组合:auditd(内核审计) + rsyslog(认证日志转发) + tlog(运维会话回放)
二、基础:认证行为审计(开箱即用,不用装包)
1. 日志文件位置
RHEL / openEuler / CentOS:
/var/log/secureDebian / Ubuntu:
/var/log/auth.log记录:SSH 登录、本地 tty 登录、su、sudo、密码认证失败、密钥登录。
查看示例:
# 查看所有登录、sudo提权事件
grep -E 'sshd|sudo|su' /var/log/secure
# 查看root登录记录
last root
# 查看所有用户最近登录
lastlog
2. sudo 日志增强(重点!追踪谁提权执行命令)
sudo 默认记录到 secure/auth.log,格式示例:
sudo: user01 : TTY=pts/0 ; PWD=/home/user01 ; USER=root ; COMMAND=/usr/bin/systemctl restart nginx
风险:用户执行
sudo -i/sudo su进入 root shell 之后,后续敲的命令 sudo 不再记录,这就是为什么需要 auditd 或者 tlog。
3. 加固 bash history(仅辅助,不能当审计依据)
用户随时可以 history -c、删除 .bash_history,只做辅助参考。 可以配置追加时间戳,放到 /etc/profile 全局:
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
export HISTCONTROL=ignoredups
shopt -s histappend
三、核心:auditd 内核审计(生产标准方案)
auditd 在内核钩子上捕获事件,普通用户、拿到 root 也无法轻易绕过(除非卸载 auditd 或者修改规则)。
1. 安装启动
# RHEL/openEuler
yum install audit -y
systemctl enable --now auditd
# Debian/Ubuntu
apt install auditd audispd-plugins -y
systemctl enable --now auditd
主配置文件:/etc/audit/auditd.conf 重点参数:
log_file = /var/log/audit/audit.log
max_log_file = 8
max_log_file_action = ROTATE
space_left_action = SYSLOG
admin_space_left_action = SUSPEND
SUSPEND:磁盘满了停止审计,防止系统卡死;也可以设为IGNORE,根据安全要求选择。
规则文件目录:/etc/audit/rules.d/,后缀 .rules,加载命令:
# 加载所有规则
augenrules --load
# 查看当前生效规则
auditctl -l
2. 常用审计规则(直接写到 /etc/audit/rules.d/user-audit.rules)
## 1. 监控执行所有命令(execve,记录用户执行的程序,最核心)
-a exit,always -F arch=b64 -S execve -k exec_cmd
-a exit,always -F arch=b32 -S execve -k exec_cmd
## 2. 监控账号文件修改(passwd、shadow、group、sudoers)
-w /etc/passwd -p rwxa -k user_passwd_change
-w /etc/shadow -p rwxa -k user_shadow_change
-w /etc/group -p rwxa -k group_change
-w /etc/sudoers -p rwxa -k sudoers_change
## 3. 监控ssh密钥目录
-w /root/.ssh/authorized_keys -p rwxa -k root_sshkey
-w /home/ -p rwxa -k user_sshkey -F dir
## 4. 监控修改权限、属主
-a exit,always -F arch=b64 -S chmod,fchmod,fchmodat -k chmod
-a exit,always -F arch=b64 -S chown,fchown,lchown -k chown
## 5. 监控删除、重命名文件
-a exit,always -F arch=b64 -S unlink,unlinkat,rename,renameat -k file_delete
## 6. 监控模块加载(root植入内核后门重点行为)
-a exit,always -F arch=b64 -S init_module,finit_module,delete_module -k kernel_module
⚠️ 注意:
execve全量审计会产生巨大日志量,高并发业务服务器谨慎开启;可以改成只审计 uid=0(root)的执行:-a exit,always -F arch=b64 -S execve -F auid=0 -k root_execauid= 登录原始用户 ID(即便 sudo 切 root,auid 还是原来登录人的 ID!这是 auditd 最关键的字段)
3. auditd 查询工具 ausearch /aureport
# 按关键字查,查看所有执行命令事件
ausearch -k exec_cmd
# 查看root用户所有操作(auid是原始登录uid)
ausearch -ua 0
# 按时间范围查询
ausearch -ts today -te now -k user_shadow_change
# 生成审计汇总报表
aureport -x # 执行命令报表
aureport -u # 用户事件报表
aureport -f # 文件访问报表
关键字段说明:
auid:审计 UID,登录原始用户,不会因为 su/sudo 切换身份改变,溯源核心字段!uid:当前进程 uid(sudo 之后变成 0)pid、ppid:进程树exe:执行程序路径key:我们自定义的标签,方便检索
四、终端会话录制:tlog(可回放操作画面)
tlog 是 cockpit 配套的终端录制工具,比 script 稳定,支持日志转发,适合运维人员登录操作回放。
局限:只能捕获交互式 PTY 终端,cron、后台脚本、API 调用无法捕获。
安装(RHEL/openEuler)
yum install tlog -y
配置 PAM,让所有 ssh 登录自动录制: 修改 /etc/pam.d/sshd,末尾添加:
session required pam_tlog.so
配置 /etc/tlog/tlog.conf,日志输出到 syslog,方便转发。 回放命令:
tlog-play -r journal -M TLOG_ID=xxx
备选轻量方案 script(不推荐生产自动部署,容易丢记录)
# 手动录制
script -q /var/log/terminal/$(date +%Y%m%d_%H%M%S)_$USER.log
五、日志集中转发(重中之重,防日志被篡改删除)
使用 rsyslog 把 audit.log、secure/auth.log 统一推送到远端: 示例 rsyslog 配置 /etc/rsyslog.d/audit-forward.conf
# 转发audit日志
$ModLoad imfile
$InputFileName /var/log/audit/audit.log
$InputFileTag audit:
$InputFileStateFile audit-state
$InputFileSeverity info
$InputRunFileMonitor
# 远端syslog服务器地址,tcp协议
:tag,startswith,"audit:" @@192.168.1.100:514
远端可以用:rsyslog、Loki、Graylog、ELK、Splunk。
安全建议:远端 syslog 服务器禁止被审计主机账号登录,单向接收日志。
六、关键审计策略 & 避坑
auid != uid:溯源一定要看
auid,不要看 uid;sudo 切 root 之后 uid=0,但 auid 还是登录用户auditd 规则不要无脑全开,
execve全量审计在高并发业务机 IO 和磁盘压力巨大,按需缩小范围auditd 本身可以被 root 停止:
systemctl stop auditd;所以要监控 auditd 进程是否存活,一旦停止立刻告警审计只负责记录,本身不能阻止操作;如果需要阻断,搭配 SELinux/AppArmor
不要依赖
.bash_history做安全审计,属于用户态文件,可删除篡改区分:登录审计(sshd)、提权审计(sudo)、内核行为审计(auditd)、终端回放(tlog),互补而不是替代
七、告警规则参考(对接 Prometheus/Alertmanager、zabbix)
需要监控并告警的审计事件:
/etc/shadow//etc/sudoers//root/.ssh/authorized_keys被修改内核模块加载 / 删除(init_module)
陌生 IP 登录、连续认证失败(暴力破解)
auditd 服务停止、audit 日志写入失败
root 执行高危命令(rm、dd、mkfs)
八、快速巡检脚本(一键检查审计状态)
#!/bin/bash
echo "==== auditd 状态 ===="
systemctl status auditd | head -5
echo -e "\n==== audit规则 ===="
auditctl -l
echo -e "\n==== 最近sudo操作 ===="
grep sudo /var/log/secure | tail -10
echo -e "\n==== audit日志最近10条exec ===="
ausearch -k exec_cmd --raw | tail -10本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢