なぜGRUBを操作する必要があるのか?
システム管理者にとって、パスワードを忘れるという事態は予想以上に頻繁に起こります。以前、前任の同僚からKeePassファイルなしで5台のUbuntu 22.04サーバーを引き継いだことがありますが、その時の感覚は、まさに自分の家の鍵をなくして閉め出されたような気分でした。Ubuntuでは、rootアカウントはデフォルトでロックされており、通常はsudoに依存しています。この権限を失った場合、ブートローダー(bootloader)への介入が唯一の救済策となります。
すぐにOSを再インストールしないでください。それは貴重な時間とデータの損失を招くだけです。ここではGRUB(Grand Unified Bootloader)を利用して、システムを特殊な状態で起動します。この状態では、古いパスワードを必要とせずにシステムファイルを編集できます。これは、オンサイトやKVM/IPMI経由でトラブルシューティングを行うDevOpsエンジニアにとって、必須のサバイバルスキルです。
復旧環境の準備
物理的なアクセス、またはコンソールインターフェース(DigitalOceanやLinodeのVPS、またはVMwareなど)へのアクセス権が必要です。手順は以下の通りです。
- システムを再起動する: 通常の起動プロセスを中断するために必須の操作です。
- GRUBメニューにアクセスする:
- 従来のBIOSを使用しているマシンの場合:電源を入れた直後に Shift キーを押し続けます。
- UEFIを使用しているマシンの場合(最近のノートPCやサーバーのほとんど):メーカーのロゴが消えた直後に Esc キーを連打します。
青色または黒色の背景に選択肢が表示されれば成功です。もしログイン画面までそのまま起動してしまった場合は、キーを押すタイミングが遅すぎたことを意味します。もう一度やり直してください。
安全かつ迅速にパスワードをリセットする2つの方法
システムの状況に応じて、「公式」な方法か、カーネルに深く介入する方法のいずれかを選択できます。
方法1:リカバリーモードを使用する(初心者向け)
これはUbuntuに組み込まれている最も安全な解決策です。
- GRUBメニューで Advanced options for Ubuntu を選択し、Enterを押します。
- 末尾に
(recovery mode)と書かれた行(通常は2行目)を探し、Enterを押します。 - 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パスワードを要求されることがあります。その場合、ブートパラメータを編集するテクニックが最後の手段となります。
- メインのGRUBメニューで、一番上のUbuntuの行にカーソルを合わせ、‘e’ キーを押します。
linuxで始まる行を探します。通常、その行の最後にはro quiet splashという記述があります。- その
ro quiet splashを削除し、代わりにrw init=/bin/bashと入力します。 - 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で「笑えない」状況に直面した際に非常に効果的です。

