Ubuntuのパスワードを忘れた?GRUBとリカバリーモードで5分以内にリセットする方法

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

なぜGRUBを操作する必要があるのか?

システム管理者にとって、パスワードを忘れるという事態は予想以上に頻繁に起こります。以前、前任の同僚からKeePassファイルなしで5台のUbuntu 22.04サーバーを引き継いだことがありますが、その時の感覚は、まさに自分の家の鍵をなくして閉め出されたような気分でした。Ubuntuでは、rootアカウントはデフォルトでロックされており、通常はsudoに依存しています。この権限を失った場合、ブートローダー(bootloader)への介入が唯一の救済策となります。

すぐにOSを再インストールしないでください。それは貴重な時間とデータの損失を招くだけです。ここではGRUB(Grand Unified Bootloader)を利用して、システムを特殊な状態で起動します。この状態では、古いパスワードを必要とせずにシステムファイルを編集できます。これは、オンサイトやKVM/IPMI経由でトラブルシューティングを行うDevOpsエンジニアにとって、必須のサバイバルスキルです。

復旧環境の準備

物理的なアクセス、またはコンソールインターフェース(DigitalOceanやLinodeのVPS、またはVMwareなど)へのアクセス権が必要です。手順は以下の通りです。

  1. システムを再起動する: 通常の起動プロセスを中断するために必須の操作です。
  2. GRUBメニューにアクセスする:
    • 従来のBIOSを使用しているマシンの場合:電源を入れた直後に Shift キーを押し続けます。
    • UEFIを使用しているマシンの場合(最近のノートPCやサーバーのほとんど):メーカーのロゴが消えた直後に Esc キーを連打します。

青色または黒色の背景に選択肢が表示されれば成功です。もしログイン画面までそのまま起動してしまった場合は、キーを押すタイミングが遅すぎたことを意味します。もう一度やり直してください。

安全かつ迅速にパスワードをリセットする2つの方法

システムの状況に応じて、「公式」な方法か、カーネルに深く介入する方法のいずれかを選択できます。

方法1:リカバリーモードを使用する(初心者向け)

これはUbuntuに組み込まれている最も安全な解決策です。

  1. GRUBメニューで Advanced options for Ubuntu を選択し、Enterを押します。
  2. 末尾に (recovery mode) と書かれた行(通常は2行目)を探し、Enterを押します。
  3. Recovery Menu が表示されたら、root – Drop to root shell prompt という行を選択し、確認のためにEnterを2回押します。

この時点ではroot権限を持っていますが、ディスクは Read-only(読み取り専用) モードになっています。 Read-Write モードに切り替えないとパスワードを変更できません。以下のコマンドを入力してください。

mount -o remount,rw /

次に、ユーザーの新しいパスワードを設定します。

passwd ユーザー名

新しいパスワードを2回入力するよう求められます。最後に exit と入力し、resume を選択してUbuntuに通常通りログインします。

方法2:カーネルパラメータを編集する(リカバリーモードがロックされている場合)

セキュリティレベルの高いシステムでは、リカバリーモードに入る際にもrootパスワードを要求されることがあります。その場合、ブートパラメータを編集するテクニックが最後の手段となります。

  1. メインのGRUBメニューで、一番上のUbuntuの行にカーソルを合わせ、‘e’ キーを押します。
  2. linux で始まる行を探します。通常、その行の最後には ro quiet splash という記述があります。
  3. その ro quiet splash を削除し、代わりに rw init=/bin/bash と入力します。
  4. Ctrl + X または F10 を押して、この一時的な構成で起動します。

パスワードを一切聞かれることなく、root権限でシェルプロンプトが直接起動します。すでに rw パラメータを追加しているため、ファイルシステムは書き込み可能な状態になっています。あとは以下の操作を行うだけです。

passwd ユーザー名
sync
reboot -f

復旧後のシステムセキュリティ

新しいパスワードで無事にログインできたら、セキュリティの再確認を行うべきです。誰でもGRUB経由でパスワードをリセットできるということは、物理的な大きなリスクを意味します。

GRUBからのリスクを遮断する

サーバーが公共の場所にある場合は、GRUB自体にパスワードを設定してください。これにより、不正なブートパラメータの編集を防ぐことができます。以下のコマンドを使用してパスワードハッシュを作成します。

grub-mkpasswd-pbkdf2

また、LUKSによるディスク暗号化の導入も検討してください。LUKSを使用していれば、たとえ悪意のある者がrootシェルに侵入したとしても、復号キーがなければデータを読み取ることはできません。

ログイン履歴の確認

不在の間に他人がマシンを操作していないか、ログを確認しておきましょう。

tail -n 20 /var/log/auth.log

操作した時間と一致する password changed という行があれば、システムは安全です。このテクニックはシンプルですが、Ubuntuで「笑えない」状況に直面した際に非常に効果的です。

Share: