chattr +i 是内核VFS层拦截的不可变锁,root也无法修改、删除或重命名文件;适用于 /etc/passwd、/etc/shadow、/etc/group、/etc/sudoers、/etc/ssh/sshd_config、/boot/grub2/grub.cfg 等静态核心配置,加锁前须备份、验证文件系统与SELinux上下文,解锁维护需严格遵循“解锁→编辑→立即重锁”流程。

chattr +i 是唯一能真正阻止 root 修改文件的方式,但加错位置或时机,系统可能直接瘫痪。
哪些文件适合加 i 属性
只保护那些「静态、极少变更、且修改必须人工介入」的核心配置:
-
/etc/passwd、/etc/shadow、/etc/group:用户身份基线,被篡改等于权限体系崩塌 -
/etc/sudoers:误删一行可能导致全员无法提权,或意外开放 ALL NOPASSWD -
/etc/ssh/sshd_config:SSH 服务入口,加了i后systemctl reload sshd会失败 -
/boot/grub2/grub.cfg(或/boot/grub/grub.cfg):启动链第一环,防持久化后门
别碰日志、临时目录、数据库数据文件——i 会让写入直接报 Permission denied,服务起不来。
chattr +i 的实际执行要点
它不是 chmod,不走权限检查,而是内核 VFS 层拦截。所以:
- 必须用
root执行,普通用户加sudo也不行(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,若类型是etc_t通常可锁;若是admin_home_t等,chattr +i可能被 SELinux 阻断
验证是否生效:lsattr /etc/sudoers,输出中必须含 i 字符,如 ----i---------e---。
加了 i 后哪些操作会直接失败
不是“没权限”,而是内核拒绝——错误信息统一为 Operation not permitted:
-
echo "test" > /etc/passwd→bash: /etc/passwd: Permission denied -
rm /etc/shadow、mv /etc/ssh/sshd_config old.conf、ln /etc/passwd link全部失败 -
usermod -aG wheel alice会卡住或报错,因它要写/etc/group和/etc/gshadow -
yum update openssh-server可能覆盖/etc/ssh/sshd_config,导致 SSH 服务启动失败
注意:chattr +i 对目录加锁时,只禁止新建/删除/重命名条目,不影响已有文件内容修改——这点常被误以为“整个目录锁死了”。
维护时怎么安全地临时解锁
不能裸着解锁再编辑再锁,中间存在时间窗口:
- 先确认无服务正在热读该文件(如
lsof /etc/ssh/sshd_config) - 解锁:
chattr -i /etc/ssh/sshd_config - 立即编辑并保存(推荐用
visudo编辑/etc/sudoers,它自带语法检查) - 立刻重锁:
chattr +i /etc/ssh/sshd_config - 最后重启服务:
systemctl restart sshd,而非 reload
如果忘了重锁,或系统升级后残留 i 属性,会导致后续所有自动更新失败,排查时容易忽略 lsattr 这步。


















