Как установить пользовательские модули ядра на SLES 15 с помощью Secure Boot

Чтобы загрузить пользовательский модуль ядра на SLES 15 с включенной функцией Secure Boot, соберите его для того самого ядра, которое вы будете использовать, подпишите готовый .koфайл доверенным сертификатом подписи, зарегистрируйте этот сертификат в качестве ключа владельца машины (MOK), а затем загрузите модуль с помощью команды ` shim` modprobe. MOK — это локально контролируемый сертификат, которому могут доверять SUSE shim и ядро ​​Linux для проверки модуля Secure Boot. Не отключайте Secure Boot, чтобы обойти отклоненную подпись. Описанный ниже процесс предназначен для администратора, который контролирует машину и может подтвердить регистрацию ключа при перезагрузке.

Данное руководство основано на документации по администрированию SUSE SLES 15 SP7 и рекомендациях SUSE по упаковке модулей ядра, проверено 6 октября 2026 г. acme_driverВ качестве примера команд используется имя модуля; при необходимости замените его фактическим именем модуля без .koсуффикса. Это примеры команд, а не вывод с протестированного хоста.

Примеры команд терминала для проверки безопасной загрузки с помощью mokutil и определения запущенного ядра SLES с помощью uname.
Примеры команд предварительной проверки: подтверждение статуса Secure Boot и запись точной версии ядра перед сборкой модуля.

Когда этот метод подходит

Этот подход следует использовать для пользовательского модуля, не входящего в основную ветку разработки (поставляемого отдельно от работающего ядра), если вы можете пересобрать или получить сборку для целевого ядра SLES и зарегистрировать сертификат на сервере. Он применим к системам, загружающимся через SUSE Secure Boot и путь shim. Если поставщик предоставляет официальный пакет драйверов SLES 15, сначала используйте его поддерживаемые инструкции по установке и подписанию; пакет поставщика может лучше обеспечивать совместимость с ядром и обновления, чем ручная копия.

Безопасная загрузка проверяет цепочку загрузки, а ядро ​​также проверяет подписи загружаемых модулей в соответствии с применимой политикой. Модуль может быть подписан, но при этом не загрузиться, если он ориентирован на другой ABI ядра, зависит от отсутствующих символов или собран для неправильной архитектуры. И наоборот, соответствие ядру не делает неподписанный модуль доверенным. Подписание решает вопрос доверия; оно не устанавливает совместимость и не подтверждает безопасность кода.

Прежде чем начать

  • Используйте учетную запись администратора и убедитесь, что у вас есть окно технического обслуживания. Для регистрации MOK требуется перезагрузка и подтверждение в MokManager, обычно через локальную или удаленную консоль.
  • Проверьте состояние работающего ядра и безопасной загрузки с помощью команд `npm install` uname -rи `npm install` mokutil --sb-state. Соберите модуль, используя соответствующие файлы разработки ядра и набор инструментов для данной версии ядра. Названия пакетов и необходимые файлы различаются в зависимости от пакета обновлений SLES, версии ядра и метода сборки, поэтому проверьте их в репозиториях, включенных в целевой системе.
  • Определите, где будет храниться закрытый ключ для подписи. Для производственного парка используйте контролируемую службу подписи организации или утвержденный процесс управления ключами. Для лаборатории или одного контролируемого хоста может быть целесообразно использовать локально сгенерированный ключ. Защитите закрытый ключ; серверу для регистрации нужен открытый сертификат, а не закрытый ключ.
  • Сохраните путь восстановления, исходный код модуля или пакет от поставщика, а также заведомо исправное ядро. Не загружайте драйвер на производственное оборудование, пока не разберетесь с его требованиями к устройству и ядру.

1. Создайте ключ подписи и открытый сертификат.

В защищенной системе подписи создайте закрытый ключ и сертификат X.509 в кодировке DER. В рекомендациях SUSE по упаковке модулей ядра указано codeSigningиспользование расширенного ключа в текущих пакетах обновлений SLES 15. В этом примере используется OpenSSL и описательное имя сертификата:

openssl req -new -x509 -newkey rsa:2048 -sha256 \
  -keyout module-signing.key \
  -out module-signing.der -outform DER -nodes \
  -days 4745 -addext "extendedKeyUsage=codeSigning" \
  -subj "/CN=Custom Module Signing/"
chmod 600 module-signing.key

Этот -nodesпараметр оставляет закрытый ключ незашифрованным, поэтому важны права доступа к файлам и управление хранилищем. Не копируйте этот закрытый ключ на сервер общего назначения и не встраивайте его в пакет. Если политика организации требует зашифрованного ключа, аппаратной подписи, ротации ключей или иного жизненного цикла сертификата, следуйте этой политике и требованиям инструмента подписи. Передавайте ключ только module-signing.derв ту систему, которая будет регистрировать открытый ключ.

Пример терминала, демонстрирующий команду подписи кода OpenSSL с использованием сертификата и ограниченные права доступа к закрытому ключу.
Примеры команд для создания сертификата и управления правами доступа к ключу; хранение закрытого ключа в условиях контролируемого доступа.

2. Соберите модуль для целевого ядра и подпишите его.

Соберите модуль, используя точно указанную версию ядра uname -r. Инструкции по сборке исходного проекта определяют необходимый компилятор, заголовочные файлы и конфигурацию; нет единой команды сборки, подходящей для каждого пользовательского модуля. Проверьте результаты vermagicс помощью команды, modinfoесли вам нужно диагностировать несоответствие ядра.

Подпишите итоговый файл модуля после компиляции и любых этапов упаковки или удаления данных. SUSE описывает свой вспомогательный инструмент для подписи по адресу [ссылка на документацию /usr/lib/rpm/pesign/kernel-sign-file]. В следующем примере используется формат PKCS#7 и дайджест SHA-256:

/usr/lib/rpm/pesign/kernel-sign-file -i pkcs7 sha256 \
  module-signing.key module-signing.der acme_driver.ko

Вспомогательная функция должна быть доступна в вашей системе через интеграцию подписи SUSE. Если она отсутствует, проверьте официальную документацию SLES/KMP и включенные репозитории для поддерживаемой настройки подписи, вместо того чтобы использовать произвольную команду подписи. Подпись модуля добавляется к файлу. Не удаляйте, не редактируйте, не пересжимайте и не изменяйте модуль каким-либо иным способом после подписания; такое изменение может сделать подпись недействительной. Сохраните исходный артефакт сборки, чтобы вы могли повторить заключительный этап подписания.

Пример команды SUSE kernel-sign-file, подписывающей файл acme_driver.ko с помощью PKCS7 SHA-256.
Вспомогательная программа для подписи файлов SUSE подписывает завершенный файл модуля, используя защищенный закрытый ключ и соответствующий ему открытый сертификат.

3. Зарегистрируйте публичный сертификат как MOK.

На сервере SLES разместите открытый module-signing.derсертификат в месте, доступном для чтения пользователю root, а затем поставьте его в очередь на регистрацию:

mokutil --root-pw --import module-signing.der
mokutil --list-new

В документации SUSE --root-pwописан способ авторизации ожидающей регистрации с помощью пароля root. Команда импорта ставит сертификат в очередь; она не регистрирует его немедленно. Перезагрузите сервер. В MokManager выберите «Зарегистрировать ключ с диска» , выберите сертификат, подтвердите регистрацию и завершите запрошенную авторизацию. Формулировка меню может немного отличаться в зависимости от версии shim/MokManager. Если вы не можете получить доступ к экрану регистрации, проверьте путь загрузки и организуйте доступ к консоли; не следует предполагать, что сертификат был зарегистрирован только потому, что команда импорта прошла успешно.

После загрузки сервера убедитесь, что ключ отображается в списке зарегистрированных ключей:

mokutil --list-enrolled
Пример последовательности действий в терминале: импорт сертификата DER с помощью mokutil и отображение ожидающей записи MOK.
Импорт ставит сертификат в очередь на проверку при перезагрузке; mokutil --list-newотображает ожидающие запросы на регистрацию.
Экран регистрации MokManager с выбранным параметром «Зарегистрировать ключ с диска» и запросом подтверждения.
После перезагрузки MokManager отображает вариант регистрации ключа и этап подтверждения, который должен быть одобрен авторизованным оператором.

4. Установите, обновите зависимости модуля и загрузите его.

Скопируйте подписанный файл в каталог extra-modules для запущенного ядра, обновите карту зависимостей и запросите модуль по имени. Если вы устанавливаете модуль для другого загруженного ядра, замените фактический релиз ядра:

release=$(uname -r)
install -D -m 0644 acme_driver.ko \
  "/lib/modules/$release/extra/acme_driver.ko"
depmod -a "$release"
modprobe acme_driver

modprobeОбычно предпочтительнее использовать другой подход, insmodпоскольку он разрешает зависимости модулей. Протестируйте фактическое устройство или функциональность, предоставляемую драйвером; успешная команда сама по себе не доказывает корректную работу оборудования. Если модуль предназначен для загрузки при загрузке системы, добавьте его имя на отдельной строке в файл, например, ` /etc/modules-load.d/acme_driver.conf.sles`. SLES использует механизм загрузки модулей systemd для этих конфигурационных файлов.

Примеры команд терминала: установка подписанного модуля в текущий каталог extra ядра, запуск depmod и вызов modprobe.
Установите подписанный модуль в соответствии с версией ядра, пересоберите информацию о зависимостях, а затем загрузите его с помощью modprobe.

5. Проверьте путь доверия и устраните неполадки.

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

mokutil --list-enrolled
modinfo -F signer /lib/modules/$(uname -r)/extra/acme_driver.ko
lsmod | grep acme_driver
journalctl -k -b | tail -n 80

modinfo -F signerОтображает метаданные подписи, встроенные в модуль. Само по себе это не доказывает, что сертификат зарегистрирован или что работающее ядро ​​приняло подпись. modprobeБолее полезным доказательством является успешная проверка с включенной функцией Secure Boot, за которой следует анализ журналов ядра и проверка работоспособности устройства. Вывод терминала на рисунке является примером команд и иллюстративным выводом, а не отчетом о тестировании, проведенном для данной статьи.

СимптомЧто проверить
Key was rejected by serviceили ошибка загрузки, связанная с сигнатурой.Убедитесь, что сертификат, подписавший именно этот модуль, зарегистрирован mokutil --list-enrolled; подтвердите, что модуль был подписан после его последнего изменения; проверьте journalctl -k -b.
Invalid module formatСравните модуль vermagicс uname -r. Пересоберите для работающего ядра и его версии.
Unknown symbolили неразрешенная зависимостьПроверьте соответствие среды сборки и необходимых сопутствующих модулей; повторите проверку depmod -aпосле установки.
Module not foundПроверьте имя файла, имя модуля, целевой каталог, специфичный для ядра, и карту зависимостей. Имя, передаваемое в функцию, modprobeобычно не содержит .ko.

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

Примеры проверок терминала, показывающие зарегистрированный модуль MOK, метаданные подписи модуля и имя модуля в выводе команды lsmod.
Используйте список зарегистрированных ключей, метаданные подписывающего лица, список загруженных модулей и журнал ядра одновременно; ни одна отдельная проверка не может подтвердить всю цепочку доверия и совместимости.

Планирование обновлений ядра и повторных развертываний.

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

Для парка приложений или драйверов, которые должны выдерживать регулярные обновления, используйте повторяющийся рабочий процесс упаковки, например, подход SUSE Kernel Module Package (KMP), если он соответствует вашему драйверу и модели поддержки. Упаковка может организовать сборки и этапы подписи для каждого ядра, но это не отменяет необходимости в правильной защите ключей, совместимости модулей, доверии MOK и тестировании обновлений. Обратитесь к документации, чтобы узнать точный пакет обновлений SLES 15 и поддерживаемый вашей организацией жизненный цикл ядра.

Пример конфигурации modules-load, отображающий acme_driver и состояние терминала для загрузки модулей systemd.
Однострочная /etc/modules-load.dзапись может запросить загрузку модуля во время загрузки после того, как он будет пересобран и подписан для установленного ядра.

Официальные ссылки

Оставить комментарий

Как безопасно восстановить потерянные разделы и данные с жесткого диска

Как безопасно восстановить потерянные разделы и данные с жесткого диска

Узнайте, как восстановить потерянные разделы и файлы с помощью TestDisk и PhotoRec. Защитите исходный диск, проведите безопасное сканирование и сохраните восстановленные данные на другой диск.

Как сканировать QR-коды на настольном компьютере с Linux

Как сканировать QR-коды на настольном компьютере с Linux

Сканируйте QR-коды в Linux с помощью CoBang, используя веб-камеру или файл изображения. См. варианты установки, шаги настройки и решения проблем с доступом к камере Flatpak.

Как изменить настройки веб-камеры в Linux с помощью Cameractrls

Как изменить настройки веб-камеры в Linux с помощью Cameractrls

Изменяйте настройки веб-камеры в Linux с помощью Cameractrls: настраивайте экспозицию, цвет, подавление мерцания и другие поддерживаемые параметры, а затем проверяйте совместимые видеорежимы.

Как установить PhpStorm на Linux: Toolbox, Tar.gz, Snap и AUR

Как установить PhpStorm на Linux: Toolbox, Tar.gz, Snap и AUR

Установите PhpStorm на Linux с помощью JetBrains Toolbox или автономного архива tar.gz, а также через Snap и Arch AUR. Java уже включена в комплект.

Как создать резервную копию CD-ROM в формате ISO в Linux

Как создать резервную копию CD-ROM в формате ISO в Linux

Создайте образ CD-ROM ISO в Linux с помощью GNOME Disks или dd. Определите оптический привод, отслеживайте процесс копирования, проверяйте образ и узнавайте, когда поврежденный диск или аудиодиск требует использования другого инструмента.

Как вырезать изображение в Linux с помощью GIMP

Как вырезать изображение в Linux с помощью GIMP

Удаление фона фотографии в Linux с помощью GIMP: обведите контур объекта, удалите выделенный фон, сохранив прозрачность, и экспортируйте многоразовый PNG-файл.

Как установить Cisco Packet Tracer на Linux

Как установить Cisco Packet Tracer на Linux

Загрузите Cisco Packet Tracer 9.0.1 для Ubuntu 64-бит, установите DEB-пакет с помощью APT, примите лицензионное соглашение в Терминале и войдите в систему, чтобы начать лабораторную работу.

Скачайте FlightGear бесплатно: официальное руководство по установке

Скачайте FlightGear бесплатно: официальное руководство по установке

Скачайте FlightGear бесплатно с официального сайта. Сравните пакеты для Windows, macOS и Linux, установите файлы данных и совершите свой первый полет.

Настольное приложение Google Tasks: как им пользоваться на компьютере

Настольное приложение Google Tasks: как им пользоваться на компьютере

Откройте Google Задачи в браузере, добавьте ярлык Chrome или запустите приложение, и управляйте задачами с указанием даты через Календарь и Gmail.

OKSampler: Бесплатный и простой музыкальный сэмплер для клавишных ритмов.

OKSampler: Бесплатный и простой музыкальный сэмплер для клавишных ритмов.

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