为什么必须全局可读但只有 root 可写
/etc/passwd 与 /etc/group 是账号与组映射的公开索引:几乎所有程序都要读它来做 UID 与用户名的转换,所以必须 0644 全局可读。反过来,只要这两个文件对非 root 身份可写,攻击者就能直接添加一个账号、把自己的组改成特权组,或者篡改某账号的 home 与 shell,权限提升一步到位。可写是这里唯一不可接受的状态。
基本信息
| 加固项 | 账号与组文件写保护 |
|---|---|
| 适用平台 | Linux(RHEL/CentOS/Debian/Ubuntu) |
| 风险等级 | 高 |
| 基线值 | /etc/passwd、/etc/group、/etc/passwd-、/etc/group- 均为 0644 root:root |
| 校验工具 | pwck、grpck |
典型使用场景
- 基线核查:确认四个文件都是 0644 root:root
- 权限事故排查:应用部署脚本用宽松 umask 跑过后,文件权限常被意外改宽
- 应急响应:passwd 被改过说明攻击者可能已获得 root 级写入能力
- 批量整改复核:改完之后把四个文件一起看,避免只改主文件
- 等保测评:文件权限是访问控制条款的固定证据项
核查命令
核查命令
stat -c '%a %U:%G %n' /etc/passwd /etc/group /etc/passwd- /etc/group-
ls -l /etc/passwd /etc/group # 交叉确认,备份文件也要一起列
stat -c '%y %n' /etc/passwd /etc/group # 修改时间异常要追查来源
find /etc -maxdepth 1 -name 'passwd*' -o -maxdepth 1 -name 'group*' # 找齐相关文件加固与校验
加固与校验
chmod 0644 /etc/passwd /etc/group /etc/passwd- /etc/group-
chown root:root /etc/passwd /etc/group /etc/passwd- /etc/group-
pwck -r # 账号文件一致性只读检查
grpck -r # 组文件一致性只读检查
stat -c '%a %U:%G %n' /etc/passwd /etc/group # 复核目标权限对照
| 文件 | 基线 | 说明 |
|---|---|---|
| /etc/passwd | 0644 root:root | 全局可读,仅 root 可写 |
| /etc/group | 0644 root:root | 可写即可自加特权组,同样高危 |
| /etc/passwd- | 0644 root:root | 改账号时的备份,容易被漏检 |
| /etc/group- | 0644 root:root | 同上,检查脚本要一起覆盖 |
0644 是标准值,不要擅自改成 0600:大量程序依赖读取用户名映射,权限过严会出现 ls 只显示数字 UID、部分服务启动失败这类难以定位的异常。
只检查 passwd 而漏掉 group 是常见疏漏:group 可写意味着能把无关账号加进 wheel、sudo、docker 等特权组,效果等同于提权,风险不比 passwd 小。
用 pwck 与 grpck 做内容校验
权限正确不代表内容正常。pwck 与 grpck 会检查账号与组文件的结构一致性,例如引用了不存在的家目录、重复的 UID、找不到对应组的 GID。它们只做只读检查,适合在核查阶段跑,报告里连同工具输出一起留档,比只写一行「权限正确」更有说明力。