我在同一台设备(是 root)上有一个完全加密的系统,/boot
并且包含一个密钥文件,因此我只需要在 GRUB 启动时输入密码,之后则不需要。事实证明,这会导致启动过程非常缓慢,所以我想改变这种情况。现在我设置了一个未加密的单独分区。在 GRUB 之后通过内核解密根目录似乎要快得多。有了这个设置,我不再需要输入密码。这当然会使整个加密想法无效,因为密钥未加密地放在我的 中。因此,我希望内核在启动时要求输入密码。因此我放弃了这种做法并删除了 中的相关条目。我在 中添加了以下内容:/
/dev/sd8
/
/etc/luks/
/boot
/boot/initrd
/etc/luks/sda8_crypt.key
/etc/crypttab
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=afee3be7-e817-4e11-9918-1373dd5e6a33:sda8_crypt root=/dev/mapper/sda8_crypt quiet splash"
GRUB_ENABLE_CRYPTODISK="y"
并且/etc/cryptsetup-initramfs/conf-hook
:
ASKPASS=y
尽管如此,在执行完所有的 update-initramfs 和 update-grub2 之后,我发现自己在 initramfs shell 中启动,需要自己执行 cryptsetup、mount 和 chroot(有趣的是,我被困在那里,因为启动 init 不再有效)。内核命令行中提供给 grub 的 UUID 是 /dev/sda8 的 UUID(因此不是映射的 /dev/mapper/sda8_crypt)。我从 grub.cfg 相关脚本中看到,Ubuntu 在内核命令行中添加了一个额外的 root= 条目,可能是解密(映射)设备的 UUID。
我应该把哪个 UUID 放在哪里才能真正启动 ubuntu?幸运的是,我将旧的 initrd 和 vmlinuz 移到了新文件中,由于它们仍然包含加密密钥,因此现在可以完美启动。
对于 UUID:
/dev/mapper/sda8_crypt: UUID="dbe3d3d7-eb2c-401b-a2c4-56a3e046a3ab" BLOCK_SIZE="4096" TYPE="ext4" –
/dev/sda5: LABEL="boot" UUID="46b05bc4-d3bc-44aa-ac31-3d192f5e2979" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="bd8ad2a8-8b87-4ac2-b06f-6e58159f767f"
/dev/sda8: UUID="afee3be7-e817-4e11-9918-1373dd5e6a33" TYPE="crypto_LUKS" PARTUUID="8c7f615e-0898-468a-9489-18d0412b5436"
并且编译后的grub.cfg中有相关行:
linux /vmlinuz-5.15.0-102-generic-key root=UUID=dbe3d3d7-eb2c-401b-a2c4-56a3e046a3ab ro cryptdevice=afee3be7-e817-4e11-9918-1373dd5e6a33:sda8_crypt root=/dev/mapper/sda8_crypt quiet splash $vt_handoff
谢谢!
答案1
我现在意识到哪里出了问题!我删除了 /etc/crypttab,因为我想删除对密钥文件的引用。/etc/crypttab 内容如下:
sda8_crypt UUID=uuidofthephysicalpartition /etc/luks/sda8_crypt.key,discard
相反,我需要将设置更改为
sda8_crypt UUID=uuidofthephysicalpartition none
瞧,系统要求我输入密码,并且可以安全地将密钥文件存储在外部备份磁盘上。现在我仍然需要再次清理 /etc/default/grub,但我的系统运行正常。