Raspberry Piでネットワーク構築/ルートファイルシステム暗号化
ナビゲーションに移動
検索に移動
概要
ルートファイルシステムを暗号化する。Raspberry Piで暗号化設定を行った後、PCで実際の暗号化を行う。
ハードウェア | Raspberry Pi 4 Model B |
ストレージ | USB接続のSSD |
OS | Raspberry Pi OS (Debian version: 11 (bullseye)) |
ストレージのベンチマーク
ハードウェアAESがないため、処理速度が遅くなる。
$ sudo hdparm -t /dev/mapper/crypt
デバイス | 速度 [MB/s] |
---|---|
/dev/mapper/crypt | 94.41 |
/dev/sda2 | 293.22 |
事前設定
ストレージにRaspberry Pi OSをインストールする。
Raspberry Piでの作業
ソフトウェアを更新する。
$ sudo apt update $ sudo apt upgrade
必要なソフトウェアをインストールする。
$ sudo apt install cryptsetup
PCでの作業
必要に応じて、データをバックアップする。
$ sudo cp -a /dev/BOOT/* boot $ sudo cp -a /dev/ROOT/* root
BOOT | Raspberry Piのブート |
ROOT | Raspberry Piのルート |
暗号化設定
Raspberry Piでの作業
以下の順に、それぞれ変更を加える。
/boot/cmdline.txt
rootパラメータを次のように書き換える。
root=/dev/mapper/crypt cryptdevice=/dev/sda2:crypt
変更後
console=serial0,115200 console=tty1 root=/dev/mapper/crypt cryptdevice=/dev/sda2:crypt rootfstype=ext4 fsck.repair=yes rootwait
/etc/fstab
ルートファイルシステムを次のように書き換える。
/dev/mapper/crypt / ext4 defaults 0 1
/etc/crypttab
次の設定を追加する。
crypt /dev/sda2 none luks,discard,initramfs
initramfs作成
initramfsを作成する。以下のエラーメッセージが出る。
$ sudo update-initramfs -c -k `uname -r` update-initramfs: Generating /boot/initrd.img-5.10.92-v7l+ W: Possible missing firmware /lib/firmware/rtl_nic/rtl8156b-2.fw for built-in driver r8152 W: Possible missing firmware /lib/firmware/rtl_nic/rtl8156a-2.fw for built-in driver r8152 W: Possible missing firmware /lib/firmware/rtl_nic/rtl8153c-1.fw for built-in driver r8152 cryptsetup: ERROR: Couldn't resolve device /dev/root cryptsetup: WARNING: Couldn't determine root device cryptsetup: ERROR: crypt: Source mismatch device-mapper: table ioctl on crypt failed: No such device or address Command failed. cryptsetup: WARNING: Couldn't determine cipher modules to load for crypt W: Couldn't identify type of root file system for fsck hook
Raspberry Pi 4 32bit | v7l+ |
Raspberry Pi 4 64bit | v8+ |
暗号モジュールが組み込まれているか確認する。
$ lsinitramfs /boot/initrd.img-5.10.92-v7l+ | grep crypt
/boot/config.txt
次の設定を最後に追加する。
initramfs initrd.img-RELEASE followkernel
RELEASE | カーネルリリース番号 |
例
initramfs initrd.img-5.10.92-v7l+ followkernel
※起動メッセージが途中で表示されなくなる場合
vc4-kms-v3dを無効にする。
# Enable DRM VC4 V3D driver #dtoverlay=vc4-kms-v3d
カーネル更新後の対応
カーネルが更新された場合、initramfsを作り直す必要がある。
- /etc/default/raspberrypi-kernel
INITRD=Yes
- /etc/kernel/postinst.d/initramfs-tools
/boot/config.txtを書き換えるため、次の処理を最後に追加する。
※カーネル更新後、再起動せずに再度カーネルを更新した場合、書き換えられないことに注意
※行を削除して、再度挿入するようにした方がよい
# /boot/config.txt current_release=$(uname -r) sed -i "/^initramfs /{s/${current_release%-*}/${version%+}/}" "${bootdir}/config.txt"
変数versionには、次のような値が設定される。
5.15.32+ 5.15.32-v7+ 5.15.32-v7l+ 5.15.32-v8+
ストレージのファイルシステムを暗号化
Raspberry Piのルートファイルシステムをバックアップし、ストレージを暗号化した後にコピーする。
PCでの作業
ルートファイルシステムのバックアップ
$ sudo cp -a ROOT/* root
ROOT | Raspberry Piのルート |
ファイルシステムを暗号化し、ルートファイルシステムをコピー
$ sudo cryptsetup luksFormat /dev/SDX $ sudo cryptsetup luksOpen /dev/SDX crypt $ sudo mkfs.ext4 /dev/mapper/crypt $ sudo mount /dev/mapper/crypt crypt $ sudo cp -a ROOT/* crypt $ sudo umount /dev/mapper/crypt $ sudo cryptsetup close crypt
SDX | Raspberry Piのルートデバイス名 |
ROOT | コピーしておいた、Raspberry Piのルートファイル |
補足
有線LAN経由でLUKS暗号を解錠
概要
次の表のとおりである。
SSHサーバ | dropbear |
Raspberry Piでの作業
$ sudo apt install dropbear
次のファイルを作成する。
- /etc/dropbear-initramfs/authorized_keys
- /boot/cmdline.txt
ip=192.168.0.55::192.168.0.1:255.255.255.0::eth0:none
$ sudo update-initramfs -u ln: '/boot/initrd.img-5.15.32-v8+.dpkg-bak' から '/boot/initrd.img-5.15.32-v8+' へのハードリンクの作成に失敗しました: 許可されていない操作です update-initramfs: Generating /boot/initrd.img-5.15.32-v8+ W: Possible missing firmware /lib/firmware/rtl_nic/rtl8156b-2.fw for built-in driver r8152 W: Possible missing firmware /lib/firmware/rtl_nic/rtl8156a-2.fw for built-in driver r8152 W: Possible missing firmware /lib/firmware/rtl_nic/rtl8153c-1.fw for built-in driver r8152
PCでの作業
Raspberry Piが起動し、IPアドレスが設定されたら、次のコマンドを実行する。
$ ssh root@192.168.0.55 # cryptroot-unlock
参考: Debian(PC)の場合
$ sudo update-initramfs -u
- /etc/default/grub
GRUB_CMDLINE_LINUX="ip=192.168.0.55::192.168.0.1:255.255.255.0::enp37s0:none"
$ sudo update-grub