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

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

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

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

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

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

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

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

97
задан 19 February 2017 в 21:36

4 ответа

Начиная с ядра 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.

99
ответ дан 20 February 2017 в 07:36
  • 1
    I' d идут еще больше: эти два каталога вероятны идентичный , потому что каждый - символьная ссылка на другой. – David Foerster 20 September 2017 в 05:20

Как предложил пользователь @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 = описательное имя /"
     
  2. Подписать модуль

     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-файл недоступен.

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

     sudo mokutil --import MOK.der
     

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

  2. Перезагрузите и следуйте инструкциям по регистрации 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. Это зашифрует ключ парольной фразой.

40
ответ дан 20 February 2017 в 07:36
  • 1
    Ссылка на выделенный исходный код очень полезна. You' ve объяснил причину, как являющуюся из-за проблемы, описанной в вопросе, таким образом, я не думаю, что это имеет право быть отмеченным как ответ. Почему был, если оператор, записанный в программу ping и что предназначено усеченным? Это, кажется, попытка сохранить выходное пространство строки, и также способный отрицаться. – conman253 20 September 2017 в 09:39

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

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

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

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

  • Перейдите в Расширенный режим (F7)
  • Перейдите в параметр «Безопасная загрузка» в разделе «Загрузка»
  • . Измените «Режим Windows UEFI» на «Другая ОС»
  • Сохраните и перезапустите, чтобы применить настройки (F10)
7
ответ дан 20 February 2017 в 07:36
  • 1
    Я don' t полагают, что это имеет какое-либо отношение к выводу в терминале. Я полагаю, что это относится к возврату packet' s размер данных, являющийся усеченным. – mjb2kmn 20 September 2017 в 10:00

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

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

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

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

3
ответ дан 20 February 2017 в 07:36
  • 1
    " why" Вы упоминаете, что I' m предполагающий путем высказывания " просматриваемый как недопустимый или бесполезный из-за данных, являющихся truncated" - Возможно, надлежащий сетевой инженер был бы полезен здесь. – mjb2kmn 20 September 2017 в 10:16

Другие вопросы по тегам:

Похожие вопросы: