従来との違い

管理者のパスワードを忘れてログインできなくなった場合はシングルユーザモードに入ってパスワードを変更する、というのがCentOSのみならずLinux全般でのお作法であった。

しかしCentOS 7では旧来のシングルユーザモードに相当するレスキューモードに入ってもrootユーザのパスワードを要求されるので、その手は使えなくなっている。
エマージェンシーモード(レスキューモードとの違いはルートパーティションだけ読み取り専用でマウントする)というのもあるが同様にrootユーザのパスワードを入力する必要がある。

CentOS 7では以下のURLに書かれている方法を使用するが、検証の結果、手順に多少誤りがあるようなので、より良い手順を書き出しておく。
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-Terminal_Menu_Editing_During_Boot.html

パスワード変更の手順

  1. GRUB2の起動画面のカーネル選択時にeを押して起動オプションの編集モードに入る
  2. linux, linux16, linuxefiのいずれかで始まる行があるので、この行のrhgbを削除し(さもないとキーボード入力が反映されない)、LANG=ja_JP.UTF-8があればこれも削除し(日本語で出力されても文字化けするだけ)、rw init=/bin/shを最後に追加する
  3. Ctrl+xを押して起動する
  4. passwd(rootユーザが無効で他に管理者ユーザがあるならpasswd <管理者ユーザ>)で任意のパスワードを設定する
  5. SELinuxがEnforcingの場合はtouch /.autorelabelを実行する(通常のモードに戻る際に一度SELinuxのリラベリング処理が走るようになる。これを実行しないとログインできない)
  6. exec /sbin/initを実行して通常のモードに移行する(上記URLにはexec /sbin/rebootで再起動しても良いと書いてあるが、これはエラーになった)

終わりに

逆に、この手順を封じて管理者パスワードを変更できなくする方法はないか探してみたが見つけていない。
つまり、コンソールの前に座られるとrootユーザのパスワードを好き放題できるということなので、本当にそうされてはならない場合はBIOS/UEFIやディスクにパスワードを掛けるなどをしなければならない。

CentOS 6でも/etc/sysconfig/initのSINGLE行をSINGLE=/sbin/suloginとすればCentOS 7と同様にシングルユーザモードでrootユーザのパスワードを要求されるようになるが、上記手順と同じ方法でパスワードの変更が可能である(SELinuxがEnforcingでもtouch /.autorelabelは不要だったが)。

TOP