chattr +i 是 linux 内核级防篡改手段,须对 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/sudoers、/etc/fstab、/boot/grub2/grub.cfg、/etc/ssh/sshd_config 等关键静态文件加锁,操作前需备份、验证状态及文件系统支持,维护时严格遵循“解锁→编辑→重锁”闭环流程。

用 chattr +i 给核心系统文件加不可变属性,是 Linux 下最底层、最硬核的防篡改手段——它不看用户权限,连 root 都无法绕过,直接由内核在文件系统层拦截所有修改操作。
哪些文件必须加 +i
只锁定真正静态、极少变更、且一旦出错就会导致系统瘫痪的关键配置文件:
- /etc/passwd 和 /etc/shadow:用户身份与密码哈希的唯一来源,被清空或注入 UID=0 用户等于开放 root 后门
- /etc/group 和 /etc/gshadow:组权限基线,篡改可能让普通用户加入 wheel 或 root 组
- /etc/sudoers:提权策略总开关,语法错误会导致全员失权;务必配合 visudo -c 验证后再加锁
- /etc/fstab 和 /boot/grub2/grub.cfg:挂载表和启动配置,被改错将直接导致无法启动
- /etc/ssh/sshd_config:SSH 入口配置,加锁后需用 systemctl reload sshd 生效
加锁前必须做的三件事
跳过任一环节都可能引发生产事故:
- 备份原始文件:例如 cp /etc/sudoers /etc/sudoers.bak,并对备份也执行 chattr +i,防止备份被覆盖
- 验证当前状态:运行 lsattr /etc/sudoers,确认输出类似 ----------------e--- /etc/sudoers(无 i 标志)
- 检查文件系统支持:执行 df -T /etc,确保类型为 ext4 或 xfs;非本地文件系统(如 NFS、FAT)不支持 +i
正确加锁与验证方法
以 root 身份逐条执行,不要递归作用于整个目录(chattr -R +i /etc 是高危操作):
- 设置不可变:chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
- 立即验证效果:lsattr /etc/passwd /etc/shadow,应看到每行开头含 ----i--------
- 破坏性测试:echo test >> /etc/passwd 应返回 Operation not permitted,而非静默成功
日常维护必须遵守的操作闭环
i 属性生效后,任何编辑都会失败。维护时必须严格走“解锁→编辑→重锁”流程:
- 临时解锁:chattr -i /etc/sudoers
- 用专用工具编辑:visudo(自动语法校验),避免保存失败导致系统不可用
- 编辑完成立刻重锁:chattr +i /etc/sudoers
- 建议封装成脚本函数,杜绝漏锁风险;例如:chattr -i /etc/fstab && mount -a && chattr +i /etc/fstab











