chattr +i 是唯一真正防移动的方案,它通过内核VFS层拦截rename等系统调用,使文件无法被重命名、删除、修改或链接,即使root执行mv也会报“Operation not permitted”。

要防止文件被移动,关键不是改权限(chmod),而是锁定文件的“不可重命名/不可删除”属性——这需要使用 chattr +i 命令。
为什么 chmod 不能防移动?
移动(mv)操作本质是:在目标位置创建新链接 + 删除源文件。只要用户对源文件所在目录有写权限,就能删掉该文件条目;只要对目标目录有写权限,就能新建条目。所以即使文件本身是 444 或 600,只要目录可写,文件仍可被移走。
chmod 控制的是文件内容的读写执行,不控制目录内条目的增删改名。
真正防移动:用 chattr +i 锁定文件
chattr +i 是内核级防护,加锁后文件无法被:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 修改内容(write)
- 删除(unlink)
- 重命名或移动(rename)
- 硬链接或软链接指向它(link/symlink)
- 清空(truncate)
即使 root 用户执行 mv /etc/passwd /tmp/ 或 rm -f /etc/passwd,也会报错:Operation not permitted。
示例:
sudo chattr +i /etc/hostslsattr /etc/hosts → 输出中含 i 字符(如
----i---------e---)即生效。
对目录加 i 属性的特殊效果
给目录加 chattr +i(如 sudo chattr +i /etc/ssh):
- ✅ 禁止在该目录下新建、删除、重命名任何文件或子目录
- ✅ 禁止移动该目录本身(因为父目录需写权限才能改其子项名)
- ⚠️ 但已有文件的内容仍可被修改(除非这些文件自己也加了 +i)
也就是说:目录加 +i = 锁住目录结构,不锁内部文件内容。
操作前必须注意的要点
- 仅限 ext2/ext3/ext4/xfs 文件系统(
df -T /path查看) - 必须由 root 执行;普通用户加不了,也删不掉
- 加锁前务必备份:
cp /etc/sudoers /backup/sudoers.$(date +%s) - 加锁后,任何依赖写入该文件的服务(如
visudo、useradd、yum update)都会失败 - 解锁命令:
sudo chattr -i /path/to/file

















