最可靠的方式是用 chattr +i 给文件加不可变属性——它不是设只读,而是让内核在 VFS 层直接拒绝所有写、删、重命名操作,连 root 都无法绕过;必须加锁的文件包括 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/sudoers、/boot/grub2/grub.cfg 和 /etc/ssh/sshd_config,加锁前须备份、确认文件系统支持(ext4/xfs)并验证语法与SELinux上下文,维护时严格遵循“解锁→编辑→立即重锁”闭环流程。

最可靠的方式是用 chattr +i 给文件加不可变属性——它不是设只读,而是让内核在 VFS 层直接拒绝所有写、删、重命名操作,连 root 都无法绕过。
哪些文件必须加 i 锁
只锁定那些“改错一次就导致服务瘫痪”的静态核心文件:
- /etc/passwd 和 /etc/shadow:用户身份与密码哈希的源头,被清空或注入会导致登录失效或提权
- /etc/group 和 /etc/gshadow:组权限基线,防普通用户意外加入 wheel 或 root 组
- /etc/sudoers:提权策略总开关,语法错误会直接锁死所有 sudo 操作
- /boot/grub2/grub.cfg:启动链第一环,防 Bootkit 植入和启动项劫持
- /etc/ssh/sshd_config:SSH 入口配置,加锁后需 reload sshd 才生效
加锁前必须做的三件事
跳过任何一步都可能引发故障:
- 先备份原文件,并对备份也加锁:
cp /etc/sudoers /etc/sudoers.bak && chattr +i /etc/sudoers.bak - 确认文件系统支持(
df -T /etc输出应为 ext4 或 xfs) - 验证文件语法和 SELinux 上下文:
visudo -c或ls -Z /etc/sudoers(类型应为etc_t)
加锁与安全修改流程
i 属性生效后,echo、rm、mv 全部报 Operation not permitted。维护必须闭环:
- 临时解锁:
chattr -i /etc/sudoers - 用专用工具编辑(如
visudo自动校验语法) - 保存后立即重锁:
chattr +i /etc/sudoers
建议把这三步封装成 shell 函数,避免漏锁。
常见踩坑提醒
加错地方反而会让系统失能:
- 别对目录递归加
+i(如chattr -R +i /etc),包管理器、SSH 密钥生成、systemd 单元重载都会失败 - 别给动态文件加
+i:如/etc/resolv.conf(NetworkManager 管理)、/var/log/*.log(日志服务崩溃) -
+a(仅追加)不适用于配置文件——多一行就可能让服务拒绝启动 -
chmod 444或chown root:root只是辅助手段,不能替代chattr +i


















