我的 parrotOS 无法启动,在出现此问题之前我没有对系统进行任何重大更改。我之前重新启动系统时没有遇到任何问题。我使用的是 parrotOS 5.2。
我的 fstab 看起来不错,在这个问题发生之前我没有编辑它。
现在,当我启动计算机时,我在紧急模式下收到错误消息:
>> 无法打开对控制台的访问,root 帐户已被锁定。有关更多详细信息,请参阅 sulogin(8) 手册页。
按任意键只会重复该消息,在恢复模式下也会发生同样的情况。
我尝试过编辑 fstab(删除交换和非必需驱动器)并编辑rescue.service 文件以尝试引导sulogin —force,)但这不起作用。我还运行了 fsck,返回 0(没有错误)。
这是我在救援服务中尝试过的
ExecStart=-/bin/sh -c "/sbin/sulogin --force; /bin/systemctl --job-mode=fail --no-block default"
我认为这与 Debian 的 bug 有关 -https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=802211
我找到了以下文档,但真的不知道如何处理它,如何设置环境变量 $SYSTEMD_SULOGIN_FORCE=1 ?
systemd-sulogin-shell:
- $SYSTEMD_SULOGIN_FORCE=1 — 如果 root 密码不可用(例如 root 帐户被锁定时),则将跳过询问 root 密码。有关详细信息,请参阅 sulogin(8)。
5.2.3.如果没有 root 密码,救援启动选项将无法使用。自从 buster 以来使用 sulogin 的实现,使用救援选项启动始终需要 root 密码。如果尚未设置,则救援模式实际上无法使用。但是,仍然可以使用内核参数 init=/sbin/sulogin --force 进行引导。要将 systemd 配置为在引导到救援模式(也称为单一模式:请参阅 systemd(1))时执行与此等效的操作,请运行sudo systemctl编辑rescue.service并创建一个文件,内容如下: [Service]Environment=SYSTEMD_SULOGIN_FORCE=1 为emergency.service单元执行此操作也可能(或相反)有用,该单元在出现某些错误时会自动启动(参见systemd.special(7)),或者如果紧急情况被添加到内核命令行(例如,如果系统无法使用救援模式恢复)。有关安全影响的背景和讨论,请参阅#802211。
答案1
如果收到“无法打开对控制台的访问,根帐户已锁定...”消息该怎么办
在这种情况下,OP 需要尝试指定内核启动参数init="/sbin/sulogin --force"
。由于内核参数通常由空格相互分隔,因此引号可能是必要的。
2023年5月13日,补丁被应用到systemd-sulogin-shell
也允许SYSTEMD_SULOGIN_FORCE=1
在内核命令行上指定。换句话说,如果您有足够新的 版本systemd
,您将能够使用引导加载程序在内核引导参数中输入这些选项,以强制系统为您提供救援模式访问权限,即使 root 帐户被锁定也是如此:
SYSTEMD_SULOGIN_FORCE=1 init=/sbin/sulogin
但如果您的systemd
版本早于 2023 年 5 月 13 日,这将不起作用,除非您的发行版专门向后移植了此补丁。
如何配置rescue.service
为即使 root 帐户被锁定也允许访问
这是你可以提前做的当你的系统仍然正常启动时。
如果您希望系统在救援模式下自动在控制台上为您提供 root shell,即使 root 帐户被锁定或 root 密码不可用,请按照以下步骤操作:
步骤1。)
systemctl edit rescue.service
使用 sudo/ 以 root 身份运行。这将打开一个编辑器,/etc/systemd/system/rescue.service.d/override.conf
为您创建一个文件。在旧版本的 中systemd
,编辑器最初是空白的;在较新的版本中,将会有一些描述性注释和现有定义的注释版本rescue.service
供您参考。在这两种情况下,只需输入以下两行:
[Service]
Environment=SYSTEMD_SULOGIN_FORCE=1
这种添加变量的方法SYSTEMD_SULOGIN_FORCE
适用于systemd
比以下版本更新的任何版本2018 年 10 月 17 日或者您的发行版已向后移植此补丁。
根据您的发行版,您可能emergency.service
也想应用类似的修改。
第2步。)
更新您的 initramfs 文件。在 Debian 和相关发行版上,运行update-initramfs -u -k all
应该可以。其他发行版使用不同的 initramfs 生成器:在现代 RedHat/Fedora 及其相关产品上,dracut -f
应该可以工作。在 Arch 上,该命令可能是,mkinitcpio
但我不确定需要任何选项。
rescue.service
更新 initramfs 可确保 SYSTEMD_SULOGIN_FORCE=1 环境变量在每次调用时都有效。在所有可能的情况下,这可能并不是绝对必要的,但安全总比后悔好。