takashi kono's blog

コーヒーとキーボードと共に何かを記録していくブログ

Ubuntu Server 22.04 LUKS パスフレーズ自動入力したい initramfs バージョン 備忘録

目的

LUKS のパスフレーズ自動入力までを備忘のために残す

環境

takashi@minitest:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
takashi@minitest:~$ 
takashi@minitest:~$ uname -a
Linux minitest 5.15.0-53-generic #59-Ubuntu SMP Mon Oct 17 18:53:30 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
takashi@minitest:~$

本環境は Virtual Box 上で動作しております

注意

鍵ファイルを /boot に保存するが、 /boot が暗号化されていないので読み取られる可能性がある
そのことを肝に銘じておこう

流れ

現状確認

lsblk -f

log

takashi@minitest:~$ lsblk -f
NAME                        FSTYPE      FSVER    LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
loop0                       squashfs    4.0                                                         0   100% /snap/core20/1405
loop1                       squashfs    4.0                                                         0   100% /snap/snapd/17883
loop2                       squashfs    4.0                                                         0   100% /snap/lxd/23541
loop3                       squashfs    4.0                                                         0   100% /snap/core20/1695
loop4                       squashfs    4.0                                                         0   100% /snap/lxd/22923
sda
├─sda1
├─sda2                      ext4        1.0            6a582bb3-1179-4568-abdf-fd70293593ee      1.5G     7% /boot
└─sda3                      crypto_LUKS 2              15985b1d-1c87-4e82-907c-e2d9b87526c6
  └─dm_crypt-0              LVM2_member LVM2 001       xCsVdJ-mYXT-wcy8-w3Xm-06eJ-9hm1-2Z2TfM
    └─ubuntu--vg-ubuntu--lv ext4        1.0            42bfcc6a-95e1-483c-ac6b-629bd9baf1e8      3.3G    54% /
takashi@minitest:~$

LVM on LUKS になってますね

パスフレーズファイルを作る

鍵ファイルを作ってパーミッションの設定を行う

sudo dd if=/dev/urandom of=/boot/keyfile1 bs=1024 count=4
sudo chmod 0400 /boot/keyfile1

作ったパスフレーズを luks で使えるように追加する

事前に今の Keyslots を確認する

sudo cryptsetup luksDump /dev/sda3

1 つが通常だと思う

# 本コマンドを実行すると現在のパスフレーズを聞かれるので入力すると追加される
sudo cryptsetup -v luksAddKey /dev/sda3 /boot/keyfile1

log

takashi@minitest:~$ sudo cryptsetup -v luksAddKey /dev/sda3 /boot/keyfile1
Enter any existing passphrase:
Key slot 0 unlocked.
Key slot 1 created.
Command successful.
takashi@minitest:~$

確認

sudo cryptsetup luksDump /dev/sda3

2個めが増えていること

/etc/crypttab の設定

現状確認

sudo cat /etc/crypttab

log

takashi@minitest:~$ sudo cat /etc/crypttab
dm_crypt-0 UUID=15985b1d-1c87-4e82-907c-e2d9b87526c6 none luks
takashi@minitest:~$

この /etc/crypttab を編集する

引数について

第3引数
boot pattision に保存されている /keyfile1 を参照するようにする none → /dev/disk/by-uuid/{uuid of boot partition}:/keyfile1
第4引数
luks → luks,keyscript=/lib/cryptsetup/scripts/passdev
とする

boot パーティションの UUID は最初の lsblk で確認した

6a582bb3-1179-4568-abdf-fd70293593ee

であるので、第 3引数は

/dev/disk/by-uuid/6a582bb3-1179-4568-abdf-fd70293593ee:/keyfile1

となる
ようするに /boot/keyfile1 を指定している

編集

sudo vim /etc/crypttab

# dm_crypt-0 UUID=15985b1d-1c87-4e82-907c-e2d9b87526c6 none luks
dm_crypt-0 UUID=15985b1d-1c87-4e82-907c-e2d9b87526c6 /dev/disk/by-uuid/6a582bb3-1179-4568-abdf-fd70293593ee:/keyfile1 luks,keyscript=/lib/cryptsetup/scripts/passdev

initramfs を更新

sudo update-initramfs -u

再起動してテスト

sudo reboot

無事パスフレーズを入力せずに立ち上がってきたら完了

最後に

この VM は削除しました

参考

LUKSパーティション自動アンロック(ubuntuインストール時の暗号化)。自動起動。 - Qiita