Почему я получаю сообщение "Требуемый ключ недоступен" при установке сторонних модулей ядра или после обновления ядра?

Эта проблема возникает только в системах 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 и выберите пункт Настройка системы. Опция безопасной загрузки должна быть в разделе "Безопасность" или "Загрузка" UEFI.

Вы можете войти в UEFI напрямую, но это зависит от вашего оборудования. Прочтите руководство по эксплуатации вашего компьютера, чтобы узнать, как туда добраться. Это может быть Del, или F2 при загрузке или что-то еще.

Альтернативный способ - отключить безопасную загрузку с помощью mokutil.

Начиная со сборки ядра Ubuntu 4.4.0-21.37, это можно исправить, выполнив

sudo apt install mokutilsudo mokutil --disable-validation

Для этого потребуется создать пароль. Длина пароля должна составлять не менее 8 символов. После перезагрузки UEFI спросит, хотите ли вы изменить настройки безопасности. Выберите "Да".

Затем вам будет предложено ввести ранее созданный пароль. Некоторые прошивки UEFI запрашивают не полный пароль, а ввод некоторых его символов, например 1-го, 3-го и т.д. Будь осторожен. Некоторые люди этого не понимают. У меня тоже не получилось с первой попытки ;-)

Обновление: Теперь эта конфигурация ядра включена во всех поддерживаемых ядрах Ubuntu. Затронуты Ubuntu 16.04, 15.10 и 14.04.

Как предложенный пользователем @zwets, я копирую (с изменениями) ответ здесь:

Начиная с версии ядра 4.4.0-20, было установлено, что неподписанный модулям ядра не будет разрешено запускаться с включенной безопасной загрузкой. Если вы хотите сохранить безопасную загрузку и также запустите эти модули, затем следующим логическим шагом будет знак эти модули.

Так что давайте попробуем это сделать.

  1. Создание ключей подписи

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
  2. Подпишите модуль

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /path/to/module

Примечание 1: Для одного драйвера/модуля может быть подписано несколько файлов, поэтому /path/to/module возможно, потребуется заменить на $(modinfo -n <modulename>), например $(modinfo -n vboxdrv)

Примечание 2: sudo kmodsign sha512 ./MOK.priv ./MOK.der /path/to/module является альтернативой, если sign-file недоступен.

  1. Зарегистрируйте ключи для безопасной загрузки

    sudo mokutil --import MOK.der

    Укажите пароль для последующего использования после перезагрузки

  2. Reboot и следуйте инструкциям, чтобы зарегистрировать 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, выполнив следующие действия:

  1. Перезагрузите компьютер и войдите в меню BIOS (в моем случае нажмите клавишу F2)

  2. Найдите безопасную загрузку и перейдите на устаревшую

В материнской плате ASUS:

  • Перейти в Расширенный режим (F7)
  • Перейдите в раздел Безопасная загрузка в разделе Загрузка
  • Измените "Режим Windows UEFI" на "Другая ОС".
  • Сохраните и перезапустите, чтобы применить настройки (F10)

Вы также можете отключить безопасную загрузку при запуске с подписью shim sudo update-secureboot-policy. Это вики-страница объясняет этот метод:

  • Откройте терминал (Ctrl + Alt + T) и выполните sudo update-secureboot-policy, а затем выберите Да.
  • Введите временный пароль от 8 до 16 цифр. (Например, 12345678, мы будем использовать этот пароль позже
  • Введите тот же пароль еще раз для подтверждения.
  • Перезагрузите систему и нажмите любую клавишу, когда увидите синий экран (управление MOK
  • Выберите Изменить состояние безопасной загрузки
  • Введите пароль, который вы выбрали на шаге 2, и нажмите Enter.
  • Выберите Да, чтобы отключить безопасную загрузку с подписью shim.
  • Нажмите клавишу Enter, чтобы завершить всю процедуру.

Вы все еще можете снова включить безопасную загрузку в shim-signed. Просто выполняйте

sudo update-secureboot-policy --enableи затем выполните описанные выше действия

https://stackoverflow.com/a/59536913/3291390

Похожие: kernel - Could not load 'vboxdrv' after upgrade to Ubuntu 16.04 (and I want to keep secure boot) - Ask Ubuntu