Centos

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

  • June 15, 2016

注意:我在這裡詢問了有關這些捆綁包的第 6 版的類似問題。注意 7 使用 systemd 並且可能有不同的實現

在極少數情況下,RHEL 或 CentOS 7 系統因(例如)不正確關閉或啟動時強制 fsck-check 失敗而無法啟動,控制台將提示使用者輸入 root 密碼。

如何禁用密碼檢查並直接放入 root-shell?

不可接受的答案:

  • 覆蓋init核心命令行(即 grub)
  • 用 /sbin/sushell 連結/替換 /sbin/sulogin。(這會起作用,但會引發安全框架的危險信號)。
  • 從其他設備啟動

Systemd 正在處理服務目標。目標相當於執行級別,服務相當於初始化腳本/usr/lib/systemd大部分systemd配置位於/etc/{init.d,rc*.d,inittab}.

當啟動過程中出現問題時(預設是getty.targetgraphics.target,您可以使用 獲取它們systemctl get-default)systemd 正在切換到Emergency.target

這個“緊急”目標將依次載入文件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 的答案。事實上,sushell只需 exec 的$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”進行編輯,然後使用 D-pad 導航到以開頭linux16並附加的行(點擊CTRL-A到行尾)emergency

linux16 ... emergency

對於測試救援模式,它與上面的步驟相同,但您必須更明確:

linux16 ... systemd.unit=rescue.target

引用自:https://unix.stackexchange.com/questions/217383