单用户与救援模式的认证要求
等级保护与主机安全基线普遍要求:进入单用户、救援或紧急模式必须经过口令认证,否则能接触设备的人可以不输密码直接拿到 root 权限。systemd 环境下这一层由 rescue/emergency 单元调用 sulogin 实现,是否真的生效取决于单元文件里的 ExecStart 有没有带该参数。
为什么这是一道门
救援模式的设计初衷是本地排障:不进完整启动流程也能拿到高权限 shell 去修系统,代价就是任何能接触设备的人都可能绕过登录认证。因此物理安全不足的机房必须靠口令把关;而 GRUB 菜单如果允许随意编辑内核参数,攻击者可以换一个不需要认证的启动目标,口令这道门也就形同虚设。
基本信息
| 适用平台 | 使用 systemd 的 Linux 发行版(麒麟、UOS、openEuler、CentOS 7+ 等) |
|---|---|
| 关键单元 | rescue.service、emergency.service |
| 认证程序 | sulogin,要求输入 root 口令 |
| 配套措施 | GRUB 菜单口令,防止追加内核参数绕过 |
典型使用场景
- 等保测评现场需要提供救援模式口令认证的核查证据
- 安全基线加固后复核加固项是否真的生效,而不只是改了配置文件
- 新到货整机做交付前安全检查,确认默认模板没有留下免密入口
- 安全事件回溯时判断攻击者是否利用单用户模式绕过认证
- 操作系统大版本升级后重新检查默认单元是否仍带认证参数
核查与验证
核查与验证
# 查看两个单元实际调用的命令
grep -n -- '-s\|sulogin' /usr/lib/systemd/system/rescue.service
grep -n -- '-s\|sulogin' /usr/lib/systemd/system/emergency.service
systemctl cat rescue.service | grep -i execstart
# 验证方法:在测试机重启,在 GRUB 编辑内核行追加
# systemd.unit=rescue.target
# 观察是否弹出 root 口令提示;直接进入 shell 即该加固项不合格
# 若 GRUB 菜单可直接编辑,说明还缺 GRUB 口令保护核查项与判定
| 核查项 | 合格表现 | 不合格表现 |
|---|---|---|
| 救援模式认证 | 进入前要求输入 root 口令 | 直接给出高权限 shell |
| 紧急模式认证 | 同样要求口令 | 绕过救援模式改从紧急模式进入 |
| GRUB 保护 | 菜单不可编辑或编辑需口令 | 可自由追加内核参数 |
| 口令强度 | root 口令符合复杂度要求 | root 无口令或使用默认口令 |
| 审计留痕 | 加固项有核查命令与输出记录 | 只有口头结论,无法提供证据 |
多数发行版模板默认已带 sulogin,真正容易漏的是 GRUB 无人守护:能编辑内核参数的机器,等于两道门只关了一道,两处要一起核查。