chattr +i 是 linux 中通过文件系统元数据实现的不可变属性,可阻止包括 root 在内的任何用户修改、删除或重命名文件,常用于锁定 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow 等核心配置文件以防范篡改。

chattr +i 是 Linux 中最底层、最硬核的文件保护手段之一,它直接作用于文件系统元数据,能让即使 root 用户也无法修改、删除或重命名目标文件——除非先解除该属性。这在防范恶意脚本、误操作甚至部分提权后的破坏行为时非常关键。
但要注意:+i 不是万能盾牌,它只防“改”,不防“读”;启用后连 root 也受限,所以必须慎用、精准用。
为什么用 chattr +i 锁核心配置文件?
-
/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow是用户身份与权限的根基。 - 一旦被篡改(比如添加恶意 root 用户、清空 shadow 密码),系统就可能彻底失守。
- 普通权限控制(如 chmod、SELinux、AppArmor)都运行在内核之上,而
chattr +i是内核对 ext4/xfs 等文件系统的原生支持,优先级更高。 - 即使攻击者已拿到 root shell,只要没先执行
chattr -i,就无法覆盖这些文件。
哪些文件适合加 +i?
以下四类文件是加固首选,也是 CentOS/RHEL 系统安全配置中明确推荐的:
-
/etc/passwd—— 用户账户基本信息(UID/GID/Shell/家目录等) -
/etc/shadow—— 加密密码及口令策略(必须锁定!) -
/etc/group—— 用户组定义 -
/etc/gshadow—— 组密码与管理员列表
⚠️ 注意:不要给
/etc/passwd或/etc/shadow加+i后再运行useradd、passwd等命令,否则会失败。日常运维中建议仅在系统稳定、无需频繁增删用户时启用;或配合自动化流程,在变更前临时解锁、变更后立即重锁。
实际操作步骤(需 root 权限)
# 1. 先确认当前属性(应为空或不含 i) lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow # 2. 一次性加不可修改属性(i = Immutable) chattr +i /etc/passwd chattr +i /etc/shadow chattr +i /etc/group chattr +i /etc/gshadow # 3. 验证是否生效 lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow # 输出应类似:----i---------e--- /etc/passwd
✅ 成功标志:
lsattr显示结果中包含字母i,且无报错。
如何临时解除锁定(运维必需技能)
当需要新增用户、重置密码或调整组时:
# 先移除 i 属性 chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow # 执行变更(例如) useradd -m -s /bin/bash alice echo "alice:password123" | chpasswd # 变更完成,立刻重新上锁 chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
? 强烈建议把“解锁→操作→重锁”写成小脚本,并加入日志和人工确认环节,避免遗忘重锁。
风险与注意事项
-
+i对目录也有效,但效果不同:目录加+i后,不能新建、删除、重命名其中任何文件(仍可修改已有文件内容,除非其本身也有+i)。 - 不要对
/根目录、/boot、/proc、/sys等特殊路径使用+i,会导致系统无法启动或异常。 - 某些容器环境或云镜像可能禁用
chattr(如 overlayfs 不完全支持),需提前验证lsattr是否可用。 - 若系统使用了 LVM 快照、只读挂载或 systemd 的
ProtectSystem=strict,chattr +i是良好补充,而非替代。
不复杂但容易忽略。











