敏感二进制文件需用chattr +i锁定权限以防篡改,因仅chmod 4755或chown不足;应先规范属主/权限(如su/sudo为-rwsr-xr-x,ping用setcap替代setuid),再加不可变属性,并纳入升级钩子与定期校验。

敏感二进制文件为什么要锁定权限
Linux中如 /bin/su、/usr/bin/sudo、/bin/ping 等二进制文件一旦被恶意篡改或替换,可能直接导致提权、横向渗透或绕过认证。仅靠常规的 chmod 4755 或 chown root:root 并不足够——普通用户仍可能覆盖(若所在目录可写)、重命名或删除后重建同名文件。真正的防护需结合权限控制与不可变属性。
标准权限加固:最小化可执行与写入范围
先清理冗余权限,确保属主为 root、属组合理、其他用户无写/执行权:
-
su:应为
-rwsr-xr-x 1 root root(setuid 有效,非 root 无法修改) -
sudo:必须是
-rwsr-xr-x 1 root root,且 /etc/sudoers 权限应为-r--r----- 1 root root -
ping:依赖 cap_net_raw,推荐用
setcap cap_net_raw+ep /bin/ping替代 setuid,再移除 s 位:chmod u-s /bin/ping - 检查所有 setuid/setgid 文件:
find / -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null,逐个验证必要性
Chattr 不可变标记:阻止任何用户级修改
即使 root 用户(非 recovery 模式)也无法修改、删除、重命名或链接已加 i 属性的文件。这是防御持久化篡改的最后一道用户空间防线:
- 加锁命令:
chattr +i /bin/su /usr/bin/sudo /bin/ping - 验证是否生效:
lsattr /bin/su→ 输出含----i---------e--- - 解锁仅限维护时使用:
chattr -i /path/to/file,操作前建议快照或备份 - 注意:+i 会同时禁用所有写操作(包括日志追加、符号链接创建等),切勿对 /var/log/ 或 /tmp/ 下动态文件误用
联动机制与运维注意事项
Chattr 和传统权限不是替代关系,而是分层互补。实际部署需考虑更新兼容性与审计响应:
- 系统升级(如 apt upgrade / yum update)可能自动替换二进制并清除 chattr 属性,建议将
chattr +i步骤纳入包管理后钩子(如 dpkg-trigger 或 rpm %post) - 定期校验脚本示例:
for f in /bin/su /usr/bin/sudo; do [ "$(lsattr "$f" | cut -d' ' -f1)" != "----i---------e---" ] && echo "ALERT: $f missing immutability" >&2; done - 避免在容器或只读根文件系统中重复加 i 属性(可能报错),应先判断挂载选项:
findmnt -n -o OPTIONS / | grep -q ro - 安全团队应将
chattr -i操作纳入 sudo 日志审计,禁止直接 root shell 执行

















