校验系统核心二进制文件权限需聚焦属主、权限位(SUID/SGID)、不可变属性和SELinux/AppArmor上下文四层:/usr/bin/sudo等必须root属主且权限为-rwsr-xr-x;/bin/ping应启用cap_net_raw+ep而非SUID;用find筛查异常SUID/SGID并清理;lsattr确认i属性防篡改;ls-Z验证执行上下文受限;rpm-V或dpkg--verify确保完整性。

校验系统核心二进制文件权限,关键不是只看“能不能运行”,而是确认“谁能在什么条件下以什么身份运行它”。重点盯住属主、权限位(尤其是SUID/SGID)、不可变属性和执行上下文四层状态,缺一不可。
检查属主与基础权限是否合规
核心二进制如 /usr/bin/sudo、/bin/su、/bin/ping 必须由 root 拥有,且权限需严格收敛:
- 运行
ls -l /usr/bin/sudo,输出应为-rwsr-xr-x 1 root root—— 第一位 s 表示 setuid 有效,后六位不能含 w(即 group 和 other 不可写) -
/bin/ping推荐不依赖 setuid,而用 capability:运行getcap /bin/ping应返回/bin/ping = cap_net_raw+ep,同时其权限应为-rwxr-xr-x(即 无 s 位) - 批量筛查异常 SUID/SGID 文件:
find /bin /usr/bin /usr/local/bin -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null,逐个验证必要性,非必需项立即清理(chmod u-s,g-s)
验证不可变属性(chattr +i)是否生效
仅靠 chmod 无法防 root 级篡改,i 属性才是最后一道防线:
- 执行
lsattr /usr/bin/sudo /bin/su,每行首字段必须含 i(如----i---------e---),表示不可修改、不可删除、不可重命名 - 若缺失,立即加锁:
sudo chattr +i /usr/bin/sudo /bin/su - 注意:系统升级可能清除 i 属性,需将加锁动作纳入包管理后钩子(如 RPM %post 或 dpkg-trigger),或每日定时校验
核对 SELinux/AppArmor 上下文是否受限
即使权限被绕过(如通过 LD_PRELOAD 或 ptrace),MAC 策略仍能拦截非法调用:
- 运行
ls -Z /usr/bin/sudo,类型字段应为sudo_exec_t(SELinux)或对应 AppArmor 抽象配置 - 确认策略启用:
sestatus输出中 Current mode 为 enforcing - 普通用户域(如
user_t)默认不应被允许调用sudo_exec_t;若有拒绝日志(ausearch -m avc -ts recent),用audit2allow分析,避免盲目放行
用包管理器做完整性比对
权限和属性可能被静默篡改,需依赖可信来源验证原始状态:
- RHEL/CentOS 系统:
sudo rpm -V sudo coreutils util-linux—— 无输出表示未变更;若有输出(如S.5....T.),说明大小、权限或 mtime 异常 - Debian/Ubuntu 系统:
sudo dpkg --verify sudo passwd,同样以空输出为正常 - 建议每周自动执行,并将非空结果邮件告警;对关键文件(如
/usr/bin/sudo)单独加入脚本循环校验


















