树莓派 LVM on LUKS

来自 Alpine Linux

在加密根目录上安装 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 应具有 lvmcryptsetup 功能。
  • /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 /

参见