如何永久禁用恢复模式的 root 密码提示,RHEL7

如何永久禁用恢复模式的 root 密码提示,RHEL7

注意:我就这些捆绑包的版本 6 提出了类似的问题这里。请注意,7 使用 systemd 并且可能有不同的实现

在极少数情况下,RHEL 或 CentOS 7 系统因(例如)不当关闭或启动时强制 fsck 检查失败而无法启动,控制台将提示用户输入 root 密码。

如何禁用密码检查并直接进入 root-shell?

不可接受答案:

  • 覆盖init内核命令行(即 grub)
  • 将 /sbin/sulogin 链接/替换为 /sbin/sushell。 (这可行,但会引发安全框架的危险信号)。
  • 从其他设备启动

答案1

Systemd 正在与服务目标。目标相当于运行级别,服务相当于初始化脚本。大多数 systemd 配置位于 中/usr/lib/systemd,而标准 init 位于/etc/{init.d,rc*.d,inittab}.

当启动过程中出现问题时(默认为盖蒂目标或者图形目标,你可以通过systemctl get-default) systemd 切换到紧急目标

这个“紧急”目标将依次加载文件emergency.service。该服务包含多行,其中:

...
[Service]
Environment=HOME=/root
WorkingDirectory=/root
ExecStartPre=-/bin/plymouth quit
ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again\\nto boot into default mode.'
ExecStart=-/bin/sh -c "/sbin/sulogin; /usr/bin/systemctl --fail --no-block default"
...

我们只需要将调用替换为/sbin/sulogin

ExecStart=-/bin/sh -c "/sbin/sushell; /usr/bin/systemctl --fail --no-block default"

我们将直接进入 shell,而不是通过 sulogin 提示输入密码。 (我们可以使用/bin/sh,但/sbin/sushell与 CentOS6/RHEL6 的答案一致。事实上,只需使用默认为 的sushellexec 即可。)$SUSHELL/bin/bash

要使此更改“永久”,即不受yum更新影响,请对此文件的副本进行更改并将其放在/etc/systemd/system/.另外,要使“救援模式”以相同的方式工作,请将 中的同一行替换为rescue.service.这是一个用于简化该过程的 shell/sed 脚本:

for SERVICE in rescue emergency ; do 
   sed '/^ExecStart=/ s%"/sbin/sulogin;%"/sbin/sushell;%' /usr/lib/systemd/system/$SERVICE.service > /etc/systemd/system/$SERVICE.service
done

要测试这一点,请确保系统未在使用中,并告诉systemd切换到rescue目标:

systemctl rescue

这将关闭网络连接并在控制台打开 shell。您可以使用emergency目标进行测试,但这并不能完全正常工作(出于某种原因),并且可能需要完全重新启动才能退出。

您还可以从引导菜单 (grub) 测试这些。测试紧急模式很简单。启动并在出现菜单时,按“e”进行编辑,然后使用方向键导航到以linux16并追加开头的行(CTRL-A按可到达行尾)emergency

linux16 ... emergency

对于测试救援模式,步骤与上面相同,但必须更明确:

linux16 ... systemd.unit=rescue.target

答案2

我用来绕过 root 密码并访问 root shell 的方法是编辑 grub 中的 init (内核行)。

init=/bin/bash

相关内容