Почему я получаю "Обязательный ключ недоступен" при установке сторонних модулей ядра или после обновления ядра?
Эта проблема возникает только в системах UEFI с включенной безопасной загрузкой.
Когда я пытаюсь установить модули DKMS, такие как драйверы VirtualBox, Nvidia или Broadcom, они не устанавливаются, и я получаю Required key not available
когда я пытаюсь modprobe
их.
VirtualBox жалуется, что vboxdrv
не загружен
Broadcom wl
водитель показан в lspci -k
как модуль ядра, но не используется. sudo modprobe wl
бросает Required key not available
,
Также эта проблема может возникнуть при установке некоторых модулей ядра из исходников git.
Эта проблема может появиться после обновления ядра в виде отключенного беспроводного адаптера, черного экрана после перезагрузки и т. Д.
Как я могу это исправить?
4 ответа
Начиная с ядра Ubuntu 4.4.0-20 EFI_SECURE_BOOT_SIG_ENFORCE
Конфигурация ядра была включена. Это предотвращает загрузку неподписанных сторонних модулей, если включена UEFI Secure Boot.
Самый простой способ решить эту проблему - отключить безопасную загрузку в настройках UEFI (BIOS).
В большинстве случаев вы можете войти в настройки UEFI, используя меню grub. Нажмите кнопку ESC при загрузке, войдите в меню grub и выберите System Setup. Опция Безопасная загрузка должна быть в разделе "Безопасность" или "Загрузка" UEFI.
Вы можете войти в UEFI напрямую, но это зависит от вашего оборудования. Прочтите руководство к компьютеру, чтобы узнать, как туда добраться. Это может быть Del, или F2 при загрузке, или что-то еще.
Альтернативный способ - отключить безопасную загрузку с помощью mokutil
,
Начиная с сборки ядра Ubuntu 4.4.0-21.37 это можно исправить, запустив
sudo apt install mokutil
sudo mokutil --disable-validation
Для этого потребуется создать пароль. Пароль должен быть не менее 8 символов. После перезагрузки UEFI спросит, хотите ли вы изменить настройки безопасности. Выберите "Да".
Затем вам будет предложено ввести ранее созданный пароль. Некоторые прошивки UEFI запрашивают не полный пароль, а ввод некоторых символов, таких как 1-й, 3-й и т. Д. Будьте осторожны. Некоторые люди не понимают этого. Я не получил это с первой попытки;-)
Обновление: теперь эта конфигурация ядра включена во всех поддерживаемых ядрах Ubuntu. Ubuntu 16.04, 15.10 и 14.04 затронуты.
По предложению пользователя @zwets, я копирую (с правками) ответ здесь:
Начиная с версии ядра 4.4.0-20 было принудительно запрещено запускать неподписанные модули ядра с включенной безопасной загрузкой. Если вы хотите сохранить Secure Boot, а также запустить эти модули, то следующий логический шаг - подписать эти модули.
Итак, давайте попробуем это.
Создать ключи подписи
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
Подпишите модуль
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /path/to/module
Зарегистрируйте ключи для безопасной загрузки
sudo mokutil --import MOK.der
Введите пароль для последующего использования после перезагрузки
Reboot
и следуйте инструкциям, чтобы зарегистрировать MOK (ключ владельца машины). Вот образец с картинками. Система перезагрузится еще раз.
Пожалуйста, дайте мне знать, будут ли ваши модули работать таким образом в Ubuntu 16.04 (на ядре 4.4.0-21, я считаю).
Ресурсы: Подробная статья на сайте для реализации подписания модулей в Fedora и Ubuntu. (они работали над этим);-)
Дополнительный ресурс: я каждый раз создавал bash-скрипт для собственного использования virtualbox-dkms
обновляет и, таким образом, перезаписывает подписанные модули. Проверьте мой vboxsign
изначально на GitHub.
Дополнительное примечание для безопасности (экстра) сознательно:;-)
Поскольку закрытый ключ вы создали (MOK.priv
в этом примере) может использоваться любым, кто может иметь к нему доступ, поэтому рекомендуется обеспечить его безопасность. Ты можешь chmod
это, зашифровать (gpg
) или храните его в другом безопасном месте (r). Или, как отмечено в этом комментарии, уберите опцию -nodes
в шаге № 1. Это зашифрует ключ с парольной фразой.
Вы можете отключить безопасную загрузку (UEFI) в BIOS, выполнив следующие действия:
Перезагрузите компьютер и войдите в меню BIOS (в моем случае нажмите F2)
Ищите безопасную загрузку и переходите на Legacy
В материнской плате ASUS:
- Перейти в расширенный режим (F7)
- Зайдите в опцию Secure Boot в разделе Boot
- Измените "Режим Windows UEFI" на "Другие ОС"
- Сохраните и перезапустите, чтобы применить настройки (F10)
Вы также можете отключить безопасную загрузку в режиме работы с подписью sudo update-secureboot-policy
, Эта вики-страница объясняет этот метод:
- Откройте терминал (Ctrl + Alt + T), выполните команду sudo update-secureboot-policy и выберите "Да".
- Введите временный пароль от 8 до 16 цифр. (Например, 12345678, мы будем использовать этот пароль позже
- Введите тот же пароль еще раз для подтверждения.
- Перезагрузите систему и нажмите любую клавишу, когда появится синий экран (управление МОК
- Выберите Изменить состояние безопасной загрузки.
- Введите пароль, который вы выбрали на шаге 2, и нажмите Enter.
- Выберите Да, чтобы отключить безопасную загрузку в Shim-Sign.
- Нажмите клавишу Enter, чтобы завершить всю процедуру.
Вы по-прежнему можете включить безопасную загрузку в Shim-Sign снова. Просто выполнить
sudo update-secureboot-policy --enable и затем выполните шаги, описанные выше