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
crypttabにUUIDを明記して、起動時には必ずしもUSBディスクが接続されていないので、nofail,noautoを指定しておきます。
uuidの文字列の前に”UUID=”を、お忘れなく。
fstabも基本的には同じで、マウントさせたいフォルダの場所を指定しましょう。
systemd-cryptsetup-generatorによって、追加されているサービスが、うまく動いているか確認してみましょう。
systemctl daemon-reload
systemctl start systemd-cryptsetup@encrypted_usb.service
systemctl status systemd-cryptsetup@encrypted_usb.service
journalctl -xeu systemd-cryptsetup@encrypted_usb.service
USBディスクを接続舌状態でLabel名をつけておきます。
sudo e2label /dev/mapper/usb_encrypted Encrypted
sync
ディスクを一度取り外し、再接続しなおすと、新しいLABEL名でマウントされるかと思います。
lsblk -f /dev/sdb3
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb3 crypto_LUKS 2 fb754562-d2e9-4b1b-844f-93a0f759cbaf
└─usb_encrypted ext4 1.0 Encrypted 87d1187a-b65d-484a-bd30-a552ae6b0030 18.3G 1% /run/media/USERNAME/Encrypted
Label名なしだど、UUIDの値でマウントされます。
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb3 crypto_L 2 fb754562-d2e9-4b1b-844f-93a0f759cbaf
└─encrypted_usb
ext4 1.0 87d1187a-b65d-484a-bd30-a552ae6b0030 18.3G 1% /run/media/phoepsilonix/87d1187a-b65d-484a-bd30-a552ae6b0030
以上で、一応完了です。
今回は、暗号化のパラメータをデフォルト値で行いました。
次のコマンドでキーファイルの数なども確認できるようです。
キーファイルは紛失に備えると複数のほうが、いいのかな?
sudo cryptsetup luksDump /dev/sdb3
これでキーファイルでUSBディスクの一部パーティションを暗号化できました。
問題なく動作してくれているようです。
キーファイルは適切にバックアップしておきましょう。
参考サイト
dm-crypt/デバイスの暗号化 - ArchWiki
linuxでディスクのラベルの確認と変更方法まとめ。 - それマグで!
Discussion