真正有效的做法是逐个识别关键二进制文件,先规范权限与属主,再用chattr +i锁定单个文件,并辅以审计与校验机制。路径级统一锁定会破坏系统更新与运维;需精准识别setuid/setgid文件、清理高风险权限、检查进程占用后加锁、配置auditd审计规则、建立哈希校验告警闭环。

直接对系统二进制库路径(如 /bin、/usr/bin、/sbin)整体加锁不可行,也不安全。真正有效的做法是:**逐个识别关键二进制文件,先规范权限与属主,再用 chattr +i 锁定单个文件本身,并辅以审计与校验机制**。路径级“统一锁定”会破坏系统更新、服务启动和日常运维。
一、精准识别并清理高风险二进制文件
不要笼统锁整个 /usr/bin 目录。先找出真正需要保护的敏感程序:
- 运行命令定位所有 setuid/setgid 文件:
find /bin /sbin /usr/bin /usr/sbin -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null - 重点检查:
/usr/bin/sudo、/bin/su、/bin/ping、/usr/bin/passwd、/bin/mount - 移除非必要的 setuid 权限:
sudo chmod u-s /usr/bin/wall、sudo chmod u-s /usr/bin/chsh - 确认属主为
root:root,权限符合最小化原则(如sudo应为-rwsr-xr-x)
二、对单个关键文件启用不可变属性(chattr +i)
chattr +i 是用户空间最硬的防护手段,但必须满足前提:文件未被任何进程加载执行。
- 检查是否正在运行:
sudo lsof /usr/bin/sudo或sudo fuser -v /bin/su - 若被占用,停止相关服务(如
sudo systemctl stop sudo不适用,应停依赖它的服务;实际中常需在维护窗口或重启后操作) - 加锁命令(root 执行):
sudo chattr +i /usr/bin/sudo /bin/su /bin/ping - 验证:
lsattr /usr/bin/sudo应显示含i标志(如----i---------e---) - 注意:
+i后连 root 也无法修改、删除、重命名或写入——升级前必须先chattr -i
三、绑定审计规则,捕获绕过行为
即使文件被锁,攻击者仍可能尝试执行、链接或通过其他路径调用。用 auditd 记录所有关键动作:
- 添加永久规则(写入
/etc/audit/rules.d/bin-protect.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-a always,exit -F path=/etc/shadow -F perm=w -k shadow_write - 重载规则:
sudo augenrules --load && sudo systemctl restart auditd - 查执行记录:
sudo ausearch -k sudo_exec | aureport -f -i
四、建立自动化完整性校验与告警
防止 chattr 属性被清除或文件被替换,需定时比对哈希并告警:
- 生成初始可信快照:
sudo find /bin /sbin /usr/bin /usr/sbin -type f -perm /111 2>/dev/null | xargs -r sha256sum | sort > /var/lib/integrity-check/core-bin.sha256 - 编写校验脚本(如
/usr/local/bin/check-core-bin.sh),每次重新计算当前哈希,用diff比对 - 加入 cron 每小时执行:
0 * * * * /usr/local/bin/check-core-bin.sh 2>&1 | logger -t bin-integrity - 发现差异时触发邮件或企业微信通知(脚本内用
mail或curl调用 webhook)
不复杂但容易忽略:chattr +i 不是万能开关,它必须和权限清理、进程管控、审计追踪、定期校验形成闭环。单独做任何一项,防护都可能被绕过。











