回復モード、RHEL7でrootパスワードプロンプトを永久に無効にする方法

回復モード、RHEL7でrootパスワードプロンプトを永久に無効にする方法

注:このバンドルのバージョン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/shCentOS6 /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

関連情報