定期审计SUID二进制文件需建立自动化流程:一、每日定时用find生成标准化清单;二、自动比对新旧清单差异,关注新增/消失项;三、对新增项交叉验证来源与属性;四、固化为cron+日志+告警闭环。

定期审计 SUID 二进制文件,核心是建立可重复、可比对、可告警的自动化流程,而不是手动跑一次 find 就算完事。
一、用 find 生成标准化清单
每天固定时间(如凌晨2点)执行以下命令,输出干净、唯一、带时间戳的列表:
- 基础扫描:sudo find / -xdev -type f -perm -4000 2>/dev/null | sort > /var/log/suid_audit/$(date +\%Y\%m\%d)_suid_list.txt
- 加路径限制提效:只扫关键目录(/bin、/usr/bin、/sbin、/usr/sbin、/usr/local/bin),跳过 /proc、/sys、/dev 等伪文件系统,避免卡顿和误报
- 排除已知可信项(可选):若已有白名单,可用 grep -vFf /etc/suid_whitelist.txt 过滤,但建议先保留全量再比对,防止漏掉新增项
二、自动比对前后差异
审计价值在于“变化”。把当天清单和昨日清单做 diff,只关注新增或消失的条目:
- 用 comm -13 <(sort /var/log/suid_audit/$(date -d yesterday +\%Y\%m\%d)_suid_list.txt) <(sort /var/log/suid_audit/$(date +\%Y\%m\%d)_suid_list.txt) 查新增项
- 发现新增路径在 /tmp、/var/tmp、/home/*/bin 或非标准位置(如 /opt/xxx/bin),立即触发告警
- 消失项一般风险低,但若 /usr/bin/sudo 突然不在列表里,也要检查是否被误删或权限异常
三、结合来源与属性交叉验证
仅看路径和权限不够,需快速确认每个 SUID 文件是否合法:
- 对每条新增路径,自动执行:ls -l(看属主、权限是否宽松)、file(确认是否真实二进制)、rpm -qf 或 dpkg -S(查是否来自系统包)
- 属主不是 root、权限含 w 位(如 -rwsrwxr-x)、或归属 unknown 包,标记为“高疑”
- 脚本类文件(如 Python/shell)被设了 SUID —— 内核不生效,但可能被利用绕过,一律视为配置错误
四、固化为 cron + 日志 + 告警闭环
把上面逻辑写成一个简短 shell 脚本(例如 /usr/local/bin/check_suid.sh),加入定时任务:
- 0 2 * * * /usr/local/bin/check_suid.sh >> /var/log/suid_audit/cron.log 2>&1
- 脚本末尾加判断:若有新增且未在白名单中,就发邮件或写入 /var/log/secure 并触发 systemd-journal 告警
- 所有历史清单保留 30 天,配合 logrotate 自动清理


















