树莓派 LVM on LUKS
在加密根目录上安装 Alpine 文章补充了现有的树莓派安装说明,仅提供启用从加密介质启动所需的更改。 仅将其用作参考,而不是完整的安装演练。
准备安装介质
创建可引导磁盘。 基本上,您将在 MBR 分区表中创建并格式化 FAT32 分区,在其上设置启动标志,挂载它并将下载的 tarball 提取到其中。 您可以跳过这些引导加载程序步骤,因为 tarball 已经包含了启动所需的一切。
作为作者的偏好,此可引导磁盘(称为 /dev/sda)仅是一个安装程序,在安装过程中不会更改。 目标根磁盘称为 /dev/sdb。
启动安装程序
将我们之前创建的可引导磁盘插入树莓派,并从中启动。 登录并使用 setup-alpine
执行无盘安装。 接下来,我们将设置磁盘。
磁盘设置
插入要用作加密根目录的磁盘。 诸如 lsblk
之类的工具可让您概览所有可用磁盘。 在此示例中,新磁盘变为 /dev/sdb。
创建一个可引导的 FAT32 分区 (/dev/sdb1),它将保存未加密的 /boot,然后创建一个更大的 Linux 分区 (/dev/sdb2),它将保存 LVM 物理卷。
安装必要的软件包
apk add cryptsetup lvm2
使用以下方法之一加密 Linux 分区
cryptsetup luksFormat /dev/sdb2 # 树莓派 5
cryptsetup luksFormat -c xchacha12,aes-adiantum-plain64 /dev/sdb2 # 树莓派 4 及更早版本
此时,您可以按照 LVM on LUKS 页面 创建和格式化 LVM 卷。
将新的根分区挂载到 /mnt,将引导分区挂载到 /mnt/boot(创建目录后),然后像这样运行 setup-disk
setup-disk -m sys /mnt
验证安装
setup-disk 应该为我们设置大多数内容,但最好检查一些关键文件,以避免最终得到无法启动的系统。
以下是要检查的文件列表
- /etc/mkinitfs/mkinitfs.conf 应具有
lvm
和cryptsetup
功能。 - /boot/cmdline.txt 应包含以下选项:
root=/dev/vg0/root cryptroot=UUID=<encrypted_disk_uuid> cryptdm=root
- /etc/fstab 应该为
/dev/vg0/root
(和任何其他 LVM 卷)以及/boot
(按 UUID)包含一行。
最后,友情提示:保存 LUKS 标头的备份(请参阅 cryptsetup-luksHeaderBackup(8)
)。
使用密钥文件解密
“keydisk”(用作解密密钥的存储设备)是一种启用全盘加密的便捷方法,特别是对于无头服务器。 不幸的是,此功能尚不受支持,但有一个 待处理的合并请求 来实现它。
目前,我们可以通过将整个 /boot 分区移动到单独的设备来实现相同的目的。
这假定您已经启动了口令加密的 Alpine 安装,但您可以将其作为安装过程的一部分包含在内,甚至可以单独使用密钥文件而不是口令。
创建密钥文件
可以使用 dd 创建密钥文件
dd if=/dev/urandom of=/crypto_keyfile.bin bs=1M count=1
使其只读,仅所有者
chmod 400 /crypto_keyfile.bin
将密钥文件添加到 LUKS 标头
cryptsetup luksAddKey /dev/sdb2 /crypto_keyfile.bin
准备 Initramfs
根磁盘解密发生在名为 initramfs 的临时环境中。 mkinitfs 会将您的密钥文件复制到 initramfs 文件系统,并将其放置在与复制来源完全相同的路径中(例如,/boot/cryptkey,/var/root.key)。
默认路径是 /crypto_keyfile.bin
,但您可以通过编辑 /etc/mkinitfs/features.d/cryptkey.files
来更改它。
密钥文件的路径也必须作为内核命令行选项在 /boot/cmdline.txt
中传递
cryptkey=/crypto_keyfile.bin
在 /etc/mkinitfs/mkinitfs.conf
中启用必要的功能
features="... cryptsetup cryptkey"
重新生成 initramfs
mkinitfs -c /etc/mkinitfs/mkinitfs.conf -b /
参见
- 树莓派 - 安装 (无盘模式安装)
- 树莓派 - Sys 模式安装 (sys 模式安装)
- LVM on LUKS (加密和 LVM,但请注意并非所有内容都适用于树莓派)