真正有效的sudo邮件告警方案是用auditd捕获执行动作+脚本解析日志+SMTP发送结构化告警:配置auditd监听/usr/bin/sudo调用,inotifywait实时监控审计日志,触发mail命令发信至主管邮箱,并扩展su/pkexec监控及IP提取逻辑。

Linux 运维中配置 sudo 邮件告警,核心不是靠 Defaults mail_badpass——它只在输错密码时发本地邮件,不覆盖真实提权行为,也无法对接主管邮箱。真正有效的方案是:用 auditd 捕获 sudo 执行动作 + 脚本实时解析日志 + 通过已配置的 SMTP 邮件通道发送结构化告警。
捕获真实 sudo 执行行为(绕过 shell 层)
sudo 命令本身不直接发外网邮件,但它的执行会触发内核系统调用。auditd 是唯一能稳定监听这类行为的工具:
- 确认 auditd 已启用:
sudo systemctl is-active auditd,未运行则执行sudo systemctl enable --now auditd - 在
/etc/audit/rules.d/priv.rules中添加规则:-a always,exit -F path=/usr/bin/sudo -F perm=x -k sudo_exec - 重载规则:
sudo augenrules --load && sudo systemctl restart auditd - 验证是否记录:执行
sudo whoami后,运行ausearch -k sudo_exec -i | tail -1,应看到含用户、终端、命令参数的完整条目
实时提取并触发邮件通知
避免用 crontab 轮询造成延迟,改用 inotifywait 监听审计日志变化:
- 安装依赖:
sudo apt install inotify-tools -y(Ubuntu)或sudo yum install inotify-tools -y(CentOS) - 创建告警脚本
/usr/local/bin/sudo-alert.sh:#!/bin/bash<br>while inotifywait -e modify /var/log/audit/audit.log 2>/dev/null; do<br> if ausearch -k sudo_exec -ts recent -i | grep -q "uid=[0-9]\+"; then<br> EVENT=$(ausearch -k sudo_exec -ts recent -i | tail -1)<br> echo "$EVENT" | mail -s "[⚠️ 高危提权] $(hostname)" ops-manager@company.com<br> fi<br>done
- 赋予执行权限:
chmod +x /usr/local/bin/sudo-alert.sh
确保邮件能真正送达主管邮箱
告警脚本能跑通的前提,是系统已具备稳定 SMTP 发信能力:
- 安装并配置
mailx或mailutils,例如 Ubuntu:sudo apt install mailutils -y - 编辑
/etc/mail.rc,添加 QQ 邮箱示例:set from=alert@company.com<br>set smtp=smtps://smtp.qq.com:465<br>set smtp-auth-user=alert@company.com<br>set smtp-auth-password=your_app_password<br>set smtp-auth=login<br>set ssl-verify=ignore
- 测试发信:
echo "测试告警" | mail -s "sudo 告警测试" ops-manager@company.com,收到即通
加固与防漏报建议
仅监控 sudo 不够,攻击者可能用 su、pkexec 或直接 root 登录绕过:
- 扩展 auditd 规则,加入:
-a always,exit -F path=/bin/su -F perm=x -k su_exec<br>-w /var/log/auth.log -p wa -k auth_log_write
- 在告警脚本中增加 IP 和用户名提取逻辑,便于快速定位来源:
IP=$(echo "$EVENT" | awk -F'cwd="|"' '{print $2}' | cut -d' ' -f1) - 收件人设为运维主管邮箱,并
-c抄送值班群组邮箱,确保多人可见


















