USBディスクの一部を暗号化してみました。
#cryptsetup #luks #crypttab #fstab #ManjaroLinux
2022/11/03
VentoyでISOイメージを起動できるようにしているのですが、Ventoyインストール時に、USBディスクの後半領域に少し余裕を空けているので、その部分を暗号化してみました。
Ventoyをインストールしたデバイスがsdbの場合、
sdb1 Ventoy 起動したいISOイメージをコピーするところ
sdb2 VTOEFI Ventoyのシステムファイルが格納されているところ
sdb3 ここに新たにパーティションを追加して、暗号化します。
主な手順
- パーティションの追加
- UUIDの確認
- キーファイルの作成
- 暗号化
- 自動マウント設定
パーティションの追加
Ventoyインストール後に、後半に余裕を空けていた領域にパーティションを追加します。
Gpartedなどで後半の空き領域に新規パーティションを追加します。
Filesystemは、未フォーマットでいいです。
UUIDの確認
あとで、/etc/crypttabにUSBディスクをUUIDで指定するために、メモしておきます。
lsblk -f /dev/sdb
出力例
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb
├─sdb1 exfat 1.0 Ventoy 515C-7C2C 212.8G 0% /run/media/USERNAME/Ventoy
└─sdb2 vfat FAT16 VTOYEFI 7CDB-00D9 4.6M 85% /run/media/USERNAME/VTOYEFI
└─sdb3 uuid-uuid-uuid-...
キーファイルの作成
暗号化はパスフレーズを入力する方式とキーファイルで復号化する方式の2タイプあります。
今回はキーファイルで暗号化します。
sudo dd bs=512 count=4 if=/dev/urandom of=/etc/mykeyfile
sudo chmod 0400 /etc/mykeyfile
mykeyfileはランダムな文字列です。
人間が覚えにくい推測されにくい文字列を生成させます。
これを適切なデバイスにバックアップしておいてください。
紛失すると復号化できなくなります。
暗号化
USBディスクに作った新しいパーティションを暗号化用にフォーマットします。
/dev/sdb3の部分は適宜、自分の環境に合わせてください。
sudo cryptsetup luksFormat /dev/sdb3 --key-file /etc/mykeyfile
適当な名前で開きます。
sudo cryptsetup luksOpen /dev/sdb3 encrypted_usb --key-file /etc/mykeyfile
ls /dev/mapper
ファイルシステムの作成
sudo mkfs -t ext4 /dev/mapper/encrypted_usb
手動でファイルシステムのマウントのテストを行います。
mkdir -p ~/mount-test
sudo mount /dev/mapper/encrypted_usb ~/mount-test
所有者を一般ユーザーに変更します。
sudo chown -R $USER:$USER ~/mount-test
テスト終了。閉じます。
sudo umount ~/mount-test
sudo cryptsetup luksClose encrypted_usb
自動マウント設定
USBディスクが差し込まれていたら、自動的に暗号化パーティションをマウントするように設定します。
/etc/crypttab
encrypted_usb UUID=uuid-uuid-uuid-... /etc/mykeyfile nofail,noauto
/etc/fstab
/dev/mapper/encrypted_usb /home/USERNAME/encrypted_usb ext4 defaults,noauto,nofail 0 2
crypttabにUUIDを明記して、起動時には必ずしもUSBディスクが接続されていないので、nofail,noautoを指定しておきます。
uuidの文字列の前に”UUID=”を、お忘れなく。
fstabも基本的には同じで、マウントさせたいフォルダの場所を指定しましょう。
上記の2つのファイルを設定して、再起動を行えば、自動でマウントされるかと思います。
再起動してみると、system-cryptsetup-generatorによって、追加されているサービスが、うまく動いているか確認してみましょう。
systemctl status systemd-cryptsetup@encrypted_usb.service
journalctl -xeu systemd-cryptsetup@encrypted_usb.service
以上で、一応完了です。
今回は、暗号化のパラメータをデフォルト値で行いました。
次のコマンドでキーファイルの数なども確認できるようです。
キーファイルは紛失に備えると複数のほうが、いいのかな?
sudo cryptsetup luksDump /dev/sdb3
lsblk -f /dev/sdb3
出力例
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb3 crypto_LUKS 2 fb754562-d2e9-4b1b-844f-93a0f759cbaf
└─encrypted_usb ext4 1.0 87d1187a-b65d-484a-bd30-a552ae6b0030 18.5G 0% /home/USERNAME/encrypted_usb
試しにfstabの設定を外してみたら、/run/media/USERNAME以下に自動でUUID名でマウントされていました。パーティションにラベルを設定しておくと、/run/media/USERNAME/ラベル名でマウントされるみたいです。
system-cryptsetup-generatorで適切に設定されていると、そうなるのかな?
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb3 crypto_LUKS 2 fb754562-d2e9-4b1b-844f-93a0f759cbaf
└─encrypted_usb ext4 1.0 87d1187a-b65d-484a-bd30-a552ae6b0030 18.5G 0% /run/media/USERNAME/87d1187a-b65d-484a-bd30-a552ae6b0030
これでキーファイルでUSBディスクの一部パーティションを暗号化できました。
問題なく動作してくれているようです。
キーファイルは適切にバックアップしておきましょう。
Discussion