модуль обратной связи для grub с безопасной загрузкой

модуль обратной связи для grub с безопасной загрузкой

Я создаю мультизагрузочную флешку с производными от Ubuntu. Я следовал нескольким руководствам, найденным в сети: по сути, вы помещаете iso на флешку, а затем загружаете их с помощью grub, который установлен на флешке.

Однако у меня возникла следующая проблема: моя флешка должна работать и с включенным Secure Boot. Однако мне нужен модуль loopback grub для загрузки isos, а когда я загружаюсь с включенным secure boot, secure boot запрещает grub загружать loopback module. Поэтому я не могу загрузиться

Кто-нибудь смог загрузить ISO-образ из grub с включенной безопасной загрузкой?

Спасибо

валерио

решение1

В данный момент я пытаюсь это обойти.

Похоже, что grub ubuntu был явно пропатчен, чтобы предотвратить загрузку модулей во время безопасной загрузки. Сообщение об ошибке немного бесполезно: оно сбивает с толку ссылкой на имя файла, когда ошибка возникает независимо от того, какой модуль загружается:

apt-get source grub-common
   ...
grep -C 10 "Secure Boot forbids" -r .
   ...
#ifdef GRUB_MACHINE_EFI
  if (grub_efi_secure_boot ())
    {
      grub_error (GRUB_ERR_ACCESS_DENIED,
                  "Secure Boot forbids loading module from %s", filename);
      return 0;
    }
#endif
...

Патч, который это добавляет — ./debian/patches/no_insmod_on_sb.patch

Лучшим вариантом, вероятно, будет пересобрать grub, либо жестко запрограммировав поддержку loopback, либо разрешив загрузку модулей, либо, возможно, просто отключить безопасную загрузку при загрузке с USB (поскольку это, как правило, происходит довольно редко).

Последствия для безопасности, связанные с разрешением grub загружать модули, довольно сложны, поэтому я воздержусь от комментариев по ним, поскольку кто-нибудь тут же скажет мне, что я не прав, и нам придется поспорить.

решение2

Похоже, что текущие версии подписанного образа grub (по крайней мере, тот, который я тестировал, который идет с Ubuntu 20.04) содержат модуль loopback, поэтому нет необходимости загружать/вставлять его. На самом деле, это невозможно, как уже было отмечено в ответе выше. Я публикую конфигурацию, которую я использовал для создания внешнего диска, который может загружать среду установки/живого режима Ubuntu и установку Windows 10.

В итоге я использовал несколько разделов — 512 МБ EFI, 20 ГБ NTFS для распакованных файлов Windows и большой раздел FAT32 для всего остального, включая Ubuntu ISO. Раздел NTFS нужен, так как Windows теперь включает установочные файлы размером более 4 ГБ. Я не думаю, что подписанный образ grub на данный момент включает модуль exfat, поэтому NTFS здесь единственный вариант. В качестве примечания: распакованные файлы Windows должны находиться в корне раздела, размещение их в подкаталоге у меня не сработало.

Ниже приведена конфигурация, которую я использовал для установки grub на раздел EFI:

sudo grub-install \
--boot-directory=[EFI mount point]/boot \
--efi-directory=[EFI mount point] \
--uefi-secure-boot \
--removable \
--target=x86_64-efi \
--no-bootsector \
/dev/sdaX

А вот файл grub.cfg(я думаю, что строки над первым пунктом меню лишние, но это реальная конфигурация, которую я использовал):

search --no-floppy --set=root --fs-uuid [UUID of EFI partition]
set prefix=($root)'/boot/grub'
configfile $root/EFI/BOOT/grub.cfg

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry 'Ubuntu 20.04.1' --class ubuntu --class gnu-linux --class gnu --class os {        
    set isodir='/images/ubuntu'
    set isoname='ubuntu-20.04.1-desktop-amd64.iso'
    set isofile=$isodir/$isoname
    
    search --no-floppy --set=isodev --fs-uuid [UUID of FAT32 partition]

    loopback loop0 ($isodev)/$isofile
    linux (loop0)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash
    initrd (loop0)/casper/initrd
}

menuentry 'Windows 20H2' {
    set efi_path=/efi/boot/bootx64.efi
    
    search --no-floppy --set=windev --fs-uuid [UUID of NTFS partition]
    chainloader ($windev)/$efi_path
}

menuentry 'UEFI Firmware Settings' {
    fwsetup
}

Вот и все, надеюсь, кому-то это будет полезно.

Связанный контент