/etc/shadow权限不能设为000,因其会导致root无法读取而使系统认证失效;应设为600或640,配合chattr +i和SELinux上下文实现权限控制、不可变属性与访问隔离三重防护。

直接设为 000(即 ---------)不是常规操作,也不推荐作为默认加固手段。Linux 系统中 /etc/shadow 的权限本质依赖内核强制访问控制,但“000”在实际文件系统中无法通过 chmod 设置——它会被解释为 --- --- ---,即所有位全关,连 root 也无法读写,会导致系统认证完全失效。
为什么不能真用 000 权限
该权限意味着:root 用户无读写权、组和其他用户也无任何权限。而 pam_unix.so、login、su 等关键认证组件必须以 root 身份打开并读取 /etc/shadow。若权限为 000,这些进程将因 open() 失败而拒绝所有登录,系统瘫痪。
- Linux 内核对
/etc/shadow的访问限制并非仅靠 POSIX 权限实现,而是结合了 uid 检查:只有 uid=0 的进程才能成功 open 该文件,无论权限位如何设置 - 因此,即使显示为
---------(stat 输出为 000),只要属主是 root,root 进程仍可访问;但普通用户执行cat /etc/shadow仍会返回Permission denied - 真正起作用的是 属主必须为 root + 无其他用户可读位,而非“000”这个数字本身
实际应采用的最小权限组合
生产环境应使用明确、可验证、兼容服务的权限方案:
-
最严场景(推荐):权限
600(-rw-------),属主属组均为root:root—— 所有非 root 用户彻底隔离 -
兼容 PAM 或 shadow 组机制:权限
640(-rw-r-----),属主root,属组shadow—— 允许passwd等 setgid 工具安全调用 - 无论哪种,都必须清除特殊权限:
sudo chmod u-s,g-s,o-t /etc/shadow
验证是否真正受控
权限设置后,必须实测非 root 用户是否无法获取内容:
- 切换到普通用户:
su - testuser - 执行:
cat /etc/shadow→ 应返回Permission denied(不是空输出或报错找不到文件) - 检查是否被脚本或监控工具意外读取:
sudo lsof /etc/shadow或审计日志ausearch -m avc -ts recent - 确认
/etc/passwd第二字段全为x,且权限为644,避免密码回退到明文存储
进阶防护:chattr +i 防篡改
当系统已稳定运行,且确认配置无误,可用不可变属性进一步防 root 级恶意修改:
-
sudo chattr +i /etc/shadow—— 即使攻击者获得 root 权限,也无法覆盖或清空该文件 - 验证:
lsattr /etc/shadow应显示----i-------- - 注意:修改前务必备份,解锁需先执行
chattr -i,否则连 root 也无法编辑

















