Вопрос или проблема
Я использую ядро Fedora версии: 4.15.3-300.fc27.i686). Я пытаюсь загрузить пользовательский драйвер устройства. Когда я пытаюсь использовать устройство (через вызов open() в программе на C), вызов завершается с ошибкой, errno равно 6 (ENODEV). Когда я смотрю на это ближе, я вижу следующие сообщения от dmesg:
[Вт Апр 24 17:34:32 2018] mymodule: загрузка модуля вне дерева портит ядро.
[Вт Апр 24 17:34:32 2018] mymodule: проверка модуля не удалась: подпись и/или требуемый ключ отсутствуют - порча ядра
Я думаю, что проблема связана с тем, что драйвер не подписан. Руководство администратора системы Fedora говорит мне, что мне нужно пересобрать ядро, чтобы добавить новый ключ, но также говорится, что
Если UEFI Secure Boot отключен и параметр ядра module.sig_enforce не был задан, то неподписанные модули ядра и подписанные модули ядра без открытого ключа могут быть успешно загружены.
Компьютер, который я использую, использует BIOS и не поддерживает UEFI.
Как мне узнать текущее значение параметра module.sig_enforce и как мне его изменить?
На самом деле ответ Эльмера не является неправильным. Ссылка, упомянутая в комментарии (цитата ниже), на самом деле указывает на /etc/grub2.cfg
. Хотя это символическая ссылка, это все еще верно. Практика изменения этой символической ссылки (/etc/grub2.cfg
) на /boot/grub2/grub.cfg
рискованна, и существуют лучшие/безопасные способы добиться желаемого результата.
Прямо из: Глава 26. Работа с GRUB 2 Red Hat Enterprise Linux 7 | Портал клиентов Red Hat
26.4. Внесение постоянных изменений в меню GRUB 2 с помощью инструмента grubby Инструмент grubby можно использовать для чтения информации из файла grub.cfg и внесения в него
постоянных изменений. Он позволяет, например,
изменять записи меню GRUB 2, чтобы указать, какие аргументы передавать ядру при запуске системы, и менять ядро по умолчанию.
В Red Hat Enterprise Linux 7, если grubby вызывается вручную без указания файла конфигурации GRUB 2, он по умолчанию ищет /etc/grub2.cfg
, который является символической ссылкой на файл grub.cfg
, местоположение которого зависит от архитектуры. Если этот файл не может быть найден, он будет искать архитектурно зависимый по умолчанию.
В RHEL7 вы можете изменить /etc/grub2.cfg и либо удалить его, либо изменить значение с yes на no. Поскольку вы используете Fedora, это должно быть похожим.
Ответ или решение
Для изменения значения параметра module.sig_enforce
, используемого ядром Fedora, вам необходимо изменить конфигурацию загрузчика GRUB. Параметр module.sig_enforce
определяет, должны ли загружаться только подписанные модули ядра, что может быть важно при работе с пользовательскими драйверами. Ваша ситуация требует определенных действий, чтобы разрешить загрузку неподписанных модулей, если UEFI Secure Boot отключен и BIOS поддерживает загрузку без проверки подписи.
Шаг 1: Проверка текущего значения module.sig_enforce
Для начала вы можете проверить текущее значение параметра module.sig_enforce
. Это можно сделать с помощью команды:
cat /proc/sys/kernel/module.sig_enforce
Если значение равно 1
, это означает, что загружаются только подписанные модули. Значение 0
позволит загружать неподписанные модули.
Шаг 2: Изменение значения через GRUB
-
Установка нового значения через grubby:
Fedora использует инструмент
grubby
для управления параметрами загрузки. Чтобы изменить значениеmodule.sig_enforce
, выполните следующую команду в терминале:sudo grubby --set-args="module.sig_enforce=0" --update-kernel=ALL
Эта команда установит параметр на значение
0
для всех доступных ядер, что позволит загружать неподписанные модули. -
Перезагрузка системы:
После того как вы изменили параметры, необходимо перезагрузить систему, чтобы изменения вступили в силу:
sudo reboot
Шаг 3: Проверка изменений
После перезагрузки вы можете снова выполнить команду из Шага 1, чтобы убедиться, что значение module.sig_enforce
установлено на 0
. Теперь вы сможете загружать ваш пользовательский драйвер без необходимости его подписывать.
Рекомендации
- На случай, если вы будете готовить модули для использования в безопасности критичных приложениях, что может потребовать цифровой подписи для обеспечения доверия, достаточно рано начинать изучение и практическое применение подписей для των модулей ядра.
- Следите за обновлениями в документации Fedora, чтобы узнать о потенциальных изменениях в политике управления модулями и их подписями.
Эти шаги позволят вам эффективно управлять загрузкой модулей в Fedora и работать с пользовательскими драйверами, минимизируя проблемы, связанные с подписями модулей ядра.