Я на 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 ...
Это огромная ошибка в 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. Однако это имеет явный недостаток, потому что вы должны перенести обновление ядра, и вам придется перекомпилировать каждое новое ядро. Это расстраивает.
Процедура, к которой вы ссылаетесь, описывает отключение проверки безопасности загрузки, а не подписание модулей. Нет необходимости подписывать модули ядра на не-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.