应监控 /root/.ssh/authorized_keys(-p wa)和 id_rsa(-p rwa)两个文件,用 auditctl 添加临时规则并写入 /etc/audit/rules.d/ 持久化,通过 ausearch 按 key 查异常操作。

直接监控 /root/.ssh 目录本身效果有限,真正要防的是其中关键文件被非法读取或篡改——尤其是 authorized_keys(后门入口)和 id_rsa(私钥泄露)。Auditd 最有效的方式是按文件粒度加规则,而非监控整个目录。
重点监控两个核心文件
攻击者窃取 SSH 秘钥的典型路径是:读取私钥、写入恶意公钥、或替换 authorized_keys。因此规则必须聚焦具体目标:
- /root/.ssh/authorized_keys:只监控 -p wa(写 + 属性变更),这是新增后门的直接证据;不监读(r),避免日志噪音
- /root/.ssh/id_rsa(或 id_ed25519):必须监控 -p rwa,因为私钥一旦被读取(r)就意味已泄露;a 覆盖 chmod/chown 等隐蔽操作
用 auditctl 添加即时生效规则
确保 auditd 正在运行(systemctl status auditd),再执行:
- auditctl -w /root/.ssh/authorized_keys -p wa -k ssh_auth_keys
- auditctl -w /root/.ssh/id_rsa -p rwa -k ssh_private_key
注意:-w 必须指向真实路径(不是软链接);若私钥名不同,如 id_ed25519,请同步替换路径;所有命令需 root 权限。
规则必须持久化,否则重启即失效
临时规则仅存活到下次 reboot 或 auditd 重载。要长期生效:
- 新建规则文件:/etc/audit/rules.d/20-ssh-root.rules
- 写入两行(一行一文件):
-w /root/.ssh/authorized_keys -p wa -k ssh_auth_keys
-w /root/.ssh/id_rsa -p rwa -k ssh_private_key - 执行 augenrules --load(RHEL/CentOS)或 service auditd reload(Debian/Ubuntu)
- 验证:auditctl -l | grep ssh_ 应能看到两条规则
快速查谁动了密钥文件
一旦发生异常,用 ausearch 按 key 过滤,结合时间与上下文定位:
- 查最近 10 分钟所有匹配事件:ausearch -k ssh_auth_keys --start 10 minutes ago -i
- 只看调用程序和用户:ausearch -k ssh_private_key -m SYSCALL -i | grep -E "(comm=|auid=|uid=)"
- 关键字段说明:comm= 是触发进程名(如 cat、scp、vim);auid= 是登录时原始用户(防 su 切换掩盖);uid= 是当前实际执行用户











