Эта проблема возникает только в системах UEFI с включенной безопасной загрузкой.
Когда я пытаюсь установить модули DKMS, такие как драйверы VirtualBox, Nvidia или Broadcom, они не устанавливаются, и я получаю Required key not available
, когда пытаюсь modprobe
их.
VirtualBox жалуется, что vboxdrv
не загружен.
Драйвер Broadcom wl
показан в lspci -k
как модуль ядра, но не используется. sudo modprobe wl
бросков Required key not available
.
Также эта проблема может возникать, когда я устанавливаю некоторые модули ядра из исходников git.
Эта проблема может появиться после обновления ядра в виде отключенного беспроводного адаптера, черного экрана после перезагрузки и т. Д.
Как я могу это исправить?
Начиная с ядра Ubuntu 4.4.0-20, конфигурация ядра EFI_SECURE_BOOT_SIG_ENFORCE
включена. Это предотвращает загрузку неподписанных сторонних модулей, если включена безопасная загрузка UEFI.
Самый простой способ решить эту проблему - отключить безопасную загрузку в настройках 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 было предписано, чтобы модули ядра без знака не могли работать с включенной безопасной загрузкой. Если вы хотите, чтобы безопасная загрузка и также запускала эти модули, следующим логическим шагом будет подписать эти модули.
Итак, давайте попробуем.
Создать ключи подписи
openssl req -new -x509 -newkey rsa: 2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/ CN = описательное имя /"
Подписать модуль
sudo / usr / src / linux-headers - $ (uname -r) / scripts / sign-file sha256 ./MOK.priv ./MOK.der / path / to / module
Примечание 1 : для одного драйвера / модуля может быть подписано несколько файлов, поэтому / путь / к / модулю
может потребоваться заменить на $ (modinfo - n
, например $ (modinfo -n vboxdrv)
Примечание 2 : sudo kmodsign sha512 ./MOK.priv ./MOK.der / path / to / module
является альтернативой, если ] sign-файл
недоступен.
Зарегистрируйте ключи для безопасной загрузки
sudo mokutil --import MOK.der
Укажите пароль для последующего использования после перезагрузки
Перезагрузите
и следуйте инструкциям по регистрации MOK (ключа владельца машины). Вот образец с картинками. Система перезагрузится еще раз.
Если ключ был зарегистрирован правильно, он отобразится в sudo mokutil --list-enrolled
.
Пожалуйста, дайте мне знать, будут ли ваши модули работать таким образом в 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:
Вы также можете отключить безопасную загрузку при выполнении sudo update-secureboot с подписью оболочки -политика
. Эта вики-страница объясняет этот метод:
- Откройте терминал (Ctrl + Alt + T) и выполните sudo update-secureboot-policy, а затем выберите Да.
- Введите временный пароль от 8 до 16 цифр. (Например, 12345678, мы будем использовать этот пароль позже.
- Введите тот же пароль еще раз для подтверждения.
- Перезагрузите систему и нажмите любую клавишу, когда вы увидите синий экран (управление MOK
- Выберите Изменить состояние безопасной загрузки
- Введите пароль, который вы выбрали на шаге 2, и нажмите Enter.
- Выберите «Да», чтобы отключить безопасную загрузку с использованием шайб-подписи.
- Нажмите клавишу Enter, чтобы завершить всю процедуру.
Вы все еще можете включить безопасность Снова загрузитесь с помощью shim-signed. Просто выполните
sudo update-secureboot-policy --enable а затем выполните указанные выше действия