0

我的系统是安装在单独硬盘上的 Windows 10 (sdb) 和 Manjaro (sda) 的双重启动。Windows 系统驱动器使用 bitlocker 加密,Manjaro 通过 LUKS 上的 LVM 加密,如下所示 (lsblk)。

NAME             MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                8:0    0 931.5G  0 disk  
├─sda1             8:1    0   619M  0 part  /boot/efi
├─sda2             8:2    0 232.8G  0 part  
│ └─cryptroot    254:0    0 232.8G  0 crypt 
│   ├─vg0-swap   254:1    0    32G  0 lvm   [SWAP]
│   ├─vg0-system 254:2    0    20G  0 lvm   /
│   └─vg0-data   254:3    0 180.8G  0 lvm   /home
└─sda5             8:5    0 698.1G  0 part  
sdb                8:16   0 232.9G  0 disk  
├─sdb1             8:17   0   499M  0 part  
├─sdb2             8:18   0   100M  0 part  
├─sdb3             8:19   0    16M  0 part  
└─sdb4             8:20   0 232.3G  0 part

我将 grub2 设置为默认引导加载程序(安装在 Manjaro 上),它可以让我通过菜单选择是要引导 Windows 还是 Manjaro。但是,问题是它会在给我那个菜单之前询问(LUKS FDE)密码。结果,由于Windows已经用bitlocker加密了,所以我必须在LUKS密码之后输入Windows bitlocker密码,这很不方便。(如果我想启动到 Manjaro,令人惊讶的是,我不需要输入两次 LUKS 密码)

因为 Windows 和 Manjaro 安装在不同的物理硬盘上,并且引导分区没有加密(如上所示),所以当我想引导到 Windows 时,grub 不需要询问我 LUKS 的密码。只有当我选择引导到 Manjaro 时,它才会首先显示菜单并询问我 LUKS 密码。但我不确定如何配置它,也找不到太多关于它的资源。

这是我的 grub 配置文件(在/etc/default/grub

GRUB_DEFAULT=saved
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=hidden
GRUB_DISTRIBUTOR="Manjaro"
GRUB_CMDLINE_LINUX_DEFAULT="quiet udev.log_priority=3"
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<uuid_is_hidden>:cryptroot"

# If you want to enable the save default function, uncomment the following
# line, and set GRUB_DEFAULT to saved.
GRUB_SAVEDEFAULT=true

# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"

# Uncomment to enable booting from LUKS encrypted devices
GRUB_ENABLE_CRYPTODISK=y

# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console

# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command 'videoinfo'
GRUB_GFXMODE=auto

# Uncomment to allow the kernel use the same resolution used by grub
GRUB_GFXPAYLOAD_LINUX=keep

# Uncomment if you want GRUB to pass to the Linux kernel the old parameter 
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx" 
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=true

# Uncomment and set to the desired menu colors.  Used by normal and wallpaper 
# modes only.  Entries specified as foreground/background.
GRUB_COLOR_NORMAL="light-gray/black"
GRUB_COLOR_HIGHLIGHT="green/black"

# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/usr/share/grub/background.png"
GRUB_THEME="/usr/share/grub/themes/manjaro/theme.txt"

# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"
4

1 回答 1

0

好的,经过大量研究,我想出了一个解决方案,但它可能不是最好的解决方案(请参阅下面的警告)。

注意下面的行lsblk

├─sda1             8:1    0   619M  0 part  /boot/efi

除 efi 分区外,该/boot分区实际上已加密/boot/efi。我记得这是我安装 manjaro 时推荐的(也可能是默认的)设置。因为 grub 会从 读取菜单项/boot/grub/grub.cfg,所以它必须首先解密 LUKS 卷(/boot/grub已加密)。因此,如果我们希望 grub 在输入密码之前显示菜单项,我们必须确保/boot/grub/grub.cfg没有加密。

一种方法是安装sda1as/boot而不是/boot/efi. 为此,我们首先需要进行更改/etc/fstab以更改挂载目标。然后,我们需要将所有文件/bootsda1. 您可能希望在此过程中重新安装grub和重新生成initramfs。以下命令对此很有用。

sudo mkinitcpio -P
sudo grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=manjaro --recheck
sudo grub-mkconfig -o /boot/grub/grub.cfg

最后,您需要注释掉该行GRUB_ENABLE_CRYPTODISK=y/etc/default/grub禁用 grub 解密。一切完成后,运行以下命令更新 grub 以写入更改。

sudo update-grub

几个注意事项

  1. 正如我在问题中提到的,在 grub 中输入后,原始设置不需要再次输入 LUKS 密码。这是因为已嵌入密钥文件,initramfs因此无需密码即可解锁 LUKS 卷,详情请参见此处。由于/boot在新设置中未加密,因此我们不得将此密钥文件包含在initramfs. 为此,请修改配置文件mkinitcpio(默认应该是/etc/mkinitcpio.conf)以删除密钥文件(在 下FILES=(...)),然后重新生成initramfs.
  2. 从安全角度来看,默认和推荐的挂载设置/boot/efi而不是/boot提供更好的安全性,因为唯一未加密的部分是 EFI 二进制文件 ( grubx64.efi)。然而,在我的设置中,initramfs和 linux 内核映像 ( vmlinuz.img) 也是未加密的。攻击者可以将恶意代码注入这些文件,这些文件在您输入密码后会被执行。

由于上述原因,我认为我的解决方案不是最好的,并且不确定是否有其他解决方案可以解决这个问题而不会影响太多安全性。

有用的链接:

https://wiki.manjaro.org/index.php/GRUB/Restore_the_GRUB_Bootloader https://wiki.archlinux.org/index.php/GRUB https://wiki.archlinux.org/index.php/Mkinitcpio#Image_creation_and_activation

于 2020-10-11T22:35:54.903 回答