最有效方式是用auditctl -w /root/.ssh/authorized_keys -p wa -k ssh_authorized_keys添加临时规则,立即捕获写入/追加行为;需确保auditd运行、路径存在,后续应写入/etc/audit/rules.d/并augenrules --load持久化。

直接用 auditctl 添加一条针对 /root/.ssh/authorized_keys 的写入监控规则,是最有效、最底层的方式。它不依赖进程日志或 shell 历史,哪怕攻击者清空 history 或绕过 sshd 本身,只要文件被修改,auditd 就能捕获系统调用级痕迹。
明确监控目标和操作类型
敏感目录下 authorized_keys 文件的核心风险是**被写入(w)或追加(a)非授权公钥**,这等于开放了持久化后门。因此规则只需聚焦这两个动作,避免读(r)或执行(x)等冗余事件干扰分析。
-
-p wa:仅记录写(write)和追加(append),这是非法篡改的直接证据 - 若该文件位于普通用户家目录(如
/home/alice/.ssh/authorized_keys),需同步监控对应路径,不能只盯 root - 注意权限:确保 auditd 服务已启动,且当前用户有权限添加规则(通常需 root)
添加精准审计规则
执行以下命令,为文件变更打上易检索的关键字:
auditctl -w /root/.ssh/authorized_keys -p wa -k ssh_authorized_keys
-
-w表示监控指定路径(自动递归到其所在目录 inode) -
-k ssh_authorized_keys是自定义标签,后续用ausearch -k可快速过滤,建议命名带上下文(如加主机名或环境标识) - 该规则立即生效,无需重启服务;但临时规则在 reboot 后丢失,需写入规则文件持久化
持久化配置与常见避坑
将规则写入 /etc/audit/rules.d/ 下的独立文件(如 99-ssh-keys.rules),确保重启不失效:
-w /root/.ssh/authorized_keys -p wa -k ssh_authorized_keys
- 写完后执行
augenrules --load(RHEL/CentOS)或service auditd reload(Debian/Ubuntu)加载新规则 - 检查是否生效:
auditctl -l | grep authorized - 常见失败原因:目录
/root/.ssh不存在、权限为 700 但 auditd 仍可监控(因内核级)、SELinux 阻断(可临时 setenforce 0 测试,再用restorecon -v /etc/audit修复上下文)
快速验证与响应定位
模拟一次篡改(如 echo "badkey" >> /root/.ssh/authorized_keys),然后立即查询:
ausearch -i -k ssh_authorized_keys | grep -E "(exe=|comm=|auid=|uid=)"
-
-i输出可读格式,显示执行程序(exe=)、命令名(comm=)、真实用户ID(uid=)和审计用户ID(auid=,即登录时的原始用户) - 若看到
exe=/usr/bin/bash但auid=1001,说明是 UID 1001 用户发起的修改,哪怕他后来 su 到 root 也能溯源 - 配合
last -ai或journalctl _UID=1001进一步确认该用户的登录行为











