如何在加密的 LUKS 分区上从 ISO 启动实时 Ubuntu

如何在加密的 LUKS 分区上从 ISO 启动实时 Ubuntu

有一段时间,我一直想设置我最终的日常携带 USB 驱动器,我当前的设置是混合 MBR-GPT,带有 EFI 32、EFI 64 和旧版 BIOS GRUB,位于 FAT32 分区上,也可用于未加密存储,以及包含敏感信息以及我希望能够从驱动器启动的所有 ISO 的 LUKS 版本 1 分区。现在在 GRUB2 中,我可以insmod luks;insmod ext2cryptomountLUKS 分区;然后我可以像使用任何实时 USB 一样启动启动过程。当然,启动失败,因为 initramfs 无法访问它应该访问的 ISO,因为 GRUB 无法交出加密密钥,所以我被丢进了一个忙碌的 initramfs shell。我的问题是:在实时 USB 启动期间,initramfs 通常会做什么,我如何手动对我的设置执行相同的步骤?到目前为止,我已经设法解密 initramfs 中的分区并安装它,因此我可以访问 ISO - 但我不知道从那里去哪里。

TL;DR:initramfs 在正常实时 USB 启动期间采取哪些步骤,以及如何在首先解锁 ISO 所在的 LUKS 分区后手动执行相同的步骤?

以下是我设置 USB 驱动器的步骤/dev/sda

# Overwrite critical regions to prevent leftovers of previous iterations interfering
dd bs=512 if=/dev/zero seek=0 count=2048 of=/dev/sda
dd bs=512 if=/dev/zero seek=124997632 count=2368 of=/dev/sda

# Set up GPT
sfdisk /dev/sda <<EOF
label: gpt
unit: sectors
1 : start=2048, size=124930048, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, name="travel"
2 : start=124932096, size=65536, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, name="travel_EFI"
3 : start=124997632, size=2335, type=21686148-6449-6E6F-744E-656564454649, name="travel_BIOS"
4 : start=124999967, size=314572800, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, name="travel_STORE"
EOF

# Set up MBR 
sfdisk -Y dos /dev/sda <<EOF
label: dos
1 : start=2048, size=124930048, type=0c, bootable
2 : start=124932096, size=65536, type=ef
3 : start=1, size=2047, type=ee
4 : start=124999967, size=314572800, type=83
EOF

# Wait for kernel to be notified of the changes we made
sleep 5

# Make FAT32 filesystem for GRUB
mkdosfs -n TRAVEL /dev/sda1
mkdosfs /dev/sda2

# Create mount points and mount created partitions
mkdir boot
mkdir efi
mount /dev/sda1 boot
mkdir boot/boot
mount /dev/sda2 efi

# Install 64-bit EFI GRUB
grub-install --target=x86_64-efi --removable --no-nvram \
  --root-directory=boot \
  --boot-directory=boot/boot \
  --efi-directory=efi

# Install 32-bit EFI GRUB
grub-install --target=i386-efi --removable --no-nvram \
  --root-directory=boot \
  --boot-directory=boot/boot \
  --efi-directory=efi

# Install legacy BIOS GRUB
grub-install --target=i386-pc \
  --root-directory=boot \
  --boot-directory=boot/boot \
  /dev/sda

umount efi

# Create grub.cfg to drop into GRUB shell on boot
cat > boot/boot/grub/grub.cfg <<EOF
insmod efi_gop
insmod font
insmod gfxterm
insmod png
loadfont /boot/grub/fonts/unicode.pf2
set gfxmode=auto
set gfxpayload=keep
terminal_output gfxterm
EOF

umount boot

完成上述操作后,我使用 LUKS1(cryptsetup luksFormat --version luks1)和 ext4 文件系统设置了 /dev/sda4,并将 Ubuntu ISO 传输到其中。

在 GRUB 菜单中启动时:

insmod ext2
insmod luks
cryptomount hd0,gpt4

然后照常启动 live ISO

相关内容