必须组合启用OpenSSH审计+auditd内核级命令捕获+日志集中管理:OpenSSH需设LogLevel VERBOSE和SyslogFacility AUTHPRIV;auditd配置execve规则并持久化;日志须外发至远程服务器并锁定本地权限。

要真正追踪账号异常行为,不能只靠默认日志。必须组合启用 OpenSSH 本身审计能力 + auditd 内核级命令捕获 + 日志集中管理,三者缺一不可。
一、强化 SSH 服务端日志输出
仅靠 LogLevel INFO 只能记录登录成功/失败,无法识别“谁在什么时候执行了什么命令”。需升级为 VERBOSE 并配合关键参数:
- 编辑
/etc/ssh/sshd_config,确保以下配置存在且未被注释: -
LogLevel VERBOSE(记录认证方式、密钥指纹、会话开启/关闭) -
SyslogFacility AUTHPRIV(将日志归入高权限设施,避免普通用户读取) -
MaxAuthTries 3(限制暴力尝试次数,触发后自动记日志) -
PermitRootLogin no(禁用 root 直接登录,所有操作必须可追溯到具体账号) - 修改后执行
sudo systemctl restart sshd
二、部署 auditd 实现命令级审计
OpenSSH 日志不记录用户执行的每条命令,而 auditd 可捕获 execve 系统调用——这是唯一绕过 shell 层、不可篡改的方案:
- 确认服务运行:
sudo systemctl is-active auditd,若非 active 则启用:sudo systemctl enable --now auditd - 添加命令审计规则(x86_64 系统):
sudo auditctl -a always,exit -F arch=b64 -S execve -k user_commands - 持久化规则:写入
/etc/audit/rules.d/user-commands.rules,再执行sudo augenrules --load - 查异常命令:
sudo ausearch -k user_commands --start today | aureport -f -i | grep -E "(rm|chmod|wget|curl|python)"
三、构建账号行为基线与异常识别
日志有了,关键是如何定义“异常”。建议从三个维度建立基线并设置告警:
-
时间异常:非工作时段(如凌晨 2–5 点)的登录或 sudo 操作
→ 用last -s "02:00" -t "05:00"或ausearch --start today --raw | aureport -m --key user_commands | awk '$4 ~ /0[2-5]:[0-5][0-9]/' -
地理异常:同一账号在 1 小时内从不同大区 IP 登录(如北京 → 巴西)
→ 解析/var/log/secure或/var/log/auth.log中的Accepted ... from X.X.X.X行,用脚本比对 IP 归属地 -
行为异常:高频执行危险命令(如 5 分钟内
find / -name "*.sh" -exec rm {} \;)
→ 结合 auditd 日志 +aureport -ts $(date -d '5 minutes ago' +%m/%d/%y %H:%M:%S) -k user_commands
四、日志防篡改与集中归档
本地日志可被提权用户删除。生产环境必须外发并限制写权限:
- 配置 rsyslog 外发(以 Ubuntu 为例):
在/etc/rsyslog.d/50-remote.conf添加:*.* @your-syslog-server:514(TCP)或*.* @@your-syslog-server:514(TLS 加密推荐) - 锁定本地日志权限:
sudo chmod 600 /var/log/auth.log /var/log/secure - 禁用用户清空 history:
在/etc/profile中添加:readonly HISTFILE和unset HISTCONTROL - 定期校验日志完整性(可选):
sha256sum /var/log/auth.log > /var/log/auth.log.sha256,每日比对










