应基于auditd从内核层捕获提权行为,配置sudo/su执行及关键文件变更规则,外发加密日志并实时解析告警,同步加固ssh与sudo策略,辅以aide校验文件完整性实现闭环审计。

设置服务器权限变更告警机制,关键不是等权限“结果变了”才响应,而是实时捕获所有可能引发权限提升或配置篡改的行为,并确保告警可追溯、不可绕过、不被掩盖。
精准捕获提权行为,而非监听权限状态
权限本身没有日志,但触发权限变更的动作有。Linux下必须依赖 auditd 从内核系统调用层拦截,比 shell 历史或 sudo 日志更底层、更可靠:
- 在 /etc/audit/rules.d/priv-audit.rules 中添加核心规则:
-a always,exit -F path=/usr/bin/sudo -F perm=x -k sudo_exec
-a always,exit -F path=/bin/su -F perm=x -k su_exec
-w /etc/sudoers -p wa -k sudoers_change
-w /etc/passwd -p wa -k user_change - 执行 sudo augenrules --load 加载规则,并确认 systemctl is-active auditd 返回 active
- 验证是否生效:运行 sudo ls 后,执行 ausearch -k sudo_exec -i | head -1,应清晰显示执行用户、终端、时间、命令参数
日志外发+实时解析,防删改、防遗漏
本地日志极易被恶意清除,必须强制外发并做轻量级实时解析:
- 用 rsyslog 或 audispd 插件,将 /var/log/audit/audit.log 通过 TLS 加密转发至独立 syslog 服务器(如 Logstash 或 Graylog)
- 部署最小化监听脚本(无需重装 SIEM):
inotifywait -m -e modify /var/log/audit/audit.log | while read _; do
ausearch -k sudo_exec --input-logs | grep "acct=" | tail -1 | awk '{print $1,$2,$3,"sudo used by",$12}' | mail -s "PRIV ALERT" admin@company.com
done - 企业环境建议接入 Wazuh 或 OSSEC:自动关联 SSH 登录 IP、shell 类型、sudo 参数,识别高危组合(如非运维时段 + root + chmod 777)
堵住审计盲区,让提权操作无处绕过
再严密的审计也拦不住故意绕开它的操作。必须同步加固基础访问控制:
- SSH 配置中设 PermitRootLogin no,禁用 root 密码登录,强制所有管理会话经普通用户 + sudo
- /etc/sudoers 中启用细粒度记录:
Defaults logfile=/var/log/sudo.log
Defaults log_input,log_output(需配合 sudo_logsrvd 才能录终端输入输出) - 避免使用 NOPASSWD: ALL;改用白名单授权,例如:
%wheel ALL=(ALL) /bin/systemctl restart nginx, /usr/bin/journalctl
补充文件完整性校验,确认“改成了什么样”
auditd 告诉你“谁改了”,AIDE 告诉你“改成了什么”——二者互补才能闭环:
- 初始化 AIDE 指纹库:aide --init,生成 /var/lib/aide/aide.db.new,重命名为 /var/lib/aide/aide.db
- 配置 cron 每日凌晨运行 aide --check,将差异输出写入独立日志(如 /var/log/aide-check.log)
- 将 AIDE 检查结果与 auditd 的 sudoers_change 事件交叉比对:若两者同时触发,说明有人修改了 sudoers 且实际内容已变更,立即触发升级告警










