chattr +i是唯一能真正防止root修改关键文件的内核级方案,适用于/etc/passwd、/etc/shadow等静态配置,需先备份验证再锁定,且不可用于动态文件或整个目录。

直接锁定关键配置目录权限,不能替代对单个口令文件(如 /etc/passwd、/etc/shadow)的精准属性控制。目录级权限(如 chmod 750 /etc)无法阻止 root 或已提权进程修改其下文件;真正防篡改的核心是 chattr +i 文件级不可变属性,配合最小权限与流程管控。
只对真正静态的关键口令相关文件加 +i,不锁整个 /etc 目录
盲目对 /etc 目录递归加 chattr -R +i 会导致严重故障:包管理器(yum/dnf/apt)无法写入新配置、SSH 密钥生成失败、systemd 单元更新报错。必须聚焦具体文件:
- /etc/passwd:用户账号基础,锁定前确认 useradd/usermod 等工具已适配(通常需配合 PAM 配置)
- /etc/shadow:密码密文存储,必须确保 cron、auth 更新机制不依赖实时写入
- /etc/group 和 /etc/gshadow:组信息及组密码,同理需验证 groupadd 等操作兼容性
- 避开 /etc/resolv.conf、/etc/hostname 等云平台或 NM 动态写入文件,否则 DNS 或主机名立即失效
执行锁定必须严格走“备份→验证→锁定”三步
跳过任一环节极易引发系统启动失败或服务中断:
- 先备份:运行 cp /etc/shadow /etc/shadow.bak,并用 sha256sum /etc/shadow* 记录哈希值
- 再验证:对 /etc/shadow 本身无需语法检查,但需确认当前登录、sudo、su 等认证流程完全正常
- 后锁定:以 root 执行 chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow,再用 lsattr /etc/shadow 确认输出含 i 标志(如 ----i---------e---)
- 破坏性测试:尝试 echo test >> /etc/shadow,应返回 Operation not permitted
配套防护动作缺一不可
仅加 +i 是起点,生产环境必须闭环:
- 所有变更走受控脚本:例如封装为 chattr -i /etc/shadow && vipw && chattr +i /etc/shadow && logger "shadow updated"
- 在麒麟等信创系统中叠加 KYSEC:运行 kysecctl --set config-immutable=on 并重启 kysec 服务,增强内核级抗绕过能力
- 启用审计监控:执行 auditctl -w /etc/shadow -p wa -k shadow_protect,后续可用 ausearch -k shadow_protect 追踪异常访问
- 禁止将 chattr 工具挪走或改名:该操作破坏运维可追溯性,且攻击者可通过 debugfs、dd 写块设备等方式绕过,反而增加排障难度
为什么不用 chmod 或 ACL 锁定 /etc 目录
目录权限(如 chmod 700 /etc)仅控制对该目录本身的读写执行,不影响其下文件内容修改。root 用户仍可直接 open/write /etc/shadow;普通用户即使无 /etc 写权限,只要对 /etc/shadow 有写权限(默认属主 root:root,权限 600),依然能覆盖内容。而 chattr +i 是文件系统层的强制标志,内核在 write() 系统调用时即拦截,不依赖用户权限位,防御层级更高。

















