chattr +i 是唯一能真正阻止 root 修改文件的方式,它在内核 vfs 层拦截 write、unlink、rename 等系统调用,使 root 执行 echo >、rm、mv 等操作均返回 operation not permitted。

chattr +i 是唯一能真正阻止 root 修改文件的方式
chmod 444 只是让普通用户不能写,root 仍可直接覆盖或删除;chattr +i 则在内核 VFS 层拦截 write、unlink、rename、truncate 等系统调用,连 root 也返回 Operation not permitted。这意味着:echo "x" > /etc/sudoers、rm -f /etc/passwd、mv sshd_config old 全部失败——哪怕权限是 777。
哪些文件能加 i 属性,哪些绝对不能碰
加 +i 前必须确认该文件是「静态、极少变更、且修改必须人工介入」的:
-
/etc/passwd、/etc/shadow、/etc/group:身份基线,被篡改等于权限体系崩塌 -
/etc/sudoers:误删一行可能导致全员无法提权,或意外开放ALL NOPASSWD -
/boot/grub2/grub.cfg:启动链第一环,防持久化后门
以下场景加 +i 会直接导致服务异常:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 日志文件(如
/var/log/messages):写入报Permission denied,rsyslog崩溃 - 数据库数据目录(如
/var/lib/mysql):mysqld启动失败 - 被包管理器预期覆盖的文件(如
/etc/ssh/sshd_config升级时会被重写) - 由
NetworkManager动态生成的/etc/resolv.conf
chattr +i 实操中高频踩坑点
新手常在没验证前提下直接执行 chattr +i,结果维护时连 visudo 都打不开:
- 必须用
root执行:sudo chattr +i可以,但本质仍是 root 权限 - 加锁前先备份到其他挂载点:
cp /etc/sudoers /backup/sudoers.$(date +%s),因为加完+i后cp也会失败 - 确认文件系统支持:
df -T /etc输出应为ext4或xfs;FAT32/NTFS挂载点不支持 - 检查 SELinux 上下文:
ls -Z /etc/sudoers,若类型是admin_home_t,可能需先调整策略再加锁
解锁和验证流程不能跳过
chattr +i 不是“设只读”,而是彻底冻结元操作。解锁必须显式执行 chattr -i,且要确保:
- 先
chattr -i /path/to/file,再做修改,改完立刻重新加锁 - 用
lsattr /path/to/file验证属性是否生效(输出含i字符才表示锁定成功) - 测试关键操作:
sudo echo test >> /path/to/file应报错,sudo rm /path/to/file也应失败
最易被忽略的是:加锁后所有依赖写入该文件的自动化流程(如 yum update、systemctl reload sshd)都会卡住或报错,必须提前规划人工介入窗口。










