Редактирование меню grub с включенной защитой при загрузке в Ubuntu/PartedMagic

Вопрос или проблема

У меня есть ноутбук DELL Latitude 5491 с установленной Windows 10, с включенным безопасным загрузкой и в режиме EFI. После покупки я установил Ubuntu 20.04 рядом с Windows в режиме двойной загрузки, также с включенной безопасной загрузкой/EFI. Разделы 2, 3 и 5 предназначены для системы Windows, разделы 1 и 4 – для Ubuntu. На разделе 6 хранится ISO-образ Clonezilla Live CD для резервного копирования. На данный момент все работает хорошо.
На следующем этапе я сохранил распакованный ISO-образ Parted Magic Live CD на разделе 7, отредактировал меню grub, но загрузка Parted Magic из меню grub завершается ошибкой с недействительной подписью для BzImage…
Тем не менее, когда я загружаю Parted Magic напрямую из EFI (временное меню загрузки или настройка EFI), система загружается нормально.
В чем может быть проблема? Это выглядит так:

Схема разделов:

Устройство         Начало        Конец   Секторы   Размер Тип
/dev/sda1       2048    1394687   1392640   680M EFI System
/dev/sda2    1394688    1656831    262144   128M Microsoft reserved
/dev/sda3    1656832  507570175 505913344 241,2G Microsoft basic data
/dev/sda4  507570176  983883775 476313600 227,1G Linux filesystem
/dev/sda5  983883776  985911295   2027520   990M Windows recovery environment
/dev/sda6  985911296  987500543   1589248   776M Linux filesystem
/dev/sda7  987500544 1000214527  12713984   6,1G Microsoft basic data

Отредактированный файл 40_custom:

#!/bin/sh
exec tail -n +3 $0
# Этот файл предоставляет простой способ добавить пользовательские записи в меню. Просто напишите
# записи меню, которые вы хотите добавить, после этого комментария. Будьте осторожны, чтобы не изменить
# строку 'exec tail' выше.

menuentry "clonezilla" {
    set isofile="/clonezilla-live-20210127-groovy-amd64.iso"
    loopback loop (hd0,gpt6)$isofile
    linuxefi (loop)/live/vmlinuz boot=live components config findiso=$isofile ip=frommedia toram=filesystem.squashfs union=overlay username=user
    initrdefi (loop)/live/initrd.img
}
menuentry "partedmagic" {
 insmod chain
 set root=(hd0,gpt7)
 configfile /boot/grub/grub.cfg
}

Файл grub.cfg:

set default="0"
set timeout="20"
set hidden_timeout_quiet=false
set gfxmode=auto
insmod efi_gop
insmod efi_uga
insmod gfxterm
terminal_output gfxterm
set color_normal=white/black
set color_highlight=black/white
loadfont /boot/grub/unicode.pf2
background_image /boot/grub/pmagic.png

set default_settings="edd=on vga=normal mem=32G"
set live_settings="boot=live eject=no"
set linux="/pmagic/bzImage"
set initrd_img="/pmagic/initrd.img /pmagic/fu.img /pmagic/m.img"
set default=2
set message="Загрузка ядра и initramfs. Пожалуйста, подождите..."

menuentry "Parted Magic UEFI Boot Menu"{
    set
}
menuentry ' '{
    set
}
menuentry "1. Настройки по умолчанию (Работает из ОЗУ 4 ГБ+)"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings
    initrd $initrd_img
}
menuentry "1a. Настройки по умолчанию с 4K монитором"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings m4k=yes
    initrd $initrd_img
}
menuentry "1b. Настройки по умолчанию + меню выбора языка"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings lang=yes
    initrd $initrd_img
}
menuentry ' '{
     true
}
menuentry "2. Live с настройками по умолчанию (2ГБ+ ОЗУ)"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings $live_settings
    initrd $initrd_img
}
menuentry "2a. Live с настройками по умолчанию + меню выбора языка"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings $live_settings lang=yes
    initrd $initrd_img
}
menuentry ' '{
     true
}
menuentry "3. Решение проблемы с черным/пустым экраном"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings nomodeset
    initrd $initrd_img
}
menuentry "4. Нет официального драйвера NVIDIA - используйте Nouveau драйвер NVIDIA."{
        echo $message
        search --set -f $linux
        linux $linux $default_settings modprobe="nouveau"
        initrd $initrd_img
}
menuentry "5. *** Hyper-V ***"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings fbdev=yes
    initrd $initrd_img
}
menuentry "6. Memtest86+" {
    chainloader /boot/memtest/BOOTX64.EFI
}
menuentry "7. EFI Shell" {
    insmod fat
    insmod chain
    terminal_output console
    chainloader /boot/edk2/Shell.efi
}
menuentry ' '{
     true
}
submenu "Меню дополнительных опций"{
    set default_settings="edd=on vga=normal mem=32G"
    set live_settings="boot=live eject=no"
    set linux="/pmagic/bzImage"
    set initrd_img="/pmagic/initrd.img /pmagic/fu.img /pmagic/m.img"
    set message="Загрузка ядра и initramfs. Пожалуйста, подождите..."
    menuentry "1. Super Grub2 Disk EFI" {
        chainloader /boot/supergrub2disk/super_grub2_disk_standalone_x86_64_efi_2.04s1.EFI
    }   
    menuentry "2. Clonezilla"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings clonezilla=yes
        initrd $initrd_img
    }
    menuentry "3. Nwipe"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings nwipe=yes
        initrd $initrd_img
    }
    menuentry "4. Загрузить модули ядра iSCSI"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings iscsi=yes
        initrd $initrd_img
    }
    menuentry "5. Загрузить конфигурацию для модуля xf86-video-qxl"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings qxl=yes
        initrd $initrd_img
    }
}
}
submenu "Меню безопасной загрузки"{
    set default_settings="edd=on vga=normal mem=32G"
    set live_settings="boot=live eject=no"
    set linux="/pmagic/bzImage"
    set initrd_img="/pmagic/initrd.img /pmagic/fu.img /pmagic/m.img"
    set message="Загрузка ядра и initramfs. Пожалуйста, подождите..."
    menuentry "1. Без ACPI (Расширенный интерфейс конфигурации и питания)"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings acpi=off
        initrd $initrd_img
    }
    menuentry "2. Не вынимать CD"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings eject=no
        initrd $initrd_img
    }
    menuentry "3. Совместимость эмулятора"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings $live_settings noreplace-paravirt
        initrd $initrd_img
    }
    menuentry "4. Консоль (загрузка в оболочку)"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings consoleboot=yes
        initrd $initrd_img
    }
    menuentry "5. Initrd.img (загрузка в оболочку initrd.img)"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings initrd_shell=yes
        initrd $initrd_img
    }
    menuentry "6. Radeon без установки режима"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings blacklist=radeon
        initrd $initrd_img
    }
    menuentry "7. Без / принудительная настройка частоты процессора"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings cpufreq=no
        initrd $initrd_img
    }
    menuentry "8. Принудительное решение vesa"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings xconfig=forcevesa
        initrd $initrd_img
    }
    menuentry "9. Принудительная частота обновления"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings xconfig=forcerefresh nomodeset
        initrd $initrd_img
    }
    menuentry "10. Отключить ускоренную 3D графику (DRI)"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings nodri=yes
        initrd $initrd_img
    }
    menuentry "11. Пропавший указатель мыши"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings xmouse=yes
        initrd $initrd_img
    }
    menuentry "12. Macbook Pro 8,x Обход двойной графики"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings
        outb 0x728 1 # Переключение выбора
        outb 0x710 2 # Переключение дисплея
        outb 0x740 2 # Переключение DDC
        outb 0x750 0 # Отключение дискретной графики
        initrd $initrd_img
    }
    menuentry "13. Libata noncq - Диск не разблокируется"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings libata.force=1.0:noncq
        initrd $initrd_img
    }
    menuentry "14. Без IPV6 - Остановить менеджер сети от отключения."{
        echo $message
        search --set -f $linux
        linux $linux $default_settings blacklist=ipv6
        initrd $initrd_img
    }
}
menuentry ' '{
     true
}
submenu "Список чит-кодов"{
menuentry "directory=        Директория, содержащая папку pmagic"{set}
menuentry "iso_filename=     [путь к/]имя файла iso"{set}
menuentry "root=             Устройство загрузки SQFS по идентификатору раздела"{set}
menuentry "label=            Устройство загрузки SQFS по метке"{set}
menuentry "uuid=             Устройство загрузки SQFS по [частичному] uuid"{set}
menuentry "blacklist=        Не загружать модули ядра, например, blacklist=kmod1:kmod2:kmod3"{set}
menuentry "ahci=no           Не загружать модуль ядра ahci"{set}
menuentry "modprobe=         Загружать модули ядра, например, modprobe=kmod4:kmod5:kmod6"{set}
menuentry "consoleboot=yes   Не запускать X-windows"{set}
menuentry "eject=no          Не вынимать CD"{set}
menuentry "gpm=no            Отключить консольный сервер мыши"{set}
menuentry "pmodules=no       Не устанавливать pmagic/pmodules"{set}
menuentry "slapt=no          Не устанавливать пакеты /home/partedmagic/slapt-get/"{set}
menuentry "scripts=no        Не выполнять pmagic/pmodules/scripts"{set}
menuentry "sound=no          Не позволять ALSA устанавливать уровни громкости (без звука)"{set}
menuentry "numlock=on        Установите numlock в включенное состояние при загрузке"{set}
menuentry "conky=no          Не запускать conky автоматически"{set}
menuentry "zfs=no            Не запускать службы zfs"{set}
menuentry "hostname=         Установить имя хоста в XXXXXX[.YYYYYY.ZZZ]"{set}
menuentry "timeconfig=<timezone>|no  Установить часовой пояс | не запускать timeconfig при загрузке"{set}
menuentry "clockfmt=<format> clockfmt=%R (24 часа), clockfmt=%l:%M%P (am/pm)"{set}
menuentry "mdadm=no          Не собирать файловые системы raid"{set}
menuentry "lvm=no            Не запускать модуляцию устройств"{set}
menuentry "sshd=no           Не запускать демон SSH"{set}
menuentry "bluetooth=no      Не запускать демон bluetooth"{set}
menuentry "consolekit=no     Не запускать демон consolekit"{set}
menuentry "dmeventd=no       Не запускать демон событий модуля для устройств"{set}
menuentry "dbus=no           Не запускать демон Dbus"{set}
menuentry "smart=no          Не запускать демон smartmontools"{set}
menuentry "fstabdaemon=no    Не запускать демон Parted Magic /etc/fstab"{set}
menuentry "nfs=no            Не запускать демон NFS"{set}
menuentry "acpid=no          Не запускать демон acpi"{set}
menuentry "cups=no           Не запускать сервер CUPS"{set}
menuentry "netw=no           Не запускать сеть при загрузке"{set}
menuentry "samba=yes         Запустить демоны samba"{set}
menuentry "rdate=yes         Синхронизировать время с rdate при загрузке"{set}
menuentry "monday=1          Понедельник как первый день недели"{set}
menuentry "ntpd=yes          Запустить демон ntpd"{set}
menuentry "cpufreq=no/yes/<gov>  Нет (ноутбук), принудительно (настольный) регулятор частоты процессора"{set}
menuentry "powermanager=no/yes   Нет (ноутбук), принудительно (настольный) менеджер питания"{set}
menuentry "iscsi=yes         Запустить инициатор iscsi"{set}
menuentry "xconfig=XXXXXX|no Использовать /etc/X11/xorg.conf.XXXXXX | Отменить"{set}
menuentry "nodri=yes         Без DRI"{set}
menuentry "qxl=yes           X для запуска с устройством QXL"{set}
menuentry "xmouse=yes        Попробуйте это, если ваш X не показывает указатель мыши"{set}
menuentry "clonezilla=yes    Загрузка в clonezilla"{set}
menuentry "nwipe=yes         Загрузка в nwipe"{set}
menuentry "cmd=              Загрузка в <команда>, например cmd="nwipe --method dod"{set}
menuentry "device_list=yes   Показать устройства/разделы, которые можно просканировать для SQFS"{set}
menuentry "removableonly=yes Только сканировать устройства/разделы с атрибутом "съемный""{set}
menuentry "testing=yes       Дождаться завершения загрузки, используйте <Shift+Page Up|Down> для прокрутки"{set}
menuentry "                  Нажмите <Enter> чтобы продолжить"{set}
menuentry ""{set}
menuentry "Картинки клавиатуры:"{set}
menuentry "azerty be-latin1 fr-latin1 fr-latin9 fr-pc fr wangbe wangbe2 ANSI-dvorak"{set}
menuentry "dvorak-l dvorak-r dvorak tr_f-latin5 trf bg-cp1251 bg-cp855 bg_bds-cp1251"{set}
menuentry "bg_bds-utf8 bg_pho-cp1251 bg_pho-utf8 br-abnt br-abnt2 br-latin1-abnt2"{set}
menuentry "br-latin1-us by cf cz-cp1250 cz-lat2-prog cz-lat2 cz defkeymap"{set}
menuentry "defkeymap_V1.0 dk-latin1 dk emacs emacs2 es-cp850 es et-nodeadkeys et"{set}
menuentry "fi-latin1 fi-latin9 fi gr-pc gr hu101 hypermap.m4 il-heb il-phonetic il"{set}
menuentry "is-latin1-us is-latin1 it-ibm it it2 jp106 la-latin1 lt.baltic lt.l4 lt"{set}
menuentry "mk-cp1251 mk-utf mk mk0 nl nl2 no-latin1.doc no-latin1 no pc110 pl pl2"{set}
menuentry "pt-latin1 pt-latin9 ro_win ru-cp1251 ru-ms ru-yawerty ru ru1 ru2 ru3 ru4"{set}
menuentry "ru_win se-fi-ir209 se-fi-lat6 se-ir209 se-lat6 sk-prog-qwerty sk-qwerty"{set}
menuentry "speakup-jfw speakup-jfw.readme speakupmap sr-cy sv-latin1 tr_q-latin5 tralt"{set}
menuentry "trq ua-utf-ws ua-utf ua-ws ua uk us-acentos us croat cz-us-qwertz"{set}
menuentry "de-latin1-nodeadkeys de-latin1 de de_CH-latin1 fr_CH-latin1 fr_CH hu"{set}
menuentry "sg-latin1-lk450 sg-latin1 sg sk-prog-qwertz sk-qwertz slovene"{set}
menuentry "Пример:"{set}
menuentry "На меню загрузки нажмите <TAB> и затем измените 'keymap=us' на 'keymap=fr-latin1'"{set}
menuentry ""{set}
menuentry "Режимы VGA:"{set}
menuentry "Обычная VGA консоль: vga=normal"{set}
menuentry "Консоль кадрового буфера VESA @ 1024x768x64k: vga=791"{set}
menuentry "Консоль кадрового буфера VESA @ 1024x768x32k: vga=790"{set}
menuentry "Консоль кадрового буфера VESA @ 1024x768x256: vga=773"{set}
menuentry "Консоль кадрового буфера VESA @ 800x600x64k:  vga=788"{set}
menuentry "Консоль кадрового буфера VESA @ 800x600x32k:  vga=787"{set}
menuentry "Консоль кадрового буфера VESA @ 800x600x256:  vga=771"{set}
menuentry "Консоль кадрового буфера VESA @ 640x480x64k:  vga=785"{set}
menuentry "Консоль кадрового буфера VESA @ 640x480x32k:  vga=784"{set}
menuentry "Консоль кадрового буфера VESA @ 640x480x256:  vga=769"{set}
}

Тем не менее путь к “загрузчику” раздела 7 в настройках EFI:

\EFI\boot\bootx64.efi

Когда я использовал этот путь для редактирования файла 40_custom вместо использования файла grub.cfg, это заканчивается ошибкой.

Спасибо за ваши ответы.
П.

ИЗМЕНЕНИЕ:

Вариант 1:
Я использовал следующее редактирование файла custom_40

menuentry "partedmagic" {
 insmod chain
 set root=(hd0,gpt7)
 configfile /boot/EFI/bootx64.efi
}

Когда я пытался отредактировать этот файл следующим образом:

menuentry "partedmagic" {
insmod chain
set root=(hd0,gpt7)
chainloader /boot/EFI/bootx64.efi
}

Я получил сообщение об ошибке:

Загрузчик не подтвердил загруженное изображение…
Система скомпрометирована. Остановка.

Вариант 2:
Процесс повторной подписи BzImage Parted Magic был успешно завершен, но когда я пытаюсь загрузить это, все еще появляется ошибка.

… имеет недействительную подпись, вам нужно загрузить ядро сначала.

Ответ или решение

Для решения проблемы загрузки Parted Magic с помощью GRUB в условиях, когда включён Secure Boot, необходимо обратить внимание на несколько важных аспектов, касающихся настройки вашего загрузчика и подписи ядра. Ниже приведены рекомендации, которые помогут вам успешно загрузить Parted Magic.

Проблема

Вы сталкиваетесь с ошибками при попытке загрузить Parted Magic через GRUB, а сообщение о недопустимой подписи bzImage указывает на то, что Secure Boot блокирует его запуск. При этом вы можете загрузить Parted Magic напрямую через EFI, что говорит о том, что сам загрузчик или его конфигурация неправильно настроены для работы с Secure Boot.

Решения

1. Использование Chainloading

Вместо использования конструкции configfile, попробуйте использовать chainloader, который позволит GRUB передать управление загрузчику Parted Magic непосредственно:

menuentry "partedmagic" {
    insmod chain
    set root=(hd0,gpt7)
    chainloader /EFI/boot/bootx64.efi
}

Убедитесь, что путь верный. Проверьте, что bootx64.efi действительно находится в указанной директории.

2. Подпись ядра Parted Magic

Если вы хотите загрузить Parted Magic с помощью GRUB без отключения Secure Boot, вам потребуется подписать его ядро (bzImage) вашим собственным сертификатом. Вы можете использовать MOK (Machine Owner Key), если он у вас хотя бы единожды установлен в BIOS при включении поддержки сторонних модулей:

  1. Экспортируйте MOK:
openssl x509 -in /var/lib/shim-signed/mok/MOK.der -inform DER -out /var/lib/shim-signed/mok/MOK.pem
  1. Создайте резервную копию оригинального ядра:
mv /mnt/sda7/pmagic/bzImage /mnt/sda7/pmagic/bzImage.orig
  1. Подпишите ядро:
sbsign --key /var/lib/shim-signed/mok/MOK.priv --cert /var/lib/shim-signed/mok/MOK.pem \
    --output /mnt/sda7/pmagic/bzImage \
    /mnt/sda7/pmagic/bzImage.orig

или, если доступен другой инструмент:

osslsigncode -certs /var/lib/shim-signed/mok/MOK.pem -key /var/lib/shim-signed/mok/MOK.priv \
    -in /mnt/sda7/pmagic/bzImage.orig -out /mnt/sda7/pmagic/bzImage

3. Работа с сертификатами Secure Boot

Если ваш BIOS позволяет управлять whitelist’ом сертификатов Secure Boot, вы также можете добавить сертификаты Parted Magic и Canonical в whitelist. Для этого:

  1. Извлеките сертификат из существующего подписанного .efi файла:
osslsigncode extract-signature -pem somefile.efi certificate.pkcs7
openssl pkcs7 -inform pem -print_certs -text -in certificate.pkcs7 > certificate.pem
  1. Добавьте сертификаты в список разрешённых с помощью утилиты keytool.efi или через настройки BIOS.

Альтернативный вариант

Если ничего из вышеперечисленного не помогает, вы можете рассмотреть возможность отключения Secure Boot. Это позволит загрузить любые операционные системы и утилиты. Однако это может уменьшить уровень безопасности вашего устройства, так как Secure Boot защищает от выполнения неподписанных загрузчиков.

Заключение

Следуя указанным шагам, вы сможете успешно загрузить Parted Magic через GRUB при включённом Secure Boot. Если вы выполните подписку ядра и корректную настройку GRUB, это обеспечит необходимую защиту системы и функциональность.

Оцените материал
Добавить комментарий

Капча загружается...