1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

USBディスクの一部を暗号化してみました。

Last updated at Posted at 2025-01-17

#cryptsetup #luks #crypttab #fstab #ManjaroLinux
2022/11/03

VentoyでISOイメージを起動できるようにしているのですが、Ventoyインストール時に、USBディスクの後半領域に少し余裕を空けているので、その部分を暗号化してみました。

Ventoyをインストールしたデバイスがsdbの場合、
sdb1 Ventoy 起動したいISOイメージをコピーするところ
sdb2 VTOEFI Ventoyのシステムファイルが格納されているところ
sdb3 ここに新たにパーティションを追加して、暗号化します。

主な手順

  1. パーティションの追加
  2. UUIDの確認
  3. キーファイルの作成
  4. 暗号化
  5. 自動マウント設定

パーティションの追加

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 mkdir -p /etc/cryptsetup-keys.d/

sudo dd bs=512 count=4 if=/dev/urandom of=/etc/cryptsetup-keys.d/encrypted_usb.key
sudo chmod 0400 /etc/cryptsetup-keys.d/encrypted_usb.key

key fileはランダムなバイナリーデータ(文字列)です。
人間が覚えにくい推測されにくい文字列を生成させます。
これを適切なデバイスにバックアップしておいてください。
紛失すると復号化できなくなります。

暗号化

USBディスクに作った新しいパーティションを暗号化用にフォーマットします。
/dev/sdb3の部分は適宜、自分の環境に合わせてください。

sudo cryptsetup luksFormat /dev/sdb3 --key-file /etc/cryptsetup-keys.d/encrypted_usb.key

適当な名前で開きます。

sudo cryptsetup luksOpen /dev/sdb3 encrypted_usb --key-file /etc/cryptsetup-keys.d/encrypted_usb.key
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/cryptsetup-keys.d/encrypted_usb.key    nofail,auto

crypttabにUUIDを明記して、起動時には必ずしもUSBディスクが接続されていないので、nofail,noautoを指定しておきます。
エラーがでても、弊害がないのでautoに変更しました。

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/encrypted_usb 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

USBディスクが接続されたら、systemctl daemon-reloadの実行と、systemd-cryptsetup@encrypted_usbサービスの起動を設定します。UUIDは自分のディスクのものに、置き換えてください。

echo 'ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}=="fb754562-d2e9-4b1b-844f-93a0f759cbaf", RUN+="/usr/bin/systemctl daemon-reload",RUN+="/usr/bin/systemctl start systemd-cryptsetup@encrypted_usb.service"' | sudo tee -a /etc/udev/rules.d/99-cryptsetup.rules

次のコマンドで、cryptsetupの依存関係が確認できます。いずれかが●ではなく◯マークだと依存関係が満たされていないということで、起動に失敗すると思います。
依存関係を満たすために、daemon-reloadを追加しましたが、もっといい方法もありそうです。環境によっては不要でしょう。
私の環境では、USB接続をしたまま再起動しても、USB接続を外して再起動し、起動後にUSBを接続しても、暗号化したパーティションも鍵ファイルでマウントできるようになりました。(マウント時にユーザーのパスワード入力が求められました。)

systemctl list-dependencies systemd-cryptsetup@encrypted_usb.service

サービスの状態

systemctl status systemd-cryptsetup@encrypted_usb.service

ログ

journalctl -b -xe -f -u systemd-cryptsetup@encrypted_usb.service

以上で、一応完了です。
今回は、暗号化のパラメータをデフォルト値で行いました。
次のコマンドでキーファイルの数なども確認できるようです。
キーファイルは紛失に備えると複数のほうが、いいのかな?

sudo cryptsetup luksDump /dev/sdb3

これでキーファイルでUSBディスクの一部パーティションを暗号化できました。
問題なく動作してくれているようです。
キーファイルは適切にバックアップしておきましょう。

参考サイト

dm-crypt/デバイスの暗号化 - ArchWiki
linuxでディスクのラベルの確認と変更方法まとめ。 - それマグで!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?