chattr +i 是唯一真正防删除的方法,因其在内核vfs层直接拦截unlink()、rename()等系统调用,使rm、mv等操作均报“operation not permitted”,连root也无法绕过;而chmod、acl、+a、+d等均无法阻止删除。

chattr +i 是唯一真正让文件不可删除的方法。其他手段(如 chmod、chown、ACL)都无法阻止 root 或进程调用 unlink() 删除文件。
为什么 chattr +i 才是真·防删
它不是在权限层拦截,而是在内核 VFS 层直接拒绝 unlink()、rename()、open(O_TRUNC) 等系统调用。只要文件带 i 属性,rm、mv、echo > file 全部报 Operation not permitted——连 root 也一样。
+a(仅追加)和 +d(禁删除)都不行:
- +a 只拦截写入方式,不拦 rm;
- +d 在多数内核版本中实际无效,或被忽略,rm 仍能成功。
执行 chattr +i 前必须确认的三件事
- 文件系统必须是
ext4或xfs:运行df -T /path/to/file,输出不是这两者(比如nfs、tmpfs、btrfs)就无效 - 挂载点必须可读写:用
mount | grep "$(dirname /path/to/file)"检查,含ro就失败 - 操作必须由真实 root 执行,且不在容器、
chroot或受限命名空间里——否则可能静默失败,lsattr也看不到i
常见误操作和验证要点
加完 +i 却还能删?大概率是以下某一种:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 锁的是符号链接本身,不是目标文件:先用
readlink -f mylink得到真实路径,再对那个路径执行chattr +i -
lsattr显示有i,但rm成功:检查是否在只读挂载点下,或文件系统根本不支持 - 对目录加
+i后touch newfile失败:这是正常行为——+i目录禁止一切元操作(新建、删、重命名),不是 bug - 解锁时路径不一致:
chattr -i /etc/sudoers有效,chattr -i sudoers(相对路径)无效
哪些文件适合加 i,哪些绝对不要碰
加 i 不是越严越好,关键是“静态基线 + 人工可控”:
- 可加:
/etc/fstab、/etc/passwd、/boot/grub2/grub.cfg——极少变更,改前必须人工确认 - 别加:
/var/log/*.log(rsyslog 写入失败)、/etc/resolv.conf(NetworkManager 动态覆盖)、/etc/ssh/sshd_config(systemctl reload sshd卡住)、任何包管理器预期覆盖的文件(如升级openssh会失败)
真正难的不是命令怎么敲,而是你加完 +i 后,是否还记得自己锁了什么、在哪、为什么锁——没有记录,迟早会卡在某个 Operation not permitted 里。










