Raspberry Pi 4 和 Ubuntu 桌面 20.10 上的 LUKS 磁盘加密

Raspberry Pi 4 和 Ubuntu 桌面 20.10 上的 LUKS 磁盘加密

使用 Raspberry Pi 4(64 位 ARM)预装的 Ubuntu Desktop 20.10 磁盘映像,在安装系统时您将无法像使用基于 x86 USB 的安装程序那样选择使用 LUKS 加密磁盘。

作为参考,我按照此处的说明将系统安装到外部 SSD: https://ubuntu.com/tutorials/how-to-install-ubuntu-desktop-on-raspberry-pi-4#1-overview

总的来说,我对安装非常满意,但如果能够加密整个驱动器,我会更满意。我不想费心去弄清楚如何只加密主文件夹,所以如果有人知道如何在安装操作系统时使用 LUKS 加密 20.10 安装,我将不胜感激。谢谢!

答案1

编辑:我误读了原始问题,但一切仍然适用。/dev/mmcblk0p2以下使用用于安装到 microSD 卡。要安装到外部 SSD/HD,设备可能是。在编辑、和首次通过启动时/dev/sda2使用适当的设备。cmdline.txtcrypttab(initramfs)

最新的 Ubuntu 映像包含 cryptsetup,因此您可以使用台式电脑将“可写”(根)分区转换为 LUKS。我首先从20.10 64 位服务器映像

  1. 准备 SD 卡但不要安装到 RPi 中。将其保留在您的台式电脑上。

  2. 卸载 SD 卡(/dev/sdc2 是我的“可写”(根)分区 - 您的可能不同)。

    sudo umount /dev/sdc2
    
  3. 检查分区:sudo e2fsck -f /dev/sdc2

  4. 缩小分区:sudo resize2fs -M /dev/sdc2

  5. 加密分区(RPi 没有硬件 AES 支持,铁线蕨似乎表现更好)...

    sudo cryptsetup-reencrypt --new --reduce-device-size=16M --type=luks2 -c xchacha12,aes-adiantum-plain64 -s 256 -h sha512 --use-urandom /dev/sdc2
    
  6. 解密LUKS分区:sudo cryptsetup luksOpen /dev/sdc2 rootfs

  7. 扩展分区:sudo resize2fs /dev/mapper/rootfs

  8. 挂载分区:sudo mkdir mnt; sudo mount /dev/mapper/rootfs mnt;

  9. 编辑 etc/crypttab...sudo vim mnt/etc/crypttab

    • 添加rootfs /dev/mmcblk0p2 none luks
  10. 编辑 etc/fstab...sudo vim mnt/etc/fstab

    • 将第一行更改为/dev/mapper/rootfs / ext4 defaults,noatime 0 0
  11. 在系统启动分区上,编辑cmdline.txt...

    • 改成root=LABEL=writableroot=/dev/mapper/rootfs
    • 删除splash(因此它会在启动时提示输入密码)
    • 添加cryptdevice=/dev/mmcblk0p2:sdcard到行尾
  12. 它应该看起来像这样...

    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mapper/rootfs rootfstype=ext4 elevator=deadline rootwait fixrtc quiet cryptdevice=/dev/mmcblk0p2:sdcard
    
  13. 卸载 microSD 卡并安装到 Raspberry Pi 中。启动失败,进入(initramfs)因为 initramfs 尚未更新。

  14. 从 initramfs 手动解密:(initramfs) cryptsetup luksOpen /dev/mmcblk0p2 rootfs

  15. 继续启动:(initramfs) exit

  16. 登录(ubuntu/ubuntu)并更新initramfs:sudo update-initramfs -u

  17. 重启:sudo reboot

它应该重新启动,提示输入密码,然后启动操作系统。

答案2

补充一下 Cameron 的回答,Pi 4 的 Ubuntu 20.10 桌面映像在 initramfs 中不包含 cryptsetup。最简单的解决方案是将其写入 SD 卡后启动到未加密的 Ubuntu,连接到网络,然后安装 cryptsetup-initramfs

完成这些操作后,Cameron 的步骤对我来说非常有效。它也适用于 USB 启动(在您按照 Ubuntu 的说明更新 eeprom 并更改启动顺序后),方法是替换/dev/mmcblk0p2/dev/sda2

一开始我以为它不起作用,几乎放弃了,因为显示屏上只显示一个闪烁的下划线,并没有进入 initramfs 提示符。我所要做的就是等待 7 分钟。尝试从 USB 启动时,我也遇到了 USB 设备读取错误,出于某种原因,使用无电源集线器解决了这个问题。我首先尝试在 Debian 笔记本电脑上执行此操作,但它的 cryptsetup 中没有 Adiantum。然后我尝试在笔记本电脑上从实时 USB 启动 Ubuntu,但无法挂载 Pi 加密分区,我不知道为什么。我在笔记本电脑上安装 Ubuntu 20.10 后才成功。

答案3

我使用了最新的“每日”Ubuntu 22.04桌面映像。在Cameron的回答中,调整加密分区大小的步骤不起作用。

这有效:

  1. 使用磁盘应用程序,将安装映像恢复到卡上。
  2. 删除“可写”的根分区。
  3. 在系统启动分区后的空白处,创建一个名为“可写”的新加密 ext4 分区。
  4. 打开该分区的加密。
  5. 检查blockdev --getsize64 /dev/mapper/whatever加密分区内部的大小并记下数字。
  6. 将安装映像再次恢复到卡上。
  7. 将卡放入Raspberry Pi并启动。
  8. 使用您不想保留的密码完成设置。观察安装后脚本删除cryptsetup-initramfs
  9. 重启后,sudo apt install cryptsetup-initramfs
  10. 将卡放回另一台计算机。
  11. 确保该writable分区尚未挂载。
  12. 在“磁盘”应用程序中,将writable分区大小调整为您在步骤 5 中记下的精确字节数。
  13. 使用 dd 创建分区的磁盘映像writabledd if=/dev/something of=/some/place/else.img bs=1M
  14. 使用磁盘应用程序删除writable分区。
  15. 在系统启动分区后的空白处,创建一个名为“可写”的新加密 ext4 分区。
  16. 打开新加密分区的加密但保持其中的文件系统未挂载。
  17. 将图像复制到加密分区:dd if=/some/place/else.img of=/dev/mapper/something bs=1M
  18. 从 Cameron 的第 8 步继续。

答案4

我已经尝试过上述方法和这种方法https://github.com/ViRb3/pi-encrypted-boot-ssh/tree/8044e5036f2218146a6be443f480f289d860944a两天了,失败了。

解决方案是使用 BerryBoothttps://berryterminal.com/doku.php/berryboot在 Ubuntu 安装时有 luks 加密选项加密磁盘检查

相关内容