Raspbianでパスワード忘れた場合のリセット手段

Raspbianのパスワード忘れたので、ググって先人の知恵のままやったらうまくいかなくて、色々アレンジしたらリセット出来た話。

状況

Raspbian stretch (Raspbian GNU/Linux 9.3) デスクトップ版。
“pi”の自動ログインによりRaspbian起動自体は出来て、端末等は実行できるけれど、sudoできなくなった。

リセットまでの手順

注意: Raspbian stretch を直接書き込んだSDカードでの操作であり、NOOBSでインストールした場合は異なる可能性があります。

必要なもの

  • microSD カードリーダライタ
  • Linux か Mac。ext4がマウント可能な環境
    • Windows上の仮想OSでも可能。
      というかWindows10 + VirtualBox + Ubuntu Linux でやりました。Windowsマシンに挿したUSBリーダライタをVBox側に認識させる事で可能。
  • 僅かな度胸

参考URL

手順・・・の前に

まず、localeがja-JPだと、single user modeでパスワード設定したとき、文字化けしてしまい成功か失敗か分からない。極力en-US等に変更しておくべし。
desktop版+オートログインだったので設定変更できたが、server版だとパスワード分からない時点で変更は無理だ。何とか想像で補おう。

手順

大体は先人の手順のままだが、マウントするパーティションがUUID設定されていると、なぜかパーティションを見失ってくれて永遠にpasswd やpwconvが失敗する。パーティション設定の2カ所を強制的に書き換えた状態で行うことで回避する。

1. バックアップ

Linux または Mac にSDカードリーダライタでraspbianのSDカードを接続。
パーティションのマウント方法はgoogleに任せるとして、SDカード中の “/boot” と “/” が対象。
(/boot はwindowsでも見えたりするが、ext4はwindowsでは扱えないため、対応OSが必要になる)

2. 修正

nanoでもviでもemacsでもいいので、cmdline.txt と fstab 中のパーティション設定を書き換えて保存

<boot-mount-dir>/cmdline.txt
  • root=/dev/mmcblk0p2 に変える( “/” が入っているパーティション)
  • 末尾に ” init=/bin/sh” を追加する(initの前の空白も含む)

<root-mount-dir>/etc/fstab

“/”のproc部分を /dev/mmcblk0p2 に変更する

3. raspbian起動

PCからSDカードをアンマウントして、RPiに挿して、徐に起動。
適当にEnter押してたら、 ”# ” とプロンプト出現。

4. おまじない

rootのシングルユーザーモード

編集するためマウントし直し

とりあえず/etc/passwd と /etc/shadow を同期

ようやく更新

shutdown?reboot?電源抜く?
とにかく終了させて電源offしてSDカードをまた抜く。

5. 元に戻す

PCにもう一度SDカードを挿し、1.バックアップで作成しておいたオリジナルファイルに戻す。

6. raspbian起動

これでsudoできるようになった。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です