Как заставить ядро ​​Linux предварительной версии работать с SecureBoot (Fedora 26)

529
Jason O'Neil

Я использую Fedora 26, но чтобы приостановить работу и возобновить работу, мне нужно использовать ядро ​​Rawhide (4.13.rc-1 или новее) ( см. Проблему с ядром ).

Я успешно установил ядро ​​Rawhide (4.13.rc-4), используя эти инструкции . К сожалению, как отмечают на этой странице, эти ядра не будут работать без сбоев SecureBoot.

К сожалению, из-за ошибки BIOS я не могу отключить SecureBoot ( см. Форум Dell ).

Когда я пытаюсь загрузиться, загрузчик говорит что-то вроде:

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

Как использовать ядро ​​Rawhide / pre-release с включенной SecureBoot?

0
Если вы хотите получить дополнительную информацию о моей ситуации, я документировал их все [здесь] (https://jasono.co/2017/08/13/tricks-i-needed-to-install-fedora-26-on- а-корпорация Dell XPS-13-9365-2-в-1 /) Jason O'Neil 7 лет назад 0
Это не отвечает на вопрос, но вы можете спросить команду ядра Fedora, не захотят ли они сделать бэкпорт для исправления. mattdm 7 лет назад 0
Спасибо за предложение (и редактировать!) @Mattdm. Любые идеи, что лучший способ сделать запрос в команду ядра Fedora? IRC / список рассылки и т. Д. Я новичок в сообществе Fedora, поэтому все еще учусь, как лучше связаться Jason O'Neil 7 лет назад 0
Я бы начал с Bugzilla, а затем, если это не было замечено (есть много ошибок для сортировки!), Опубликовал в [списке рассылки Fedora Kernel] (https://lists.fedoraproject.org/admin/ списки / kernel.lists.fedoraproject.org /). mattdm 7 лет назад 0

2 ответа на вопрос

2
Jason O'Neil

На этот вопрос ответили на сайте вопросов и ответов Fedora:

https://ask.fedoraproject.org/en/question/109564/how-to-get-rawhide-kernel-to-work-with-secureboot-in-f26/?answer=109840#post-id-109840

В принципе:

  • От имени пользователя root запустите mokutil --disable-validationи установите пароль.
  • Перезагрузитесь, и когда загрузчик grub спросит, хотите ли вы запустить утилиту MOK. Мне пришлось нажать клавишу в течение 10 секунд, чтобы убедиться, что я вошел в утилиту.
  • Попав в утилиту, я выбрал «изменить конфигурацию MOK», ввел пароль и решил отключить SecureBoot. Обратите внимание, что это не отключило BIOS SecureBoot - оно просто позволяет GRUB загружать неподписанное ядро. (GRUB все еще подписан, я думаю).
1
Rod Smith

Я понимаю, что вы нашли решение, которое включает отключение безопасной загрузки через Shim / mokutil; Однако есть и другой способ: вы можете подписать ядро ​​самостоятельно.

В общих чертах, процедура:

  1. Создайте свой собственный ключ безопасной загрузки. Вы бы сделали это с opensslпрограммой. Вам необходимо скопировать файл DER открытого ключа в системный раздел EFI (ESP), который обычно монтируется в /boot/efi.
  2. Подпишите ваш файл ядра. Я использую инструмент sbsignдля этого. IIRC, Fedora, предпочитает другую программу, которую, как я проверял в последний раз, использовать было сложнее. Вам нужно будет либо переименовать текущее ядро ​​и поставить его подписанную версию на место, либо создать новую запись GRUB для вашего нового ядра.
  3. Перезагрузитесь в EFI и запустите MokManager. Некоторые загрузчики, такие как мой собственный rEFInd, предлагают способ входа в MokManager вручную. Если у вас нет, вам может понадобиться прыгнуть через несколько обручей, чтобы заставить его работать. Попав в MokManager, вам нужно найти файл DER, который вы скопировали в ESP, и добавить его в список MOK.
  4. В этот момент, когда вы перезагрузитесь, вы сможете запустить только что подписанное ядро ​​даже при активной безопасной загрузке.

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

Также обратите внимание, что если вы установите rEFInd, он может сгенерировать набор ключей безопасной загрузки и сохранить их как /etc/refind.d/keys/refind_local.*. ( refind-installСценарий делает это, если необходимые утилиты доступны, но не будет делать это, если они недоступны.) Таким образом, если вы когда-либо устанавливали rEFInd, шаг # 1 уже может быть выполнен. Затем вы можете использовать локальный ключ rEFInd для подписи вашего ядра.

Есть вариант этой процедуры тоже. Последние версии Shim и MokManager позволяют зарегистрировать хэш двоичного файла как способ его аутентификации. Это работает даже с неподписанными двоичными файлами. Таким образом, вы можете зарегистрировать хеш вашего ядра, чтобы включить его загрузку. Проблема в том, что вам нужно зарегистрировать хеш каждого неподписанного ядра, которое вы хотите запустить. Это может не иметь большого значения, если у вас есть только одно работающее ядро, и вы не планируете его обновлять; но если вы будете обновлять ядро ​​каждые пару недель, вы будете вечно регистрировать новые хэши, которые будут хлопотом и будут занимать все больше ограниченного пространства NVRAM. Таким образом, этот подход немного проще в некоторых случаях, но гораздо хуже в других.

Это действительно впечатляет - и это был ответ, который я надеялся найти, но не смог получить четкие инструкции. Спасибо, что нашли время, чтобы документировать это! К сожалению, я отказался от ноутбука, с которым пытался сделать это, поэтому я не могу на самом деле попробовать это. Но я все равно ценю это! Jason O'Neil 7 лет назад 0