chattr +i 是内核 vfs 层强制拦截写操作的不可变标记,适用于 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/sudoers、/etc/ssh/sshd_config 和 /boot/grub2/grub.cfg 等静态核心文件;加锁前须备份、确认文件系统支持 ext4/xfs、检查 selinux 上下文;操作需 root 逐文件执行,编辑时严格遵循“chattr -i → 编辑 → chattr +i”闭环流程。

直接用 chattr +i 给关键文件加不可变标记,是权限管理中最硬核的防篡改手段——它不看用户身份、不走权限检查,由内核 VFS 层直接拦截所有写操作,连 root 也无权修改或删除。
哪些文件适合加 +i 属性
只锁定那些“静态、极少变更、改错即瘫痪”的核心配置:
- /etc/passwd 和 /etc/shadow:用户身份与密码哈希的源头,被注入 UID=0 用户或清空 shadow 就等于开放后门
- /etc/group 和 /etc/gshadow:组权限基线,篡改可能让普通用户加入 wheel 或 root 组
- /etc/sudoers:提权策略总开关,语法错误会导致全员失权或开放 ALL NOPASSWD
- /etc/ssh/sshd_config:SSH 入口配置,加锁后 reload 操作会失败,需手动触发生效
- /boot/grub2/grub.cfg(或 /boot/grub/grub.cfg):启动链第一环,防 Bootkit 持久化植入
加锁前必须做的三件事
跳过任何一步都可能导致系统无法登录或服务异常:
- 先备份原始文件,且备份也建议加 +i(如
cp /etc/sudoers /backup/sudoers.$(date +%s),再chattr +i /backup/sudoers.*) - 确认文件系统支持:运行
df -T /etc,输出应为 ext4 或 xfs;FAT32/NTFS 挂载点不支持 - 检查 SELinux 上下文:
ls -Z /etc/sudoers,若类型非etc_t(如admin_home_t),可能被 SELinux 阻断,需先调整策略
正确设置 +i 的操作流程
必须以 root 身份逐条执行,不能批量对目录加(否则升级失败):
- 查看当前状态:
lsattr /etc/passwd /etc/shadow,确认输出不含 i - 加锁:
sudo chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/sudoers - 立即验证:
lsattr /etc/passwd应显示类似 ----i--------e-----,开头有 i 才算生效 - 测试防护效果:
sudo echo test > /etc/passwd或sudo rm /etc/shadow均应返回 Operation not permitted
安全维护时怎么临时修改
加了 +i 后,任何编辑都会失败。必须严格按“解锁→编辑→重锁”闭环操作:
- 临时解锁:
sudo chattr -i /etc/sudoers - 用专用工具编辑(如
sudo visudo,自动校验语法,避免保存失败导致系统不可用) - 保存后立刻重锁:
sudo chattr +i /etc/sudoers - 建议把这三步封装成脚本函数,杜绝漏锁风险
不复杂但容易忽略:+i 是文件系统级冻结,不是权限控制。它有效,但也脆弱——设错位置或忘记重锁,系统就可能卡住。











