chattr +i 是唯一能真正阻止 root 修改、删除、重命名或链接关键配置文件的内核级锁,适用于 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/sudoers、/etc/ssh/sshd_config、/boot/grub2/grub.cfg 和 /etc/fstab 等静态基线文件,加锁前须确认文件系统为 ext4/xfs、挂载非只读、并备份且锁定备份,维护时严格遵循“解锁→专用工具编辑→立即重锁”闭环流程。

chattr +i 是 Linux 中唯一能真正让关键配置文件“不可修改、不可删除、不可重命名、不可链接”的内核级锁——它不看用户权限,root 也无权绕过,所有写类操作(echo >、vim :w、rm、mv)都会报 Operation not permitted。
哪些文件必须加 i 锁
只锁定那些“改错即瘫痪、极少变更、每次修改都需人工确认”的静态基线文件:
-
/etc/passwd和/etc/shadow:用户身份与密码哈希的源头,被清空或注入会导致登录失效或提权 -
/etc/group和/etc/gshadow:组权限体系根基,篡改可能让普通用户加入wheel或root组 -
/etc/sudoers:提权策略总开关,语法错误会直接导致全员失权或开放后门 -
/etc/ssh/sshd_config:SSH 入口配置,加锁后 reload 服务前必须先临时解锁 -
/boot/grub2/grub.cfg:启动链第一环,防 Bootkit 持久化植入 -
/etc/fstab:挂载规则中枢,误改可能引发系统无法启动
加锁前必须完成的三件事
跳过任一环节,+i 可能静默失效或引发运维事故:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 确认文件系统类型:运行
df -T /path/to/file,输出必须是ext4或xfs;nfs、tmpfs、btrfs(默认)不支持 i 属性 - 检查挂载状态:执行
mount | grep "$(dirname /path)",确保不含ro(只读挂载),否则 +i 无法生效 - 备份并锁定备份本身:例如
cp /etc/sudoers /etc/sudoers.bak && chattr +i /etc/sudoers.bak,避免主文件损坏后连恢复依据都丢失
安全加锁与日常维护流程
i 属性不是“设完就不管”,必须闭环管理,否则极易因漏锁导致系统不可用:
- 以 root 执行加锁:
chattr +i /etc/passwd /etc/shadow /etc/sudoers - 立即验证:
lsattr /etc/passwd /etc/shadow,每行开头必须显示----i-------- - 维护时严格三步:先解锁 → 用专用工具编辑 → 立即重锁
例如修改 sudoers:
chattr -i /etc/sudoers→visudo(自动语法校验)→chattr +i /etc/sudoers - 建议将这三步封装成 shell 函数(如
sudoedit_sudoers),杜绝人为遗漏
常见陷阱与注意事项
很多故障源于对 +i 行为理解偏差:
- 目录加 +i 后,禁止一切元操作:不能新建、删除、重命名任何子项,哪怕子项自身没加 i —— 适合锁
/etc/ssh这类入口目录,但要避开动态生成路径(如/etc/ssh/moduli) - 别给日志、缓存、上传目录加 i:
/var/log/*.log、/etc/resolv.conf、/www/.../uploads加了会直接导致服务写入失败 - 符号链接加 i 只锁链接文件本身,不锁目标;应先
readlink -f mylink,再对真实路径操作 - 容器或云环境需确认宿主机文件系统策略是否覆盖容器内 chattr 效果










