UEFI 부팅 프로세스에 대해 좀 더 명확하게 설명하고 싶습니다. 아래 스크린샷은 현재 구성을 보여줍니다.
UEFI가 어떤 파일을 실행하는지 명확히 해야 합니다. UEFI는 /boot/efi/EFI/Ubuntu/grubx64.efi, /boot/efi/EFI/Ubuntu/shimx64.efi 또는 /boot/efi/EFI/Ubuntu/grub.cfg를 실행합니까?
/boot/efi/EFI/Ubuntu/grub.cfg의 내용을 보면 실행될 파일이라고 가정하는 /boot/grub/grub.cfg를 가리키는 것으로 나타났습니다. 그렇죠?
모든 분들의 도움에 감사드립니다. 감사해요
답변1
sudo efibootmgr -v
당신이 찾고 있는 것을 정확하게 표시합니다.
EFI variables are not supported on this system.
이 작업을 먼저 수행 해야 한다고 표시되면 sudo mount -t efivarfs none /sys/firmware/efi/efivars
.
답변2
BootCurrent: 0002
시스템이 현재 UEFI NVRAM 부팅 변수를 사용하여 부팅되고 있음을 나타냅니다 Boot0002
.
Boot0002* ubuntu HD(1,GPT,6ed9354d-32d8-427d-b570-d3cb80fe5986,0x800,0x100000)/File(\EFI\Ubuntu\shimx64.efi)
ubuntu
이 변수는 PARTUUID를 사용하여 ESP(EFI 시스템 파티션)에서 파일을 부팅하는 부팅 항목을 정의합니다 .\EFI\Ubuntu\shimx64.efi
6ed9354d-32d8-427d-b570-d3cb80fe5986
따라서 shimx64.efi
Secure Boot 호환 심인 펌웨어가 로드됩니다. 보안 부팅을 지원하는 거의 모든 x86 시스템 의 보안 부팅 화이트리스트(Secure Boot 라고 함)에 있는 Microsoft의 보안 부팅 키로 서명되므로 db
펌웨어에서 이를 실행할 수 있습니다.
shimx64.efi
Ubuntu의 보안 부팅 서명 키를 허용 목록에 비지속적으로 추가합니다(이 부팅에만 해당). MOK(머신 소유자 키)가 구성된 경우 동일한 방식으로 보안 부팅 화이트리스트에도 추가됩니다. 그런 다음 심은 펌웨어에 로드 grubx64.efi
하고 실행을 시도하도록 지시합니다.
grubx64.efi
이는 Ubuntu의 Secure Boot 서명 키로 서명되며(Ubuntu가 Microsoft와의 서명 프로세스를 반복하지 않고 이를 업데이트할 수 있도록 함) shimx64.efi
해당 키가 Secure Boot 화이트리스트에 추가되므로 펌웨어 grubx64.efi
실행도 허용됩니다.
우분투는 에 위치한 동일한 디렉토리에서 grubx64.efi
작은 파일을 로드 합니다 grub.cfg
. 실행되지는 않지만 grubx64.efi
이 파일은 GRUB에게 실제 GRUB 구성 파일을 찾는 방법을 알려줍니다.
search.fs_uuid 8fe7176c-3a23-4902-b0db-14bfbacc6601 root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
(번역: UUID가 있는 파일 시스템을 찾아서 8fe7176c-3a23-4902-b0db-14bfbacc6601
GRUB 루트 파일 시스템으로 지정합니다. 그런 다음 변수를 prefix
로 설정합니다 <GRUB root filesystem>/boot/grub
. 그런 다음 grub.cfg
변수가 가리키는 디렉터리에서 읽습니다 prefix
.)
마지막으로 GRUB는 UEFI 펌웨어에 Linux 커널과 initramfs를 메모리에 로드하고 커널 실행을 시도하도록 지시합니다. 커널이 Ubuntu의 보안 부팅 서명 키(MOK)로도 서명된 경우 펌웨어를 통해 커널이 실행되고 Linux 커널이 부팅됩니다. 커널은 보안 부팅 키의 화이트리스트를 읽고 이를 실행하기 전에 커널 모듈의 서명을 확인하는 데 사용되는 특수 커널 키링에 추가합니다. 이는 보안 부팅 구현 요구 사항입니다. 보안 부팅 서명에 서명되지 않은 코드 실행을 허용하는 항목이 있는 경우커널 모드에서, 이는 "Secure Boot 우회 도구"로 간주되며 향후 Secure Boot 펌웨어 버전 및 Secure Boot 블랙리스트 업데이트에서 블랙리스트에 추가됩니다.
실제로 이는 보안 부팅이 활성화되면 배포판의 보안 부팅 키 또는 MOK로 서명된 커널 모듈만 커널에서 허용된다는 의미입니다. 이는 또한 보안 부팅이 활성화된 단일 GRUB를 사용하여 여러 다른 배포판을 부팅하려는 경우 MOK를 설정하고 모든 배포판(현재 배포판을 "소유"한 배포판 제외 shimx64.efi
) 에 대한 커널에 서명해야 함을 의미합니다. 시작하세요.
(이론적으로 Microsoft의 Secure Boot 키로 서명된 커널 모듈도 허용되지만 Microsoft에서 근무하지 않는 한 이러한 모듈을 가질 가능성은 거의 없습니다.)
initramfs 파일이 서명되지 않았기 때문에 펌웨어는 이를 실행 불가능한 데이터로 읽습니다. 그러나 어쨌든 압축을 풀어야 하기 때문에 문제가 되지 않습니다. 커널은 어쨌든 initramfs 데이터의 압축을 풀고 이를 다른 메모리 위치로 옮깁니다. 시작 프로세스의 일부입니다. 이 시점에서 Linux 커널은 프로세서를 완전히 제어할 수 있으므로 압축이 풀린 initramfs 콘텐츠를 실행하는 데 필요한 모든 메모리 영역의 실행 보호 비트를 조정할 수 있습니다.사용자 모드에서(즉, 일반적인 프로세스로) 전혀 문제가 없습니다.
커널 모듈이 initramfs에서 로드된 경우에도 Secure Boot의 필수 서명 확인이 적용됩니다.
답변3
로 끝나는 모든 파일 .efi
은 uefi 실행 파일이며 실행할 수 있습니다. 그 중 몇몇은 거의 동일한 작업을 수행합니다. 바로 커널을 로드하는 것입니다. 일부는 서명되어 있고(보안 부팅을 위해) 일부는 서명되지 않았습니다. (바라보다https://askubuntu.com/questions/342365/what-is-the-difference- Between-grubx64-and-shimx64)
다른 것들은 유틸리티일 수 있습니다(예: mmx64.efi
MOK Updater 유틸리티).
로 끝나지 않는 다른 파일은 .efi
구성 파일일 수 있습니다. 예를 들어, grub.cfg
읽어보세요 grubx64.efi
. 이것이 없으면 grub은 grub 바이너리를 수정하거나 다른 곳에서 구성 파일을 읽지 않고는 메뉴를 만들 수 없습니다. 구성 파일은 UEFI 컨텍스트에서 실행 가능하지 않습니다. (대체 컨텍스트 보기에서 grub.efi는 구성 파일을 실행하는 인터프리터입니다.)