そう言う訳でSDカードを丸ごとLUKSで暗号化して、起動時に自動でマウント・復号化する方法である。
1,lsblkでSDカードを判別する。sdXだったりmmcblk0だったり。今回は/dev/mmcblk0として進める。
2,cryptsetupを使って、SDカード全体をLUKSで暗号化。このときパスフレーズを決める。
sudo cryptsetup luksFormat /dev/mmcblk0
3,暗号化されたSDカードを開き、仮想的なデバイスとして認識する。
sudo cryptsetup luksOpen /dev/mmcblk0 my_encrypted_sd
4,暗号化されたボリュームにext4ファイルシステムを作成する。
sudo mkfs.ext4 /dev/mapper/my_encrypted_sd
5,暗号化解除されたSDカードを一時的にマウントできるか確認する。
sudo mount /dev/mapper/my_encrypted_sd /mnt
6,起動時にSDカードの暗号化を自動解除するために/etc/crypttabを設定する。
sudo vim /etc/crypttab
下記行を追加
my_encrypted_sd /dev/mmcblk0 none luks
my_encrypted_sdはマウント名。noneは手動でパスワードを入力する設定なので後でここを変更する。
7,起動時にSDカードが自動的にマウントされるように/etc/fstabを設定する。まずUUIDを確認する。
sudo blkid /dev/mapper/my_encrypted_sd
UUIDをメモする。
8,/etc/fstabを編集して、SDカードをUUIDでマウントする設定を追加する。
sudo vim /etc/fstab
下記行を追加。さっきメモしたUUIDを使う。
UUID=(メモしたUUID) /mnt/my_encrypted_sd ext4 defaults 0 2
9,自動で復号化するための鍵ファイルを作る。まずディレクトリを作成する。
sudo mkdir -p /etc/keys
続いて鍵ファイルを作成。パーミッションを400に設定しroot以外が読み取れないようにする。
sudo dd if=/dev/random of=/etc/keys/sdcard.key bs=1024 count=4sudo chmod 0400 /etc/keys/sdcard.key
10,LUKS暗号化の解除にその鍵ファイルを使用する設定を行う。ここでパスワードの入力が求められる。
sudo cryptsetup luksAddKey /dev/mmcblk0 /etc/keys/sdcard.key
11,/etc/crypttabを編集して、noneを変更し鍵ファイルを使って自動解除するように設定する。
my_encrypted_sd /dev/mmcblk0 /etc/keys/sdcard.key luks
12,再起動してマウントされているか確認する。
13,使いやすいようにホームディレクトリにシンボリックリンクを作る。
ln -s /mnt/my_encrypted_sd ~/encrypted_sdcard
14,rootアカウントではなくユーザアカウント(tsukasa:tsukasa)でアクセスできるようにするため、まずuid, gidを確認する。最初に作ったユーザなら両方1000のはず。
id tsukasa
15,暗号化解除されたボリュームのパーミッションを変更する。
sudo chown tsukasa:tsukasa /dev/mapper/my_encrypted_sd
16,ボリュームをマウントするディレクトリのパーミッションを設定する。
sudo chown tsukasa:tsukasa /mnt/my_encrypted_sd
sudo chmod 775 /mnt/my_encrypted_sd
17,/etc/fstabを編集して、書き込み権限を追加する。
sudo vim /etc/fstab
下記行の通り、上で確認したuid, gidを追記する。
UUID=(メモしたUUID) /mnt/my_encrypted_sd ext4 defaults,uid=1000,gid=1000 0 2
以上。Happy Hacking!