使用 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.txt
crypttab
(initramfs)
最新的 Ubuntu 映像包含 cryptsetup,因此您可以使用台式电脑将“可写”(根)分区转换为 LUKS。我首先从20.10 64 位服务器映像。
准备 SD 卡但不要安装到 RPi 中。将其保留在您的台式电脑上。
卸载 SD 卡(/dev/sdc2 是我的“可写”(根)分区 - 您的可能不同)。
sudo umount /dev/sdc2
检查分区:
sudo e2fsck -f /dev/sdc2
缩小分区:
sudo resize2fs -M /dev/sdc2
加密分区(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
解密LUKS分区:
sudo cryptsetup luksOpen /dev/sdc2 rootfs
扩展分区:
sudo resize2fs /dev/mapper/rootfs
挂载分区:
sudo mkdir mnt; sudo mount /dev/mapper/rootfs mnt;
编辑 etc/crypttab...
sudo vim mnt/etc/crypttab
- 添加
rootfs /dev/mmcblk0p2 none luks
- 添加
编辑 etc/fstab...
sudo vim mnt/etc/fstab
- 将第一行更改为
/dev/mapper/rootfs / ext4 defaults,noatime 0 0
- 将第一行更改为
在系统启动分区上,编辑
cmdline.txt
...- 改成
root=LABEL=writable
root=/dev/mapper/rootfs
- 删除
splash
(因此它会在启动时提示输入密码) - 添加
cryptdevice=/dev/mmcblk0p2:sdcard
到行尾
- 改成
它应该看起来像这样...
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
卸载 microSD 卡并安装到 Raspberry Pi 中。启动失败,进入(initramfs)因为 initramfs 尚未更新。
从 initramfs 手动解密:
(initramfs) cryptsetup luksOpen /dev/mmcblk0p2 rootfs
继续启动:
(initramfs) exit
登录(ubuntu/ubuntu)并更新initramfs:
sudo update-initramfs -u
重启:
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的回答中,调整加密分区大小的步骤不起作用。
这有效:
- 使用磁盘应用程序,将安装映像恢复到卡上。
- 删除“可写”的根分区。
- 在系统启动分区后的空白处,创建一个名为“可写”的新加密 ext4 分区。
- 打开该分区的加密。
- 检查
blockdev --getsize64 /dev/mapper/whatever
加密分区内部的大小并记下数字。 - 将安装映像再次恢复到卡上。
- 将卡放入Raspberry Pi并启动。
- 使用您不想保留的密码完成设置。观察安装后脚本删除
cryptsetup-initramfs
。 - 重启后,
sudo apt install cryptsetup-initramfs
- 将卡放回另一台计算机。
- 确保该
writable
分区尚未挂载。 - 在“磁盘”应用程序中,将
writable
分区大小调整为您在步骤 5 中记下的精确字节数。 - 使用 dd 创建分区的磁盘映像
writable
:dd if=/dev/something of=/some/place/else.img bs=1M
- 使用磁盘应用程序删除
writable
分区。 - 在系统启动分区后的空白处,创建一个名为“可写”的新加密 ext4 分区。
- 打开新加密分区的加密但保持其中的文件系统未挂载。
- 将图像复制到加密分区:
dd if=/some/place/else.img of=/dev/mapper/something bs=1M
。 - 从 Cameron 的第 8 步继续。
答案4
我已经尝试过上述方法和这种方法https://github.com/ViRb3/pi-encrypted-boot-ssh/tree/8044e5036f2218146a6be443f480f289d860944a两天了,失败了。
解决方案是使用 BerryBoothttps://berryterminal.com/doku.php/berryboot在 Ubuntu 安装时有 luks 加密选项加密磁盘检查