linux下为关键系统文件添加i(immutable)属性是最底层防篡改手段,可阻止包括root在内的所有修改操作;需用chattr +i设置、lsattr验证,且仅限单文件、不可用于动态目录或设备节点。

给核心系统文件加 i(immutable)属性,是 Linux 下最底层、最有效的防误删/防篡改手段之一。它不依赖传统权限(如 root 也能被拦住),而是直接由文件系统内核层拦截所有修改操作——包括删除、重命名、写入、链接创建等。
确认目标文件并检查当前属性
先用 lsattr 查看目标文件是否已有其他属性,避免冲突:
lsattr /etc/passwd /boot/vmlinuz-$(uname -r) /usr/bin/sudo
输出类似 ----e-------e----- /etc/passwd 表示暂无 i 属性。注意:若已含 a(append-only)或 A(no atime),一般可共存;但含 i 就不能再加其他写相关属性。
使用 chattr +i 设置不可变标志
必须以 root 身份执行,且目标需在支持该特性的文件系统上(ext4/xfs 均支持):
-
sudo chattr +i /etc/shadow—— 防止密码文件被覆盖或清空 -
sudo chattr +i /boot/grub2/grub.cfg—— 锁定启动配置,避免引导异常 -
sudo chattr +i /etc/fstab—— 防止挂载表被恶意修改导致无法启动
成功后再次运行 lsattr /etc/shadow,应看到输出含 i,例如:----i--------e----- /etc/shadow。
重要限制与注意事项
i 属性非常强硬,启用后连 root 都无法直接编辑或删除,因此务必注意:
- 不能对正在使用的内核模块、设备节点或挂载点本身设 i(如
/proc、/sys、/dev下的动态文件) - 不要对整个
/etc或/boot目录加 i,否则系统升级、配置更新会失败;应只锁定关键单文件 - 若需临时修改(如更新证书或修复配置),必须先执行
chattr -i 文件名,改完再加回去 - 某些容器环境或只读根文件系统中,i 可能被忽略或报错,需结合 mount 选项(如
ro)协同防护
配套建议:建立防护闭环
单靠 i 不足以应对全部风险,建议组合使用:
- 用
lsattr -R /etc/ | grep 'i$'定期扫描关键目录下带 i 的文件,确认未被意外清除 - 将
chattr +i操作纳入部署脚本或配置管理工具(如 Ansible 的file模块),确保一致性 - 对日志类文件(如
/var/log/secure)优先用 a(append-only),允许追加但禁止截断或覆盖 - 搭配
rpm -V(RHEL/CentOS)或dpkg --verify(Debian/Ubuntu)定期校验系统文件完整性











