如何永久禁用恢復模式的root密碼提示,RHEL7
注意:我在這裡詢問了有關這些捆綁包的第 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.target或graphics.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