SSH密钥审计需配置LogLevel VERBOSE记录指纹、用auditd捕获命令执行、外发日志防篡改,并通过日志关联实现“密钥→用户→操作”全链路追踪。
SSH 密钥审计日志不是“开个开关就自动出来”的事情,它需要把密钥使用行为、认证过程、命令执行三者串起来看。光靠 /var/log/auth.log 或 /var/log/secure 里的几行记录,根本看不出谁用哪把密钥、连了几次、执行了什么命令。真正有效的密钥审计,得从配置、捕获、关联三个层面动手。
默认的 LogLevel INFO 只记“Accepted publickey”,不记密钥指纹、算法类型、甚至用户实际用的是哪一把密钥。必须改到 VERBOSE:
/etc/ssh/sshd_config,确保有这一行:LogLevel VERBOSE
sudo systemctl restart sshd
sshd[12345]: debug1: key_parse_private_pem: PEM_read_PrivateKey failed
sshd[12345]: Accepted publickey for alice from 192.168.1.10 port 56789 ssh2: RSA SHA256:AbCdEf...GhIj
注意最后的 RSA SHA256:... 就是公钥指纹,这是溯源关键
日志里写了“Accepted”,但用户登进去干了什么?删库?改配置?默认 SSH 日志不记录这些。需要用 auditd 补上这一环:
sudo auditctl -a always,exit -F arch=b64 -S execve -k ssh_cmd
(b64 适配 x86_64;如是 32 位系统用 b32)
auditd 开机自启:sudo systemctl enable auditd
sudo ausearch -k ssh_cmd -i 查到某次登录后执行的所有命令,再结合前面的 SSH 日志时间戳和用户,就能把“哪把密钥→哪个用户→执行了什么”串起来攻击者一旦拿到权限,第一件事就是清日志。密钥审计的前提是日志可信:
sudo chmod 600 /var/log/auth.log /var/log/secure(RHEL/CentOS)或 /var/log/auth.log(Debian/Ubuntu)rsyslog 外发日志到独立日志服务器(不能和业务主机同机),例如在 /etc/rsyslog.d/50-remote.conf 中加:*.* @10.0.1.100:514(TCP)或 *.* @@10.0.1.100:514(可靠传输)
journalctl 的访问:sudo groupadd -r adm,再把仅限运维加入该组,避免 journalctl --no-pager -u ssh 被滥用有了数据,还得能快速查。几个实用命令:
sudo grep "Accepted publickey" /var/log/secure | awk '{print $9, $11, $(NF-1)}'
输出示例:alice RSA SHA256:AbCdEf...GhIj
sudo grep "Accepted publickey" /var/log/secure | awk '{print $(NF-1)}' | sort | uniq -c | sort -nr
sudo grep "SHA256:AbCdEf...GhIj" /var/log/secure | tail -3 | awk '{print $11}'