Raspberry Pi 4 の外部ディスクの暗号化

Raspberry Pi 4 Model B 4GB モデルで使っている外部ディスクを Cryptsetup を使って暗号化することにしました。

dm-crypt/デバイスの暗号化 - ArchWiki
Cryptsetup は暗号化デバイスを作成・管理する dm-crypt を使うためのコマンドラインツールです。

導入

$ sudo apt update -y && sudo apt upgrade -y && sudo apt install cryptsetup -y

対象のディスク

$ sudo fdisk -l
Disk /dev/sda: 111.79 GiB, 120034123776 bytes, 234441648 sectors

暗号化

※作成はデバイス単位で、すべてのデータが削除されます。

$ sudo cryptsetup -v luksFormat /dev/sda

キーファイル作成

dm-crypt/デバイスの暗号化 - ArchWiki
キーファイルは暗号化されたボリュームを解錠するパスフレーズとして使用するデータを含んだファイルです。

$ sudo sh -c "echo -n 'your_passphrase' > /etc/key_encrypted_hdd"
$ sudo chown root:root /etc/key_encrypted_hdd; sudo chmod 400 /etc/key_encrypted_hdd

マウント

  • 作成したキーファイルを使って、LUKS(Linux Unified Key Setup)パーティションをロック

    # mount
    $ sudo cryptsetup open /dev/sda encrypted_hdd --key-file /etc/key_encrypted_hdd
    $ ls /dev/mapper/
    control  encrypted_hdd
  • フォーマット
    うちにあるディスクはどれもセクタ欠落している模様...

    $ sudo mkfs.ext4 /dev/mapper/encrypted_hdd
    mke2fs 1.47.0 (5-Feb-2023)
    Creating filesystem with 29301110 4k blocks and 7331840 inodes
    Filesystem UUID: 80efd32d-0796-4c27-b305-d509bb4525b5
    Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872
     
    Allocating group tables: done                            
    Writing inode tables: done                            
    Creating journal (131072 blocks): 
    done
    Writing superblocks and filesystem accounting information: done
  • マウント

    $ sudo mkdir /media/encrypted_hdd
    $ sudo mount /dev/mapper/encrypted_hdd /media/encrypted_hdd
    mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
  • リロードを促された場合は実施する

    $ sudo systemctl daemon-reload
  • 確認

    # マウントされているか
    $ df | grep encrypted_hdd
    /dev/mapper/encrypted_hdd 114777692      24 108901064   1% /media/encrypted_hdd
    # 暗号化されているか
    $ lsblk -f | grep -E 'sda|encrypt'
    sda                 crypto_LUKS 2            30a46184-a0b2-404c-****-************
    └─encrypted_hdd ext4        1.0          a66a1eb9-34bb-4c1b-****-************  103.9G     0% /media

特に問題なくマウントできたら、自動マウント設定を行う。

自動マウント

  • 解錠
    /etc/crypttab を使って、起動時に自動的にマウントを解錠するように設定。

    $ sudo cat /etc/crypttab
    #encrypted_hdd /dev/sda /etc/key_encrypted_hdd luks
    encrypted_hdd UUID=b2422980-xxxx-xxxx-xxxx-xxxx /etc/key_encrypted_hdd luks
  • マウント
    $ cat /etc/rc.local
    #!/bin/bash
    mount /dev/mapper/encrypted_hdd /media/encrypted_hdd