Вопрос или проблема
Я пытаюсь выполнить modprobe wireguard
от имени root, и это вызывает ошибку:
modprobe: ERROR: не удалось вставить 'wireguard': Операция не разрешена
Добавив опцию verbose, я получаю еще одну строку:
[root@localhost ben]# insmod /lib/modules/5.2.11-100.fc29.x86_64/extra/wireguard.ko.xz
insmod: ERROR: не удалось вставить модуль /lib/modules/5.2.11-100.fc29.x86_64/extra/wireguard.ko.xz: Операция не разрешена
dkms работает без ошибок. Я также отключил SELinux, и это не изменило ситуацию. В логах journalctl
ничего не вижу.
Просмотр мануалов и Google не дал результата.
Я нашел полезную строку в dmesg
:
Lockdown: modprobe: Загрузка неподписанного модуля ограничена; смотрите man kernel_lockdown.7
Тем не менее, этой страницы в мануале не существует.
Как я могу отладить это? Есть ли советы, что делать дальше?
Наконец-то нашел что-то по этому поводу. Похоже, это “особенность”, при которой неподписанный код не может быть загружен в ядро при включенной функции безопасной загрузки UEFI (что и есть).
Чтобы загрузить модуль, отключите блокировку ядра через sys-rq:
# echo 1 > /proc/sys/kernel/sysrq
# echo x > /proc/sysrq-trigger
После этого modprobe
должен сработать:
modprobe wireguard
Для получения дополнительной информации смотрите:
Возможно, на длительный срок лучше подписать ваши модули.
Для Debian и его производных смотрите:
Моя дистрибуция Fedora 31 не принимала команды на sysrq
.
В вики Arch Linux предложили
использовать Alt+PrtSc+x
(на ноутбуках, где Fn является частью клавиатуры).
Блокировка была успешно отключена, и WireGuard успешно загружен.
Я установил akmod
, поэтому modprobe wireguard
сработал для меня
в качестве альтернативы SysRq+x.
(В руководстве Red Hat сказано, что это должно быть выполнено
на физически подключенной клавиатуре.)
Мне удалось это сделать на моем Asus ProArt B550 Creator с AMI BIOS, изменив настройку BIOS “Тип ОС” с Windows UEFI на “Другая ОС”. Никакой магии SysRq не потребовалось.
https://www.techpowerup.com/review/asus-proart-b550-creator/images/bios_55-copy.jpg
Если вы находитесь в виртуальной системе, такой как контейнер lxc, вам следует загрузить модуль в основную систему, только тогда он будет доступен внутри контейнера.
Моя проблема заключается в загрузке модуля os overlay для CentOS 7.x (не скомпилированный модуль), который обычно подписывается…
плюс безопасная загрузка не включена (mokutil говорит “EFI переменные не поддерживаются на этой системе”).
Ответ или решение
Если вы сталкиваетесь с ошибкой при загрузке модуля ядра с помощью modprobe
, такой как:
modprobe: ERROR: could not insert 'wireguard': Operation not permitted
Это может быть связано с тем, что система ограничивает загрузку неподписанных модулей ядра из-за включенной функции безопасности UEFI Secure Boot. Это поведение документируется в механизме блокировки ядра. Пункт из вывода dmesg
, указывающий на это, выглядит следующим образом:
Lockdown: modprobe: Loading of unsigned module is restricted; see man kernel_lockdown.7
Вот несколько шагов, которые вы можете предпринять для устранения этой проблемы:
1. Отключение Secure Boot
Если вы не хотите подписывать свои модули, вы можете временно отключить UEFI Secure Boot в BIOS вашего компьютера. Однако, если вы хотите сохранить уровни безопасности системы и использовать неподписанные модули, вам следует рассмотреть возможность их подписывания.
2. Используйте SysRq для отключения блокировки
Вы можете попытаться временно отключить механизм блокировки через интерфейс SysRq. Для этого выполните следующие команды, став корневым пользователем:
echo 1 > /proc/sys/kernel/sysrq
echo x > /proc/sysrq-trigger
После этого попробуйте снова выполнить modprobe wireguard
.
3. Подпись модулей
Если вы хотите использовать UEFI Secure Boot и в то же время загружать собственные модули, рекомендуется подписывать их. Инструкции по подписанию модулей и настройке системы для их использования можно найти в документации, например, в следующих источниках:
4. Изменение параметров BIOS/UEFI
В некоторых системах, возможно, поможет изменение параметра "OS Type" в настройках BIOS с "Windows UEFI" на "Other OS". Это может отключить строгую проверку неподписанных модулей.
5. Загрузка в виртуальных системах
Если вы работаете в виртуальной среде, такой как LXC-контейнер, убедитесь, что модуль загружается в основной системе, так как контейнеры могут не поддерживать загрузку модулей непосредственно.
6. Проблемы с CentOS
Если вы работаете с CentOS и не можете загрузить модули, которые должны быть подписаны, убедитесь, что у вас действительно отключен Secure Boot. Если команду mokutil
не поддерживаются на вашей системе, это может указывать на это.
Заключение
Если вышеперечисленные шаги не решили вашу проблему, вы можете ознакомиться с дополнительными ресурсами, такими как:
Пожалуйста, учитывайте, что некоторые из предложенных изменений могут повлиять на безопасность вашей системы, и рекомендуется принимать обоснованные решения, основываясь на ваших требованиях и окружении.