GRUB Error: error: verification failed: signature invalid (Secure Boot Violation)
Linux Bootloader
Ошибка GRUB: verification failed: signature invalid (Secure Boot Violation)
При включенном механизме UEFI Secure Boot загрузчик блокирует запуск ядра сторонней сборки, модуля DKMS или кастомного GRUB: error: verification failed: signature invalid (0x1a).
| Сценарий | Причина блокировки | Результирующий код |
|---|---|---|
| Сборка ядра вручную | Отсутствует валидная цифровая подпись Microsoft / Canonical / RedHat | Secure Boot Violation |
| Сторонние драйверы (Nvidia/VirtualBox) | Модуль ядра не подписан доверенным Machine Owner Key (MOK) | Kernel lockdown active |
| Обновление shim/grub | Несоответствие версии в базе DBX (Revocation list) | Verification failed (0x1a) |
- Вариант 1 (Временный): Отключите Secure Boot в настройках UEFI BIOS материнской платы.
- Вариант 2 (Правильный — регистрация MOK-ключа):
Сгенерируйте и зарегистрируйте ключ владельца машины:sudo apt install shim-signed mokutil openssl sudo update-secureboot-policy --enroll-key - Если ключ генерируется вручную:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Custom Kernel/" sudo mokutil --import MOK.der - Подпишите бинарный файл ядра с помощью
sbsigntool:sudo sbsign --key MOK.priv --cert MOK.der /boot/vmlinuz-$(uname -r) --output /boot/vmlinuz-$(uname -r).signed sudo mv /boot/vmlinuz-$(uname -r).signed /boot/vmlinuz-$(uname -r) - Перезагрузите ПК и на синем экране MokManager подтвердите процедуру Enroll MOK.
Безопасность: Никогда не передавайте закрытый ключ
MOK.priv третьим лицам и ограничьте доступ к нему правами chmod 600.
Практический опыт инженера:
Корпоративные дистрибутивы активируют `Kernel Lockdown Mode` при включенном Secure Boot, что запрещает отладку ядра через BPF/kprobes и модификацию MSR-регистров.
Частые вопросы (FAQ)
Что такое MokManager?
Это специальная EFI-утилита, запускаемая загрузчиком Shim до старта ОС, для безопасного добавления пользовательских сертификатов в NVRAM.
Как проверить статус Secure Boot из работающей системы?
Выполните команду mokutil --sb-state.