0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Debian でパスワードリカバリーをする

Last updated at Posted at 2022-05-08

Hyper-V に入れていた Debian のパスワードが分からなくなった。いや、ユーザ名すら分からなくなったw 再インストールをしても良いが、消すのも勿体ないのでパスワードリカバリーをする。
最近の *nix って、シングルユーザモードでもパスワードが要求されますからねぇ。

GRUB で、起動オプションを編集する

image.png
通常起動の項目を選択したまま e を入力することで GRUB の編集モードに入る。どうも emacs っぽいキーバインドのエディタらしいです。vi だったら使えるのですが emacs はちょっと... nano はもっと無理。

linux ~ の行の最後に init=/bin/bash を追加 (ここでの編集は保存されないので、間違えたら再起動しましょう🤭)
image.png
書き換えたら [Ctrl]+[x] で起動します。

シングルユーザモードで起動し、ディスクをマウント

image.png
はい、bash が起動しました。ここまで来たら、昔のシングルユーザモードと同じですね。
取りあえず df -h とか mount とかで、ディスクが繋がっているか見たら

mount -o rw /
vipw
cap_mkdb
shutdown -r

あ、いや、これは FreeBSD 的?
正しくは Reset a lost root password in under 5 minutes こちらを。
それ以前に、キーボードの入力を全く受け付けない!何もコマンドが打てないんですけども!!!
仕方が無いので、別の Debian でマウントして書き換えましょう。

Live CD イメージを拾ってくる

さすがに Debian をもう一つインストールするのは大変なので、
cdimage.debian.or.jp について からリンクを辿り、理研 辺りから debian-live-11.3.0-amd64-cinnamon.iso とやらをダウンロード。あまり聞き覚えがないなと思ったら cinnamon って GNOME 3ベースの新しいデスクトップ環境なんですね。

リカバリー用の仮想 PC を作る

image.png
色々と設定するのも面倒なので、CD だけ読み込ませて作成。作成できたら接続 & 起動。CD から起動のために [Enter]。([Enter]を叩くのが遅れると、ネットワークからの起動になってタイムアウトしますので、[Ctrl]+[Alt]+[Del] などでやり直して下さい)

Live CD の起動

image.png
一番上の Debian GNU/Linux Live (kernel 5.10.0-13-amd64) を選んで [Enter]。
CD からの起動なので少し時間がかかりますが、待ちます。待ちます。待ちます。

待った甲斐がありました。メモリを無駄遣いするウィンドウ環境が起動してきました。
image.png

でも、まだ目的のディスクは接続されていません。なので、自動的に作成された HDD を目的のディスクと入れ替えます。設定を開いて、
image.png

仮想ディスクを目的のディスクを選択します。
image.png

image.png
目的のディスクを選択したら適用をクリック。(root パスワードを忘れた Debian はシャットダウンしておくこと)

ターミナルからディスクを確認
btrfs の LVM 環境だけど、大丈夫かな?

lvm を確認
root@debian:~# lvmdiskscan
  /dev/loop0 [       2.38 GiB]
  /dev/sda1  [     512.00 MiB]
  /dev/sda2  [     488.00 MiB]
  /dev/sda3  [     599.02 GiB] LVM physical volume
  0 disks
  3 partitions
  0 LVM physical volume whole disks
  1 LVM physical volume
root@debian:~# lvscan
  ACTIVE            '/dev/RIBBON-vg/root' [<598.07 GiB] inherit
  ACTIVE            '/dev/RIBBON-vg/swap_1' [976.00 MiB] inherit

心配無用、無事見えました。こいつをマウントしましょう。

ちなみに /dev/mapper にも vg が見えるので、こちらをマウントしても構いません。どちらも同じものを差しています。

vg は、複数の表現方法があります
% ls -l /dev/RIBBON-vg /dev/mapper
/dev/RIBBON-vg:
total 0
lrwxrwxrwx 1 root root 7 May  8 10:37 root -> ../dm-0
lrwxrwxrwx 1 root root 7 May  8 10:37 swap_1 -> ../dm-1

/dev/mapper:
total 0
lrwxrwxrwx 1 root root       7 May  8 10:37 RIBBON--vg-root -> ../dm-0
lrwxrwxrwx 1 root root       7 May  8 10:37 RIBBON--vg-swap_1 -> ../dm-1
crw------- 1 root root 10, 236 May  8 10:37 control

マウント

マウントポイントを作成してマウントします

ディスクをマウント
root@debian:~# mkdir /tmproot
root@debian:~# mount /dev/RIBBON-vg/root /tmproot
root@debian:~# df -h
Filesystem                   Size  Used Avail Use% Mounted on
udev                         933M     0  933M   0% /dev
tmpfs                        192M  944K  191M   1% /run
/dev/sr0                     2.8G  2.8G     0 100% /run/live/medium
/dev/loop0                   2.4G  2.4G     0 100% /run/live/rootfs/filesystem.squashfs
tmpfs                        959M  234M  725M  25% /run/live/overlay
overlay                      959M  234M  725M  25% /
tmpfs                        959M     0  959M   0% /dev/shm
tmpfs                        5.0M     0  5.0M   0% /run/lock
tmpfs                        959M  4.0K  959M   1% /tmp
tmpfs                        192M   92K  192M   1% /run/user/1000
tmpfs                        192M   44K  192M   1% /run/user/0
/dev/mapper/RIBBON--vg-root  599G  6.3G  591G   2% /tmproot
root@debian:~#

後は簡単ですね。

chroot する

chroot から抜けられるように bash をもう一つ噛ませる。
そして、マウントしたディスクへ chroot (@rootfs と言うディレクトリの下にルートディレクトリがあります)
カーネルファイルのファイル名やらタイムスタンプやらが変わったので chroot できたようです。

chroot
root@debian:~# ls -l /vmlinuz
lrwxrwxrwx 1 root root 28 Mar 26 15:23 /vmlinuz -> boot/vmlinuz-5.10.0-13-amd64
root@debian:~# bash
root@debian:~# chroot /tmproot/\@rootfs/
root@debian:/# ls -l vmlinuz
lrwxrwxrwx 1 root root 27 Dec 10 21:52 vmlinuz -> boot/vmlinuz-5.10.0-9-amd64

カーネルファイルのバージョンが変わりました (0-13 → 0-9)

ユーザ名の確認とパスワードの初期化

root@debian:/# less /etc/passwd
....登録されているユーザを確認

root のパスワードを変更
root@debian:/# passwd
New password:
Retype new password:
passwd: password updated successfully

一般ユーザのパスワードを変更
root@debian:/# passwd abc123
New password:
Retype new password:
passwd: password updated successfully

終わったので chroot から抜ける
root@debian:/# exit
root@debian:~# ls -l /vmlinuz
lrwxrwxrwx 1 root root 28 Mar 26 15:23 /vmlinuz -> boot/vmlinuz-5.10.0-13-amd64

chroot を抜けて新しいカーネルファイル (-13) が見えますね。

ディスクをアンマウントして、shutodwn

自分のため、みんなのため、念のため、おまじないを唱えてから unmount。そして、shutodnw。

root@debian:~# sync ; sync ; sync
root@debian:~# umount /tmproot
root@debian:~# shutdown -h now

シャットダウンをしておかないと、仮想ハードディスクファイルがロックされて起動できません。

パスワードを忘れた debian を起動して確認

無事、ログインできました。
image.png
無事ログインできたら、リカバリー用の仮想 PC を削除。また、仮想ディスクも作成されているのでそれも削除しましょう。(間違えて、必要なディスクイメージを削除しないように!!!)

面倒くさいことしてるなぁ

パスワードが分からなくなった PC で Live ディスクから起動すれば良いんですが、何度やっても DVD から起動できなかったので、別に仮想 PC を作成しました。残念。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?