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

45

Эта проблема возникает только в системах UEFI с включенной защищенной загрузкой.

Когда я пытаюсь установить модули DKMS, такие как VirtualBox, Nvidia или драйверы Broadcom, они не устанавливаются, и я получаю Required key not available , когда я пытаюсь использовать modprobe .

VirtualBox жалуется, что vboxdrv не загружен.

Драйвер Broadcom wl отображается в lspci -k как модуль ядра, но не используется. sudo modprobe wl throws Required key not available .

Также эта проблема может возникнуть, когда я устанавливаю некоторые модули ядра из источников git.

Эта проблема может возникнуть после обновления ядра как отключенного беспроводного адаптера, черного экрана после перезагрузки и т. д.

Как я могу это исправить?

    
задан Pilot6 25.04.2016 в 09:48
источник

4 ответа

50

Так как ядро ​​Ubuntu 4.4.0-20 включено, конфигурация ядра EFI_SECURE_BOOT_SIG_ENFORCE включена. Это предотвращает загрузку неподписанных сторонних модулей, если включена защита UEFI.

Самый простой способ устранить эту проблему - отключить безопасную загрузку в настройках UEFI (BIOS).

В большинстве случаев вы можете войти в настройки UEFI, используя меню grub. Нажмите кнопку ESC при загрузке, войдите в меню grub и выберите «Настройка системы». Безопасная загрузка должна быть в разделе «Безопасность» или «Загрузка» UEFI.

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

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

Так как ядро ​​Ubuntu build 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.

    
ответ дан Pilot6 25.04.2016 в 09:51
источник
16

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

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

Итак, давайте попробуем.

  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
    
  3. Зарегистрируйте ключи для безопасной загрузки

    sudo mokutil --import MOK.der
    

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

  4. Reboot и следуйте инструкциям для регистрации MOK (ключ владельца машины). Ниже приведен пример с картинками. Система перезагрузится еще раз.

Пожалуйста, дайте мне знать, будут ли ваши модули работать на Ubuntu 16.04 (на ядре 4.4.0-21, я считаю).

Ресурсы: подробный веб-сайт статья для Fedora и Ubuntu-реализация подписи модуля. (они работали над этим) ;-)

Дополнительное примечание для безопасности (экстра):: -)

Так как созданный вами частный ключ ( MOK.priv в этом примере) может использоваться любым, у кого есть доступ к нему, рекомендуется сохранить его в безопасности. Вы можете chmod it, зашифровать ( gpg ) или сохранить его в другом месте (r). Или, поскольку отметил в этом комментарии , удалите опцию -nodes в шаге номер 1. Это зашифрует ключ парольной фразой.

    
ответ дан Majal 09.05.2016 в 17:19
4

Вы можете отключить безопасную загрузку (UEFI) в BIOS со следующими шагами:

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

  2. Поиск безопасной загрузки и изменение устаревшего

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

  • Перейдите в расширенный режим (F7)
  • Зайдите в параметр «Безопасная загрузка» в разделе «Загрузка».
  • Измените «Windows UEFI mode» на «Other OS»
  • Сохраните и перезапустите, чтобы применить настройки (F10)
ответ дан Sputnik 28.04.2016 в 18:08
1

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

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

Вы все равно можете включить безопасную загрузку в подгонке. Просто выполните

     

sudo update-secureboot-policy --enable   и затем следуйте инструкциям выше

    
ответ дан Kent Lin 04.08.2016 в 16:48