注:このバンドルのバージョン6について同様の質問をしました。ここ。 7はsystemdを使用し、実装が異なる場合があります。
まれに(たとえば、不適切なシャットダウンまたは起動時に強制fsckチェックが失敗したためにRHELまたはCentOS 7システムが起動しない場合)、コンソールはユーザーにrootパスワードの入力を求めます。
パスワードの確認を無効にしてルートシェルを直接入力する方法は?
許可されていません答え:
init
カーネルのコマンドライン(例: grub)のオーバーライド- /sbin/sulogin link/ を /sbin/sushell に置き換えます。 (この方法は機能しますが、セキュリティフレームワークに危険信号を発生させます。)
- 他のデバイスで実行
答え1
Systemdが一緒に働いています提供するそしてターゲット。目標は次のとおりです。ランレベル、サービスは次のとおりです初期化スクリプト。ほとんどのsystemd設定はにあり、/usr/lib/systemd
標準initはにあります/etc/{init.d,rc*.d,inittab}
。
起動中に問題が発生した場合(デフォルトはゲッティターゲットまたはグラフィックターゲット、systemctl get-default
次に切り替えることができます。緊急目標。
この「緊急」ターゲットはファイルを順番にロードします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"
パスワードの入力を求めるために、 sulogin ではなくシェルを直接入力します。 (を使用できますが、/bin/sh
CentOS6 /sbin/sushell
/ RHEL6の答えに合わせて実際にsushell
デフォルト値が.execを使用してください。)$SUSHELL
/bin/bash
この変更を「永久的に」、つまりyum
更新の影響を受けないようにするには、このファイルのコピーを変更してから挿入します/etc/systemd/system/
。また、「回復モード」が同じように機能するようにするには、rescue.service
ここでプロセスを簡素化するシェル/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
これにより、ネットワーク接続が閉じられ、コンソールでシェルが開きます。ターゲットを使用してテストできますがemergency
(何らかの理由で)正常に動作せず、終了するには完全に再起動する必要があります。
起動メニュー(grub)でもテストできます。緊急モードをテストするのは簡単です。メニューが表示されたら、「e」を押して編集し、矢印キーを使用してlinux16
次の行に移動して追加します(行CTRL-A
の最後に移動するにはクリックします)emergency
。
linux16 ... emergency
回復モードをテストする手順は上記と同じですが、より明確にする必要があります。
linux16 ... systemd.unit=rescue.target
答え2
ルートパスワードをバイパスし、ルートシェルにアクセスするために使用した方法は、grubでinit(カーネルライン)を編集することでした。
init=/bin/bash