보안 부팅이 활성화된 Ubuntu/PartedMagic을 사용하여 grub 메뉴 편집

보안 부팅이 활성화된 Ubuntu/PartedMagic을 사용하여 grub 메뉴 편집

Windows 10이 사전 설치되어 있고 보안 부팅이 가능하며 EFI 모드가 활성화된 노트북 DELL Latitude 5491이 있습니다. 구매 후 Windows와 함께 듀얼 부팅으로 Ubuntu 20.04를 설치했으며 여전히 보안 부팅/EFI가 활성화되어 있었습니다. 파티션 2, 3, 5는 Windows 시스템용이고 파티션 1과 4는 Ubuntu 시스템용입니다. 파티션 6은 백업 목적으로 Clonezilla Live CD의 ISO를 저장합니다. 여태까지는 그런대로 잘됐다. 다음 단계에서는 Parted Magic 라이브 CD의 압축을 푼 ISO를 파티션 7에 저장하고 grub 메뉴를 편집했지만 grub 메뉴에서 Parted Magic을 실행하면 오류가 발생하고 BzImage 서명이 유효하지 않습니다... 그런데 실행하면 Parted Magic 직접 EFI(임시 부팅 메뉴 또는 EFI 설정)에서 시스템이 정상적으로 부팅됩니다. 무엇이 잘못될 수 있나요? 그것은 다음과 같습니다

파티션 레이아웃:

Device         Start        End   Sectors   Size Type
/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
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

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="Loading kernel and initramfs. Please wait..."

menuentry "Parted Magic UEFI Boot Menu"{
    set
}
menuentry ' '{
    set
}
menuentry "1. Default settings (Runs from RAM 4GB+)"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings
    initrd $initrd_img
}
menuentry "1a. Default settings with 4K Monitor"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings m4k=yes
    initrd $initrd_img
}
menuentry "1b. Default settings + language menu"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings lang=yes
    initrd $initrd_img
}
menuentry ' '{
     true
}
menuentry "2. Live with default settings (2GB+ RAM)"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings $live_settings
    initrd $initrd_img
}
menuentry "2a. Live with default settings + language menu"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings $live_settings lang=yes
    initrd $initrd_img
}
menuentry ' '{
     true
}
menuentry "3. Black/Blank Screen workaround"{
    echo $message
    search --set -f $linux
    linux $linux $default_settings nomodeset
    initrd $initrd_img
}
menuentry "4. No official NVIDIA driver - Use Nouveau NVIDIA driver instead."{
        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 "Extras Menu"{
    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="Loading kernel and initramfs. Please wait..."
    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. Load iSCSI Kernel Modules"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings iscsi=yes
        initrd $initrd_img
    }
    menuentry "5. Load config for xf86-video-qxl module"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings qxl=yes
        initrd $initrd_img
    }
}
}
submenu "Failsafe Menu"{
    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="Loading kernel and initramfs. Please wait..."
    menuentry "1. No ACPI (Advanced Configuration and Power Interface)"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings acpi=off
        initrd $initrd_img
    }
    menuentry "2. Do not eject CD"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings eject=no
        initrd $initrd_img
    }
    menuentry "3. Emulator compatibility"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings $live_settings noreplace-paravirt
        initrd $initrd_img
    }
    menuentry "4. Console (boots to the shell)"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings consoleboot=yes
        initrd $initrd_img
    }
    menuentry "5. Initrd.img (boot to initrd.img shell)"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings initrd_shell=yes
        initrd $initrd_img
    }
    menuentry "6. Radeon no modeset"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings blacklist=radeon
        initrd $initrd_img
    }
    menuentry "7. No / force CPU Frequency Scaling"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings cpufreq=no
        initrd $initrd_img
    }
    menuentry "8. Force vesa workaround"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings xconfig=forcevesa
        initrd $initrd_img
    }
    menuentry "9. Force refresh rate"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings xconfig=forcerefresh nomodeset
        initrd $initrd_img
    }
    menuentry "10. Disable accelerated 3D graphics (DRI)"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings nodri=yes
        initrd $initrd_img
    }
    menuentry "11. Missing Mouse Pointer"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings xmouse=yes
        initrd $initrd_img
    }
    menuentry "12. Macbook Pro 8,x Dual Graphics Workaround"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings
        outb 0x728 1 # Switch select
        outb 0x710 2 # Switch display
        outb 0x740 2 # Switch DDC
        outb 0x750 0 # Power down discrete graphics
        initrd $initrd_img
    }
    menuentry "13. Libata noncq - Drive will not unlock"{
        echo $message
        search --set -f $linux
        linux $linux $default_settings libata.force=1.0:noncq
        initrd $initrd_img
    }
    menuentry "14. No IPV6 - Stop Network Manager from disconnecting."{
        echo $message
        search --set -f $linux
        linux $linux $default_settings blacklist=ipv6
        initrd $initrd_img
    }
}
menuentry ' '{
     true
}
submenu "List of Cheat Codes"{
menuentry "directory=        Directory containing the pmagic folder"{set}
menuentry "iso_filename=     [path to/]iso filename"{set}
menuentry "root=             SQFS boot device by partition id"{set}
menuentry "label=            SQFS boot device by label"{set}
menuentry "uuid=             SQFS boot device by [partial] uuid"{set}
menuentry "blacklist=        Do not load kernel modules, e.g. blacklist=kmod1:kmod2:kmod3"{set}
menuentry "ahci=no           Do not load the ahci kernel module"{set}
menuentry "modprobe=         Load kernel modules, e.g. modprobe=kmod4:kmod5:kmod6"{set}
menuentry "consoleboot=yes   Do not start X-windows"{set}
menuentry "eject=no          Do not eject CD"{set}
menuentry "gpm=no            Disable the console mouse server"{set}
menuentry "pmodules=no       Do not install pmagic/pmodules"{set}
menuentry "slapt=no          Do not install /home/partedmagic/slapt-get/ packages"{set}
menuentry "scripts=no        Do not execute pmagic/pmodules/scripts"{set}
menuentry "sound=no          Do not let ALSA set volume levels (mute)"{set}
menuentry "numlock=on        Set numlock to on at boot"{set}
menuentry "conky=no          Do not auto-start conky"{set}
menuentry "zfs=no            Do not start zfs services"{set}
menuentry "hostname=         Set hostname to XXXXXX[.YYYYYY.ZZZ]"{set}
menuentry "timeconfig=<timezone>|no  Set timezone | do not start timeconfig at boot"{set}
menuentry "clockfmt=<format> clockfmt=%R (24-hours), clockfmt=%l:%M%P (am/pm)"{set}
menuentry "mdadm=no          Do not assemble raid filesystems"{set}
menuentry "lvm=no            Do not start the device mapper"{set}
menuentry "sshd=no           Do not start SSH daemon"{set}
menuentry "bluetooth=no      Do not start the bluetooth daemon"{set}
menuentry "consolekit=no     Do not start the consolekit daemon"{set}
menuentry "dmeventd=no       Do not start the device mapper event daemon"{set}
menuentry "dbus=no           Do not start the Dbus daemon"{set}
menuentry "smart=no          Do not start the smartmontools daemon"{set}
menuentry "fstabdaemon=no    Do not start the Parted Magic /etc/fstab daemon"{set}
menuentry "nfs=no            Do not start the NFS daemon"{set}
menuentry "acpid=no          Do not start the acpi daemon"{set}
menuentry "cups=no           Do not start the CUPS server"{set}
menuentry "netw=no           Do not start the network at boot"{set}
menuentry "samba=yes         Start the samba daemons"{set}
menuentry "rdate=yes         Sync time with rdate at boot"{set}
menuentry "monday=1          Monday as first day of the week"{set}
menuentry "ntpd=yes          Start the ntpd daemon"{set}
menuentry "cpufreq=no/yes/<gov>  No (laptop), force (desktop) CPU freq scaling governor"{set}
menuentry "powermanager=no/yes   No (laptop), force (desktop) power manager"{set}
menuentry "iscsi=yes         Start iscsi initiator"{set}
menuentry "xconfig=XXXXXX|no Use /etc/X11/xorg.conf.XXXXXX | Undo"{set}
menuentry "nodri=yes         No DRI"{set}
menuentry "qxl=yes           X to start with QXL device"{set}
menuentry "xmouse=yes        Try this if your X does not show a mouse cursor"{set}
menuentry "clonezilla=yes    Boot into clonezilla"{set}
menuentry "nwipe=yes         Boot into nwipe"{set}
menuentry "cmd=              Boot into <command>, e.g. cmd="nwipe --method dod""{set}
menuentry "device_list=yes   Show devices/partitions being scanned for the SQFS"{set}
menuentry "removableonly=yes Only scan devices/partitions with "removable" attribute"{set}
menuentry "testing=yes       Wait at boot completion, use <Shift+Page Up|Down> to scroll"{set}
menuentry "                  Press <Enter> to continue"{set}
menuentry ""{set}
menuentry "Keyboard maps:"{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 "Example:"{set}
menuentry "At the boot menu press <TAB> and then change 'keymap=us' to 'keymap=fr-latin1'"{set}
menuentry ""{set}
menuentry "VGA modes:"{set}
menuentry "Normal VGA console: vga=normal"{set}
menuentry "VESA framebuffer console @ 1024x768x64k: vga=791"{set}
menuentry "VESA framebuffer console @ 1024x768x32k: vga=790"{set}
menuentry "VESA framebuffer console @ 1024x768x256: vga=773"{set}
menuentry "VESA framebuffer console @ 800x600x64k:  vga=788"{set}
menuentry "VESA framebuffer console @ 800x600x32k:  vga=787"{set}
menuentry "VESA framebuffer console @ 800x600x256:  vga=771"{set}
menuentry "VESA framebuffer console @ 640x480x64k:  vga=785"{set}
menuentry "VESA framebuffer console @ 640x480x32k:  vga=784"{set}
menuentry "VESA framebuffer console @ 640x480x256:  vga=769"{set}
}

그러나 EFI 설정에서 파티션 7의 "부트로더" 경로는 다음과 같습니다.

\EFI\boot\bootx64.efi

grub.cfg 파일을 사용하는 대신 이 경로를 사용하여 40_custom 파일을 편집하면 오류가 발생합니다.

답변 주셔서 감사합니다. 피.

편집하다:

옵션 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: Parted Magic의 bzImage 종료 프로세스가 성공적으로 완료되었지만 실행하려고 하면 여전히 오류가 발생합니다.

...서명이 유효하지 않습니다. 먼저 커널을 로드해야 합니다.

답변1

Clonezilla의 커널은 Ubuntu에서 제공되므로 Canonical(Ubuntu 배포판을 유지 관리하는 회사)의 Secure Boot 개인 키를 사용하여 서명됩니다.

부팅 프로세스에 shimx64.efiUbuntu에서의 부팅이 포함된 경우 Canonical의 인증서가 펌웨어의 안전 부팅 허용 목록에 (비영구적으로) 추가되어 Ubuntu 및 Clonezilla를 부팅할 수 있습니다.

일부 하드웨어 공급업체는 펌웨어 화이트리스트에 Canonical의 보안 부팅 인증서를 포함할 수도 있으므로 이러한 공급업체의 시스템은 Ubuntu 또는 Clonezilla를 부팅할 때 shim을 생략할 수 있습니다.

분명히 Parted Magic 라이브 CD에는 shimx64.efi또 다른 안전 부팅 인증서가 포함된 자체 버전이 포함되어 있습니다. 이 버전의 shim이 부팅 프로세스에 포함되면 보안 부팅이 활성화된 상태에서 Parted Magic을 부팅할 수 있습니다.

내가 아는 한, 귀하의 선택은 다음과 같습니다:

옵션 1

configfileGRUB 지침을 사용하여 Ubuntu의 GRUB를 통해 Parted Magic의 구성을 로드하는 대신 Parted Magic 미디어에서 shim을 사용해 볼 수 있습니다 .chainload

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

비슷한 것을 시도해 본 것 같지만, 혹시 시도해 보셨나요?정확히이와 같이?

옵션 2

MOK(머신 소유자 키)로 Ubuntu의 shim을 설정하여 타사 커널 모듈 또는 사용자 정의 커널을 활성화하는 경우 MOK 개인 키로 Parted Magic의 커널에 다시 서명하여 Ubuntu의 GRUB에서 부팅할 수 있도록 할 수 있습니다.

MOK가 기본 위치에 있다고 가정하면 다음을 수행할 수 있습니다.

openssl x509 -in /var/lib/shim-signed/mok/MOK.der -inform DER -out /var/lib/shim-signed/mok/MOK.pem
mv <mountpoint of sda7>/pmagic/bzImage <mountpoint of sda7>/pmagic/bzImage.orig

그렇다면

sbsign --key /var/lib/shim-signed/mok/MOK.priv --cert /var/lib/shim-signed/mok/MOK.pem \
    --output <mountpoint of sda7>/pmagic/bzImage \
    <mountpoint of sda7>/pmagic/bzImage.orig

또는

osslsigncode -certs /var/lib/shim-signed/mok/MOK.pem -key /var/lib/shim-signed/mok/MOK.priv \-in 
    -h sha256 <mountpoint of sda7>/pmagic/bzImage.orig \
    -out <mountpoint of sda7>/pmagic/bzImage

사용할 수 있는 PE/COFF 바이너리 서명 도구에 따라 다릅니다.

옵션 3

시스템 펌웨어에서 보안 부팅 키 화이트리스트( db)를 조작할 수 있는 경우 Canonical 및 Parted Magic의 보안 부팅 인증서를 펌웨어 화이트리스트에 직접 추가할 수 있습니다.

기존 서명된 바이너리에서 보안 부팅 인증서를 추출하려면 다음을 수행하세요 *.efi.

osslsigncode extract-signature -pem somefile.efi certificate.pkcs7
openssl pkcs7 -inform pem -print_certs -text -in certificate.pkcs7 >certificate.pem

펌웨어 화이트리스트에 인증서를 추가하려면 keytool.efi필요한 기능이 포함된 경우 또는 BIOS 설정 메뉴를 사용할 수 있습니다. 기억이 정확하다면 keytool.efiPEM 형식의 인증서가 허용되지만 펌웨어는 인증서를 DER 형식으로 변환하거나 서명 또는 서명되지 않은 형식(일반적으로 각각 *.esl) 의 EFI 서명 목록 파일로 변환해야 할 가능성이 높습니다 *.auth.

옵션 0

...또는 시스템 펌웨어에서 보안 부팅을 비활성화할 수 있다면 그렇게 할 수도 있습니다.

보안 부팅 마스터 키(PK)를 지우면 보안 부팅이 설정 모드로 전환되어 모든 운영 체제가 부팅될 수 있으므로 기본적으로 보안 부팅을 비활성화하는 것과 같습니다.

관련 정보