Модуль подписи на досках не UEFI

Я на Ubuntu 16.04 с ядром 4.4.0-57, и я хочу установить самодельный модуль. BIOS - это не UEFI BIOS (Kontron 986LCD-M / mITX).

Я попытался подписать модуль, выполнив эту процедуру, но результат шага 3 (sudo mokutil --import MOK.der) - EFI variables are not supported on this system.

Я попытался выполнить эту процедуру ! d2], но я не могу найти открытые ключи.

Как я могу подписать модуль на не UEFI-плате?

============= ======================================

Обновление 1: Это кажется, что это сказка, что только модули, работающие с UEFI Bios, должны использовать подписанные модули под 16.04:

I use as grub option: `GRUB_CMDLINE_LINUX=" acpi_enforce_resources=lax"`. 

I get the error `module verification failed: signature and/or required key missing - tainting kernel` in dmesg if I try to load a module via modprobe.

`sudo mokutil --disable-validation` returns the error `EFI variables are not supported on this system`

================ Обновление 1 ================================================== =

Извините, но это утверждение неверно:

Процедура, на которую вы ссылаетесь, описывает отключение проверки безопасности загрузки, а не подписание модулей. Нет необходимости подписывать модули ядра на не-UEFI-системах, поскольку Secure Boot - это исключительно функция UEFI.

Ядро должно работать таким образом, что это не так. Я экспериментирую с этим, потому что всегда получаю сообщение об ошибке, которое я получаю error module verification failed: signature and/or required key missing - tainting kernel в dmesg, а ядро ​​не загружено.

================ Обновление 2 ================================================== = Как установить прокладку на материнской плате non uefi:

# aptitude search shim
p   grub-splashimages                                   - a collection of great GRUB splashimages
p   grub2-splashimages                                  - a collection of great GRUB2 splashimages
p   libjs-es5-shim                                      - ECMAScript 5 compat. shims for old JavaScript engines (library
p   libjs-es6-shim                                      - ECMAScript 6 compat. shims for legacy JavaScript engines (libr
p   node-es5-shim                                       - ECMAScript 5 compat. shims for old JavaScript engines (Node.js
p   node-es6-shim                                       - ECMAScript 6 compat. shims for legacy JavaScript engines (Node
p   olpc-kbdshim                                        - Dienst zur OLPC-XO-Tastaturunterstützung
v   olpc-kbdshim-common                                 -
v   olpc-kdbshim-hal                                    -
p   ruby-launchy-shim                                   - helper class for launching a web browser
p   shimmer-themes                                      - Gtk+ themes from Shimmer Project
p   shimmer-wallpapers                                  - Wallpapers from Shimmer Project
p   systemd-shim                                        - shim für systemd
p   yoshimi                                             - Software-Synthesizer, basiert auf ZynAddSubFX
p   yoshimi-data                                        - Voreinstellungen für Yoshimi

Правильно ли systemd-shim? Я считаю, что это не сработает, потому что это не-uefi MB ...

1
задан 13 April 2017 в 15:23

2 ответа

Это огромная ошибка в Ubuntu. mokutil и MokManager могут только подписывать ваши собственные модули, если у вас есть MB, который поддерживает uefi. Старые MB под Ubuntu 16.04, которые не поддерживают uefi, не могут подписывать модули с mokutil и MokManager. Вы всегда будете отвечать как EFI variables are not supported on this system или схожим.

Утверждается, что подписание только что включено ядром для uefi MB. Извините, но это неправильно. Это также показано, например, по этому параметру ядра:

CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_UEFI=y
CONFIG_MODULE_SIG_SHA512=y
CONFIG_MODULE_SIG_HASH="sha512"
CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE=y
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_CHECK_SIGNATURE=y
CONFIG_SIGNATURE=y

Как я уже сказал, это параметр ядра для не-uefi MB, который не имеет смысла, особенно CONFIG_MODULE_SIG_UEFI=y.

Вы должны перекомпилируйте ядро ​​и отключите параметры подписи. Их можно найти по grep -v ^# /boot/config-$(uname -r) | grep _SIG. Особенно CONFIG_MODULE_SIG и CONFIG_MODULE_SIG_ALL должны быть установлены на n. Однако это имеет явный недостаток, потому что вы должны перенести обновление ядра, и вам придется перекомпилировать каждое новое ядро. Это расстраивает.

0
ответ дан 23 May 2018 в 02:38
  • 1
    Я сообщаю об ошибке на ubuntu: 1656670 – musbach 15 January 2017 в 21:20
  • 2
    Обратите внимание, что mokutil и MokManager.efi являются инструментами только для EFI; это not ошибка, что они работают только на EFI-только системах, не более, чем ошибка, которая не работает в двоичном формате Linux под DOS. Тем не менее, похоже, что вы обнаружили серьезную ошибку в ядре; он не должен настаивать на подписанных модулях ядра на не-EFI-системах. – Rod Smith 23 January 2017 в 21:41
  • 3
    Я согласен с тем, что mokutil и MokManager.efi - это только инструменты efi, и это не ошибка. Извините, если я не понял. efi нуждается в 64-битной системе, даже если плата является платкой uefi. Однако Ubuntu должен различать 3 сценария: i) плата BIOS с 32/64 бит Ubuntu, ii) плата uefi с 32-битным Ubuntu и iii) плата uefi с 64-битным Ubuntu. Инструменты efi будут работать только в сценарии iii). Таким образом, это затронет особенно небольшие устройства, такие как мобильные и развлекательные устройства, потому что они работают преимущественно на 32 бит и, вероятно, всегда имеют запатентованный драйвер. – musbach 24 January 2017 в 00:08

Процедура, к которой вы ссылаетесь, описывает отключение проверки безопасности загрузки, а не подписание модулей. Нет необходимости подписывать модули ядра на не-UEFI-системах, так как Secure Boot - это исключительно функция UEFI.

При этом, если вы хотите подписать модули ядра в системе, отличной от UEFI, вы должны быть в состоянии сделать это. (Я не пробовал, но AFAIK все инструменты являются инструментами Linux для пользователей, которые не полагаются на доступную или активную загрузку Secure Boot.) Вы можете сделать это, если хотите создать пакет с подписанными модулями для установки на другие системы. Обратите внимание, что вам нужно будет установить свои собственные ключи на целевые системы, что может быть утомительным; см. ниже для указателей. Чтобы подписать модули ядра:

Создайте набор ключей подписи. Это сложная задача. Я рекомендую вам прочитать мою страницу в разделе «Безопасная загрузка» для получения информации о создании ключей подписи. Найдите двоичный файл sign-file. Этот двоичный файл обычно не устанавливается там, где установлены бинарные файлы Linux; вместо этого он поставляется с заголовками ядра. Команда find /usr/src/ -name sign-file должна найти ее, если она установлена ​​в вашей системе. Если эта команда ничего не возвращает, вы должны установить пакет заголовков ядра. Подпишите двоичный код с помощью команды, подобной /path/to/sign-file sha256 /key/path/your.key /key/path/your.cer /path/to/module/module.ko

. В этот момент двоичный файл module.ko будет подписан с вашим ключом (your.key и your.cer). Для использования ваш ключ должен быть зарегистрирован в целевой системе, предположительно в списке MOK. Для этого вы должны установить его с помощью MokManager.efi, как описано на моей странице «Безопасная загрузка».

Еще раз хочу подчеркнуть, что подписание модулей ядра должно [!d2 ] необходимо, за исключением систем, которые загружаются в режиме UEFI с активной защищенной загрузкой - и даже тогда это необходимо только для сторонних или локально скомпилированных модулей ядра, таких как коммерческие видеодрайверы или модули ядра VirtualBox. Большинство модулей ядра, снабженных ядром Ubuntu, уже подписаны с тем же ключом Canonical, который используется для подписи GRUB и основного файла ядра Ubuntu.

-1
ответ дан 23 May 2018 в 02:38
  • 1
    Дорогой Род, большое спасибо за ваш ответ. Однако я уже упоминал в своем вопросе такое решение, которое, к сожалению, не работает. Я использую параметр grub: GRUB_CMDLINE_LINUX=" acpi_enforce_resources=lax". Я получаю ошибку module verification failed: signature and/or required key missing - tainting kernel в dmesg. У вас есть другое решение? – musbach 8 January 2017 в 23:54
  • 2
    Я поддерживаю свой ответ; однако ясно, что вы столкнулись с ошибкой в ​​ядре Linux, распространяемом Ubuntu. Подписание модулей ядра не выполняется с помощью mokutil, но с sbsign; mokutil используется для установить ключ подписи на NVRAM на базе EFI. Таким образом, вы, похоже, работаете под некоторыми недоразумениями в том, как работают EFI Secure Boot и связанные с ними инструменты, что затрудняет вам обсуждение этой проблемы и даже прошу помощи. Поскольку это ошибка, необходимо подать отчет об ошибке (как вы это сделали). Я не знаю обходных путей для этой ошибки, кроме перекомпиляции пользовательского ядра. – Rod Smith 23 January 2017 в 21:46
  • 3
    Я прекратил экспериментировать с инструментами efi. Как вы сказали, это бессмысленно. Однако я начал создавать настраиваемое ядро. Многие проблемы здесь - найти параметр prober для отключения (не так просто, так как сборка настраиваемого ядра занимает несколько часов). У вас есть комментарии к моему выбору? Спасибо заранее askubuntu.com/questions/871924/… – musbach 24 January 2017 в 00:10

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

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