Главная
» LINUX
»
Как установить пользовательские модули ядра на SLES 15 с помощью Secure Boot
Как установить пользовательские модули ядра на 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суффикса. Это примеры команд, а не вывод с протестированного хоста.
Примеры команд предварительной проверки: подтверждение статуса 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 и описательное имя сертификата:
Этот -nodesпараметр оставляет закрытый ключ незашифрованным, поэтому важны права доступа к файлам и управление хранилищем. Не копируйте этот закрытый ключ на сервер общего назначения и не встраивайте его в пакет. Если политика организации требует зашифрованного ключа, аппаратной подписи, ротации ключей или иного жизненного цикла сертификата, следуйте этой политике и требованиям инструмента подписи. Передавайте ключ только module-signing.derв ту систему, которая будет регистрировать открытый ключ.
Примеры команд для создания сертификата и управления правами доступа к ключу; хранение закрытого ключа в условиях контролируемого доступа.
2. Соберите модуль для целевого ядра и подпишите его.
Соберите модуль, используя точно указанную версию ядра uname -r. Инструкции по сборке исходного проекта определяют необходимый компилятор, заголовочные файлы и конфигурацию; нет единой команды сборки, подходящей для каждого пользовательского модуля. Проверьте результаты vermagicс помощью команды, modinfoесли вам нужно диагностировать несоответствие ядра.
Подпишите итоговый файл модуля после компиляции и любых этапов упаковки или удаления данных. SUSE описывает свой вспомогательный инструмент для подписи по адресу [ссылка на документацию /usr/lib/rpm/pesign/kernel-sign-file]. В следующем примере используется формат PKCS#7 и дайджест SHA-256:
Вспомогательная функция должна быть доступна в вашей системе через интеграцию подписи SUSE. Если она отсутствует, проверьте официальную документацию SLES/KMP и включенные репозитории для поддерживаемой настройки подписи, вместо того чтобы использовать произвольную команду подписи. Подпись модуля добавляется к файлу. Не удаляйте, не редактируйте, не пересжимайте и не изменяйте модуль каким-либо иным способом после подписания; такое изменение может сделать подпись недействительной. Сохраните исходный артефакт сборки, чтобы вы могли повторить заключительный этап подписания.
Вспомогательная программа для подписи файлов SUSE подписывает завершенный файл модуля, используя защищенный закрытый ключ и соответствующий ему открытый сертификат.
3. Зарегистрируйте публичный сертификат как MOK.
На сервере SLES разместите открытый module-signing.derсертификат в месте, доступном для чтения пользователю root, а затем поставьте его в очередь на регистрацию:
В документации SUSE --root-pwописан способ авторизации ожидающей регистрации с помощью пароля root. Команда импорта ставит сертификат в очередь; она не регистрирует его немедленно. Перезагрузите сервер. В MokManager выберите «Зарегистрировать ключ с диска» , выберите сертификат, подтвердите регистрацию и завершите запрошенную авторизацию. Формулировка меню может немного отличаться в зависимости от версии shim/MokManager. Если вы не можете получить доступ к экрану регистрации, проверьте путь загрузки и организуйте доступ к консоли; не следует предполагать, что сертификат был зарегистрирован только потому, что команда импорта прошла успешно.
После загрузки сервера убедитесь, что ключ отображается в списке зарегистрированных ключей:
mokutil --list-enrolled
Импорт ставит сертификат в очередь на проверку при перезагрузке; mokutil --list-newотображает ожидающие запросы на регистрацию.После перезагрузки MokManager отображает вариант регистрации ключа и этап подтверждения, который должен быть одобрен авторизованным оператором.
4. Установите, обновите зависимости модуля и загрузите его.
Скопируйте подписанный файл в каталог extra-modules для запущенного ядра, обновите карту зависимостей и запросите модуль по имени. Если вы устанавливаете модуль для другого загруженного ядра, замените фактический релиз ядра:
modprobeОбычно предпочтительнее использовать другой подход, insmodпоскольку он разрешает зависимости модулей. Протестируйте фактическое устройство или функциональность, предоставляемую драйвером; успешная команда сама по себе не доказывает корректную работу оборудования. Если модуль предназначен для загрузки при загрузке системы, добавьте его имя на отдельной строке в файл, например, ` /etc/modules-load.d/acme_driver.conf.sles`. SLES использует механизм загрузки модулей systemd для этих конфигурационных файлов.
Установите подписанный модуль в соответствии с версией ядра, пересоберите информацию о зависимостях, а затем загрузите его с помощью modprobe.
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.
Используйте список зарегистрированных ключей, метаданные подписывающего лица, список загруженных модулей и журнал ядра одновременно; ни одна отдельная проверка не может подтвердить всю цепочку доверия и совместимости.
Планирование обновлений ядра и повторных развертываний.
Модуль, собранный для одной версии ядра, не обязательно будет совместим со следующей. После обновления ядра установите соответствующую среду сборки, пересоберите модуль для нового ABI ядра, подпишите окончательный файл, установите его в дерево модулей этого ядра и обновите информацию о его зависимостях. Если сертификат подписи остается доверенным, обычно его не нужно регистрировать снова. Для замены или ротации сертификата требуется собственная регистрация и подтверждение. Протестируйте новое ядро и модуль вместе, прежде чем полагаться на автоматическую загрузку.
Для парка приложений или драйверов, которые должны выдерживать регулярные обновления, используйте повторяющийся рабочий процесс упаковки, например, подход SUSE Kernel Module Package (KMP), если он соответствует вашему драйверу и модели поддержки. Упаковка может организовать сборки и этапы подписи для каждого ядра, но это не отменяет необходимости в правильной защите ключей, совместимости модулей, доверии MOK и тестировании обновлений. Обратитесь к документации, чтобы узнать точный пакет обновлений SLES 15 и поддерживаемый вашей организацией жизненный цикл ядра.
Однострочная /etc/modules-load.dзапись может запросить загрузку модуля во время загрузки после того, как он будет пересобран и подписан для установленного ядра.