先週、ドライブ全体の暗号化パスワードを愚かに変更しました。明らかに以前のパスワードを確実に入力することができなかったからです。残念ながら、それ以来私のコンピューターはオンになっていて、新しいパスワードをどこにも書き留めていないので、それを忘れてしまいました。私の最も誇らしい瞬間ではありませんが、パスワードを入力する時が来る前に気づいたのは非常にありがたいです。私はまだコンピューターにログインしているため、すべてのファイルにアクセスできますが、コンピューターをシャットダウンするとすぐに運が悪くなります。できればすべてを再インストールする必要はありません。
だから私の質問は、まだ管理者としてログインしている間に暗号化パスワードを回復/変更する方法はありますか?
このほとんどを自動化するスクリプトをいくつかまとめていますが、しばらく待てない場合は、以下の手順をテストしました。自分が何をしているかを知っていることを確認してください。私が書いたコマンドを盲目的にたどらないでください。それらの中には、システム構成に固有の置換が必要な場合があります。スクリプトを完成したら。それらをGitHubにアップロードして、この回答を編集します。
残念ながら、暗号化パスワードを回復または変更することはできません。既存のキーまたはパスフレーズのいずれかがなければ、新しいキーを作成することはできません。ただし、システムにログインしているので、幸運です!技術的には完全な再インストールを必要としないオプションがあります。ドライブ全体の暗号化を使用していると言うので、ドライブに2つのメインパーティション、ブートパーティションとLUKSパーティションがあると仮定します(EFIを使用している場合、おそらく3番目のパーティションがありますそれ)。次に、復号化されたLUKSパーティションは、おそらく他のすべての復号化されたパーティションにLVMを使用しています。
おそらく、lsblkの出力は次のようになります。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom sda 8:0 0 16G 0 disk ├─sda28:2 0 488M 0 part/boot ├─sda38:3 0 15G 0 part │└─sda3_crypt253:0 0 15G 0 crypt │ ├─ubuntu--vg-root253:1 0 11.8G 0 lvm/ │└─ubuntu--vg-swap_1253:2 0 3.3G 0 lvm [SWAP] └─sda1 8:1 0 512M 0 part /boot/efi
ここで関心のある唯一の部分は、sda
ディスクです。
それを実現する方法、一般的に
基本的に、暗号化されるシステムのビットはsda3
であり、LUKSで暗号化されます。ロック解除されたLUKSパーティションには、sda3_crypt
という名前の単一のボリュームグループをホストするLVM物理ボリュームubuntu--vg
が含まれます。このボリュームグループには、2つのLVM論理ボリュームubuntu--vg-root
とubuntu--vg-swap_1
が含まれます。 LVM物理ボリュームsda3_crypt
をバックアップできれば、sda3
の古いLUKSパーティションを吹き飛ばし、新しいパーティションを作成して、LVM物理ボリュームを新しいLUKSパーティションにダンプできます。ただし、キャッチが1つあります。ブートパーティション内のすべてのブートファイルsda2
は、破壊した古いLUKSパーティションを引き続き参照します。作成した新しいLUKSパーティションを指すように/etc/crypttab
ファイルを更新し、initramディスクを再構築する必要があります。それが終了した後にのみ、システムを再起動してください。
これを実現するための実際の手順については、次のセクションを読み続けてください。
実際の段階的なプロセス
lsusb
を実行し、外部ディスク、私の場合はsdb
を見つけます。sdb 8:16 0 16G 0ディスク └─sdb18:17 0 16G 0 part /media/test/external-drive sr0 11:0 1 1024M 0 rom sda 8:0 0 16G 0 disk ├─sda28:2 0 488M 0 part/boot ├─sda38:3 0 15G 0 part │ └─sda3_crypt253:0 0 15G 0 crypt │├─ubuntu--vg-root253:1 0 11.8G 0 lvm/ │└─ubuntu--vg-swap_1253:2 0 3.3G 0 lvm [SWAP] └─sda18:1 0 512M 0 part /boot/efi
/media/test/external-drive
をドライブへの実際のパスに置き換えます。Sudo umount /media/test/external-drive
sdX
を外付けハードドライブのデバイスに置き換えます。私の場合、... of=/dev/sdb...
と書きます。また、sda3_crypt
をLUKSパーティションの名前に置き換えます。これには長い時間がかかります。 16GB LUKSパーティションのみのテストでは35分かかりました。Sudo dd if=/dev/mapper/sda3_crypt of=/dev/sdX bs=4M status=progress
Sudo -i
sda3
にあります。以下のコマンドのsdaN
の代わりに、システムの正しい番号に置き換えてください。cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdaN
3
をデバイスに適した番号に置き換えます。cryptsetup luksOpen /dev/sda3 sda3_crypt
X
のsdX
を外付けドライブのデバイスに置き換えます。 3
のsda3_crypt
を適切なパーティション番号に置き換えます。 dd if=/dev/sdX of=/dev/mapper/sda3_crypt
3
をパーティションの正しい番号に置き換えます。プロンプトが表示されたら、作成したパスワードを入力します。これは二度と忘れることはありません。cryptsetup /dev/sda3 sda3_crypt
vg=$(pvscan | grep PV | tr -s ' ' | cut -f 5 -d ' ')
<-ボリュームグループ名を$ vgに保存export uuid=$(blkid | grep LUKS | grep -oP "\bUUID=\".*?\"" | tr -d '"' | cut -f 2 -d '=')
<-LUKS UUIDを$ uuidに保存します(すべて1行です)mount /dev/mapper/${vg/-/--}-root /mnt
mount /dev/sda2 /mnt/boot
mount /dev/sda1 /mnt/boot/efi
<-UEFIシステムに対してのみこれを行いますmount --bind /dev /mnt/dev
mount --bind /run/lvm /mnt/run/lvm
chroot /mnt
mount -t proc proc /proc
mount -t sysfs sys /sys
mount -t devpts devpts /dev/pts
/etc/crypttab
ファイルを新しいLUKSパーティションのUUIDで更新する必要があります。sed -i "s/UUID=\([0-9a-f\-]\+\)/UUID=$uuid/" /etc/crypttab
update-initramfs -k all -c
update-grub