Ubuntu Weekly Recipe

第639回 Ubuntuに「トラブル時に」ログインするいろいろな方法

この記事を読むのに必要な時間:およそ 10 分

第638回ではUbuntuにログインする一般的な方法をいくつか紹介しました。ただしそれらの方法はあくまでUbuntuがきちんと動いていることが前提となっています。今回は不幸にもUbuntuがうまく起動しなくなったときに,ログインできるかもしれない手段を紹介しましょう。

具体的には,今回は次の4パターンを紹介します。

  • パスワードを忘れたときなどにシングルユーザーモードで「ログインする」方法このページで解説
  • ルートファイルシステムをマウントできなくなったときにInitramfsに「ログインする」方法2ページ目で解説
  • ストレージデバイスを仮想マシン化して「ログインする」方法3ページ目で解説
  • SSHログインできなくなったときのためにIPMIやシリアルコンソールで「ログインする」方法4ページ目で解説

リカバリー用にシングルユーザーモードでログインする

人間の記憶はアテになりません。昨日食べたご飯どころか,たったいま何をしようとして立ち上がったのかを思い出せないことすらよくあります。ましてマシンごとのパスワードなんて覚えられるはずがありません。だからのこのポストイットはとても大事なものなんです。剥がさないでくださいお願いします。

そんな涙ながらの主張にも関わらずディスプレイに貼られた紙を廃棄され,パスワードを思い出せずにUbuntuにログインできなくなることもあるでしょう。でもUbuntuなら大丈夫。たとえあらゆるパスワードを思い出せなかったとしても,マシンに物理的にアクセスできる状況であれば,特権モードで起動してパスワードを再設定することが可能なのです。これにはFBIもニッコリです※1⁠。

※1
センシティブな情報をPC内に保持するのであれば,LUKSなどを利用してストレージを暗号化すべきです。ちなみに以前はeCryptfsによってホームディレクトリを暗号化するオプションがインストーラーにありましたが,現在ではLVMとLUKSを利用したストレージ全体の暗号化に変更になっています。ただし,いずれにせよ物理的にアクセスできる状況であれば,完璧にデータを保護することは難しいと考えておきましょう。

Ubuntuは起動時にGRUBメニューを操作することで,シングルユーザーモードで起動することが可能です。ただし通常のインストール設定だとGRUBメニューが表示されない可能性は高いです。そこでGRUBメニューを表示する方法をいくつか紹介しておきましょう。

  • 方法A:電源投入後,PCのロゴが表示される前からESCキー(UEFIの場合)もしくはSHIFTキー(BIOSの場合)を連打する

    • 経験的に「押し続ける」よりも「連打する」ほうが確実です
    • ESCキーを連打する場合は,GRUBメニューが表示されてすぐにGRUBプロンプトgrub>に移行してしまうかもしれません
    • そのときはnormalと入力して,画面が消えたらすぐに「1回だけ」ESCキーを押してください
  • 方法B:正しく起動できている状況であれば,/etc/default/grubを次のように変更した上で再起動してください

    • GRUB_TIMEOUT_STYLE=hiddenGRUB_TIMEOUT_STYLE=menuに変更する
    • GRUB_TIMEOUT=0GRUB_TIMEOUT=5に変更する
    • sudo update-grubを実行する
    • これで起動時は常に5秒間はGRUBメニューが表示されます
    • 言い換えると,この変更が有効な間は,起動時間が5秒遅くなります
  • 方法C:キー入力もうまくいかないし設定も変更できない場合は次の方法で強制的にメニューを表示可能です

    • 電源投入後,カーネルの起動処理が開始してからsystemdが起動する手前までのタイミングでリセットします
    • これによりGRUBはリセット前のエントリーの起動に失敗したと判断し,次回起動時にメニューを表示します

図1 GRUBメニュー(UEFIのケース。BIOSの場合は少し見た目が異なる)

画像

図2 GRUBプロンプトが表示されてしまった場合は「normal」+エンターキーを入力後に,すぐに1度だけESCキーを押す

画像

うまくGRUBメニューを表示できたら,シングルユーザーモードに入ります。まず図1にある「Advanced options for Ubuntu」にカーソルを合わせてエンターキーを押してサブメニューに入ってください。すると次のようにカーネルごとのいくつかのオプションエントリが表示されるはずです。

図3 ⁠Ubuntu, with Linux ⁠カーネルバージョン⁠⁠ (recovery mode)」にカーソルを合わせてエンターキーを押す

画像

複数のバージョンのカーネルがインストールされている場合は,上記のように複数の「recovery mode」エントリが表示されます。基本は一番上の「recovery mode」を選択すれば大丈夫ですが,もし起動できない場合は他のメニューを選択してください。ここで起動するまでしばらく待ちます。

図4 ⁠root Drop to root shell prompt」を選択する

画像

すると画面下部に次の図のような「Press Enter for maintenance」メッセージが表示されるはずです。ここで単にエンターキーを入力すれば,シングルユーザーモードのシェルに「ログイン」できます。

図5 単にエンターキーを入力することでrootで「ログイン」できた

画像

厳密に言うと一般的な認証を通っていないので,⁠ログインした」と言ってよいかどうかは疑問ではありますが,正規の手続きでシステム上の管理者にはなれたので大丈夫でしょう※2⁠。あとはrootユーザーと同じなので,必要に応じてシステム上の設定を変更してください。

※2
さらに厳密なことを言うと,このプロンプトはsuloginコマンドを実行しているため,⁠認証を通って」はいます。

ちなみにUbuntuはrootアカウントを無効化しているために,この手順においてパスワードは問われません。もし何らかの理由でrootのパスワードを設定している場合,⁠Give root password for maintenance」と表示されrootのパスワードを入力しないとログインできません。現在のUbuntuシステムにおいて,rootパスワードを設定する意味はあまりないため,もし誤って設定してしまった場合はsudo passwd -l rootしておくと良いでしょう。逆に言うと,十分に強いrootのパスワードを設定しておけば,この手順によるログインを無効化できます※3⁠。

※3
無効化できるとは言え,USBブートしてルートファイルシステムをマウントすればそのまま見えますし,後ほど説明するようにInitramfsの中でマウントするという手もあります。suloginコマンド自体も--forceオプションを付けることでパスワード認証をスキップ可能です。UI経由からのシングルユーザーモードを無効化できるからといって,十分にセキュアになるわけではないことは留意しておきましょう。

インターネット接続は有効化されていません。もし有効化したい場合は,一旦「exit」コマンドでログアウトしたあと,再度表示されたリカバリーメニューから「network Enable networking」を選択してください。⁠ファイルシステムを変更するために書き込み可能状態でマウントするが良いか?」と聞かれるので「Yes」と答えます※4⁠。自動的にリカバリーメニューに戻るので,もう一度「root Drop to root shell prompt」を選択すればネットワークに繋がっているはずです。

※4
本来リカバリーモードのときはできるだけシステムにダメージを与えないようにルートファイルシステムは読み込み専用で起動し,最低限必要なときだけ何らかの変更を書き込むべきです。

リカバリーメニューには他にもシステムを回復するために必要な手段が一通り存在するので,何か問題が発生して起動できなくなったときには役に立つでしょう。

最近のUbuntuだとシングルユーザーモードに入った時点でルートファイルシステムは読み書き可能な状態でマウントされています。もし何らかの理由で読み込み専用でマウントされていて,なおかつ,システム設定を変更するなどルートファイルシステムに書き込みたい場合は,次のコマンドで再マウントしてください。

# mount -o remount,rw /

どうしても再マウントできない場合は,ストレージが壊れている可能性があります。別途対応方法を検討しましょう。まずは後述のInitramfsを利用したログイン方法で言及している「ストレージのバックアップを取る方法」を実施することになるでしょう。

ちなみにシングルユーザーモードにおいて,特定のユーザーのパスワードは次の方法で再設定できます。

# passwd (ユーザー名)
New password: (新しいパスワードを入力)
Retype new password: (上記と同じパスワードを再度入力)
passwd: password updated successfully

うまく設定を変更できたなら,rebootコマンドを実行して再起動しましょう。

もし再起動せずに継続して起動処理を続けて欲しい場合は,exitコマンドでシングルユーザーモードを終了し,リカバリーメニューが表示されたら,今度は「resume Resume normal boot」を選択してください。ただしこの場合は,各種ドライバがロードされないなど「リカバリーモード」のまま起動します。正しい起動を行うためには再起動が必要なので注意してください。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。