chattr +i 是防止 root 级恶意进程篡改的最底层手段,通过内核 vfs 层拦截强制禁止修改、删除、重命名等操作;必须保护 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow 四类关键文件,加锁前需验证配置并备份,解锁后须立即重锁。

直接用 chattr +i 给核心配置文件加不可修改属性,是防止 root 权限下恶意进程篡改最有效、最底层的手段之一。它作用于文件系统元数据层,绕过传统权限检查,即使攻击者已获得 root 权限,也无法删除、重命名、覆盖或修改被标记为 i(immutable)的文件。
哪些文件必须加 i 属性
重点保护以下四类系统关键文件,它们一旦被篡改,可能导致身份认证失效、权限失控或后门持久化:
- /etc/passwd:用户账户基本信息,若被注入 UID=0 的新用户,等于开放 root 后门
- /etc/shadow:密码哈希存储地,被替换或清空将导致任意登录或锁定合法用户
- /etc/group:组定义文件,篡改可使普通用户加入 wheel 或 root 组
- /etc/gshadow:组密码文件,虽少用,但与 /etc/group 配套受控才完整
执行加锁操作(需 root 权限)
在终端中逐条运行(注意:加锁前确保配置无误,否则系统可能无法正常登录):
chattr +i /etc/passwdchattr +i /etc/shadowchattr +i /etc/groupchattr +i /etc/gshadow
验证是否生效:lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow,应看到每行开头都有 ----i-------- 标记。
加锁后的必要注意事项
i 属性极其严格,加锁后任何操作(包括 root)都会失败,因此必须同步建立安全运维流程:
- 修改配置前,必须先执行
chattr -i /path/to/file解锁,操作完成立即重新加锁 - 禁止在脚本或自动化任务中漏掉加锁步骤;建议将“解锁→编辑→加锁”封装为原子函数
- 不要对目录加
i(不支持),如需保护整个 /etc,可用chattr +a或结合chroot+ 只读挂载 - 备份加锁前的原始文件(如
cp /etc/passwd /etc/passwd.bak),并用chattr +i一并保护备份
它为什么能防 root 级恶意进程
因为 i 属性由内核在 VFS 层强制拦截,所有 write、unlink、rename、truncate 等系统调用在进入具体文件系统前就被拒绝。恶意进程哪怕调用 open(..., O_WRONLY) 或 system("rm -f /etc/shadow"),内核均返回 EPERM 错误——这不是权限不足,而是策略禁止。
该机制不依赖 SELinux/AppArmor 等上层框架,也不受 ulimit 或 capabilites 影响,只要文件系统支持(ext4/xfs 均支持),就构成一道硬隔离边界。











