如何实战操作设置系统运行级及单用户模式下的密码保护?

2026-05-07 19:302阅读0评论SEO资源
  • 内容介绍
  • 相关推荐

本文共计1000个文字,预计阅读时间需要4分钟。

如何实战操作设置系统运行级及单用户模式下的密码保护?

系统运行级和单用户模式若无密码保护,攻击者可轻易绕过登录界面进入root权限,造成严重安全隐患。关键在于:

配置 GRUB2 启动菜单密码(防止直接编辑内核参数)

这是防护单用户模式的第一道防线。没有它,任何人重启时按 e 键就能修改 kernel 参数(如添加 init=/bin/bashrd.break)跳过密码验证。

  • 生成加密密码:
    sudo grub2-mkpasswd-pbkdf2
    按提示输入密码,复制输出中 grub.pbkdf2.sha512... 开头的整段密文
  • 编辑 GRUB 配置:
    sudo vi /etc/grub.d/40_custom
    在文件末尾添加:

    set superusers="admin" password_pbkdf2 admin grub.pbkdf2.sha512.10000.……(粘贴刚才的密文)

  • 更新 GRUB 配置:
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg

完成后重启,启动菜单按 ce 时会要求输入用户名 admin 和对应密码。

禁用无密码的单用户模式(systemd 系统重点)

传统 SysV 的 init=/bin/bash 在 systemd 下已不直接生效,但 rd.breaksystemd.unit=emergency.target 仍可触发免密 root shell。必须限制这些入口。

  • 移除内核参数中的危险选项:
    检查当前启动项:
    sudo grep "kernelopts" /boot/grub2/grubenv
    若含 rd.breakinit=/bin/bashsystemd.unit=emergency.target,需清除
  • 锁定 emergency 和 rescue 模式:
    执行:
    sudo systemctl mask emergency.target rescue.target
    这会创建符号链接阻止其被激活
  • 设置 emergency/rescue 模式密码(可选但推荐):
    sudo systemctl edit emergency.target
    输入:

    [Service] ExecStart= ExecStart=-/usr/lib/systemd/systemd-user-sessions --force ExecStart=-/usr/lib/systemd/systemd-user-sessions --mode=lock
    保存后执行 sudo systemctl daemon-reload

确保多用户运行级(runlevel 3/5)启用完整认证

运行级本身不决定是否要密码,真正起作用的是显示管理器(如 gdm3、sddm)或 getty 服务。需确认登录流程未被绕过。

  • 检查默认 target:
    systemctl get-default
    应为 graphical.target(对应 runlevel 5)或 multi-user.target(runlevel 3)
  • 确认 getty@.service 已启用且未禁用密码验证:
    systemctl status getty@tty1.service
    查看是否 Active (running),并确认其配置中无 --noclear--autologin=root 类参数
  • 禁用自动登录(尤其桌面环境):
    GNOME:编辑 /etc/gdm3/custom.conf,确保 AutomaticLoginEnable=false
    KDE:检查 /etc/sddm.confAutoLoginEnable=false

验证与测试(务必在维护窗口操作)

配置完成后,必须实地验证防护是否生效,避免锁死自己。

  • 重启进入 GRUB 菜单,尝试按 e 编辑启动项 → 应弹出密码提示
  • 尝试添加 rd.break 并 Ctrl+X 启动 → 应卡在 initramfs 阶段或报错“Permission denied”
  • 重启后选择 “Rescue Mode” 或 “Emergency Mode” → 应无法进入,或进入后立即要求 root 密码
  • 正常启动后,切换到 tty2(Ctrl+Alt+F2),确认提示 login: 且 root 不允许直接登录(除非明确配置了 root 密码且 PermitRootLogin yes)

不复杂但容易忽略。核心就三点:GRUB 加密锁住入口、systemd 屏蔽危险 target、登录服务关闭自动认证。做完这三步,单用户模式和运行级的安全基线才算真正建立。

本文共计1000个文字,预计阅读时间需要4分钟。

如何实战操作设置系统运行级及单用户模式下的密码保护?

系统运行级和单用户模式若无密码保护,攻击者可轻易绕过登录界面进入root权限,造成严重安全隐患。关键在于:

配置 GRUB2 启动菜单密码(防止直接编辑内核参数)

这是防护单用户模式的第一道防线。没有它,任何人重启时按 e 键就能修改 kernel 参数(如添加 init=/bin/bashrd.break)跳过密码验证。

  • 生成加密密码:
    sudo grub2-mkpasswd-pbkdf2
    按提示输入密码,复制输出中 grub.pbkdf2.sha512... 开头的整段密文
  • 编辑 GRUB 配置:
    sudo vi /etc/grub.d/40_custom
    在文件末尾添加:

    set superusers="admin" password_pbkdf2 admin grub.pbkdf2.sha512.10000.……(粘贴刚才的密文)

  • 更新 GRUB 配置:
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg

完成后重启,启动菜单按 ce 时会要求输入用户名 admin 和对应密码。

禁用无密码的单用户模式(systemd 系统重点)

传统 SysV 的 init=/bin/bash 在 systemd 下已不直接生效,但 rd.breaksystemd.unit=emergency.target 仍可触发免密 root shell。必须限制这些入口。

  • 移除内核参数中的危险选项:
    检查当前启动项:
    sudo grep "kernelopts" /boot/grub2/grubenv
    若含 rd.breakinit=/bin/bashsystemd.unit=emergency.target,需清除
  • 锁定 emergency 和 rescue 模式:
    执行:
    sudo systemctl mask emergency.target rescue.target
    这会创建符号链接阻止其被激活
  • 设置 emergency/rescue 模式密码(可选但推荐):
    sudo systemctl edit emergency.target
    输入:

    [Service] ExecStart= ExecStart=-/usr/lib/systemd/systemd-user-sessions --force ExecStart=-/usr/lib/systemd/systemd-user-sessions --mode=lock
    保存后执行 sudo systemctl daemon-reload

确保多用户运行级(runlevel 3/5)启用完整认证

运行级本身不决定是否要密码,真正起作用的是显示管理器(如 gdm3、sddm)或 getty 服务。需确认登录流程未被绕过。

  • 检查默认 target:
    systemctl get-default
    应为 graphical.target(对应 runlevel 5)或 multi-user.target(runlevel 3)
  • 确认 getty@.service 已启用且未禁用密码验证:
    systemctl status getty@tty1.service
    查看是否 Active (running),并确认其配置中无 --noclear--autologin=root 类参数
  • 禁用自动登录(尤其桌面环境):
    GNOME:编辑 /etc/gdm3/custom.conf,确保 AutomaticLoginEnable=false
    KDE:检查 /etc/sddm.confAutoLoginEnable=false

验证与测试(务必在维护窗口操作)

配置完成后,必须实地验证防护是否生效,避免锁死自己。

  • 重启进入 GRUB 菜单,尝试按 e 编辑启动项 → 应弹出密码提示
  • 尝试添加 rd.break 并 Ctrl+X 启动 → 应卡在 initramfs 阶段或报错“Permission denied”
  • 重启后选择 “Rescue Mode” 或 “Emergency Mode” → 应无法进入,或进入后立即要求 root 密码
  • 正常启动后,切换到 tty2(Ctrl+Alt+F2),确认提示 login: 且 root 不允许直接登录(除非明确配置了 root 密码且 PermitRootLogin yes)

不复杂但容易忽略。核心就三点:GRUB 加密锁住入口、systemd 屏蔽危险 target、登录服务关闭自动认证。做完这三步,单用户模式和运行级的安全基线才算真正建立。