Вопрос или проблема
Я недавно начал использовать Centos 8 и установил VirtualBox для управления моими виртуальными машинами. Проблема, с которой я столкнулся, заключалась в том, что мой VirtualBox не мог загрузить ни одну виртуальную машину и сообщил мне выполнить этот скрипт /sbin/vboxconfig от имени root. Когда я запускаю этот скрипт, появляется следующее сообщение:
vboxdrv.sh: Остановка служб VirtualBox.
vboxdrv.sh: Запуск служб VirtualBox.
vboxdrv.sh: Вы должны подписать эти модули ядра перед использованием VirtualBox:
vboxdrv vboxnetflt vboxnetadp vboxpci
Смотрите документацию для вашего дистрибутива Linux.
vboxdrv.sh: Компиляция модулей ядра VirtualBox.
vboxdrv.sh: ошибка: modprobe vboxdrv не удалась. Пожалуйста, используйте 'dmesg', чтобы узнать причину.
При настройке VirtualBox возникли проблемы. Чтобы перезапустить процесс настройки, выполните
/sbin/vboxconfig
от имени root. Если ваша система использует EFI Secure Boot, вам может потребоваться подписать
модули ядра (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) перед их загрузкой. Пожалуйста, смотрите документацию вашей системы Linux для получения дополнительной информации.
Обратите внимание, что у меня включена безопасная загрузка. Мой вопрос: как подписать эти модули ядра в Centos 8?
После некоторых исследований я нашел решение.
Решение 1: отключить защищенную загрузку.
Решение 2:
1- Установите пакет mokutil
sudo dnf update
sudo dnf install mokutil
2- Создайте RSA-ключ в новой папке.
sudo -i
mkdir /root/signed-modules
cd /root/signed-modules
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
chmod 600 MOK.priv
3- Эта команда попросит вас ввести пароль, этот пароль вам понадобится после следующей перезагрузки.
sudo mokutil --import MOK.der
4- Перезагрузите свою систему, и появится синий экран; выберите Enroll MOK –> Continue –> введите предыдущий пароль, и ваша система начнет загружаться.
5- Поместите предыдущие команды в скрипт, чтобы запустить его позже (после обновления системы).
cd /root/signed-modules
vi sign-virtual-box
Добавьте следующую команду в этот скрипт:
#!/bin/bash
for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
echo "Подписываю $modfile"
/usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \
/root/signed-modules/MOK.priv \
/root/signed-modules/MOK.der "$modfile"
done
Используйте нижеприведенную команду для поиска sign-file, если вышеуказанная команда не сработала, и исправьте скрипт соответствующим образом.
find /usr/src -name sign-file
5- Добавьте разрешение на выполнение и выполните скрипт
chmod 700 sign-virtual-box
./sign-virtual-box
6- Запустите VirtualBox
modprobe vboxdrv
Для получения дополнительной информации смотрите эту ссылку (для пользователей ubuntu) https://stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail/
Если кто-то, использующий Debian, оказался здесь:
Модули уже подписаны, но вам нужно зарегистрировать ключ владельца машины:
sudo mokutil --import /var/lib/dkms/mok.pub # Появится запрос на одноразовый пароль
sudo mokutil --list-new # Проверьте свой ключ, он будет запрошен при следующей перезагрузке
Перезагрузите машину. Она войдет в EFI-утилиту управления MOK. Зарегистрируйте MOK, продолжите, подтвердите, введите пароль, который вы установили ранее, и перезагрузите.
mokutil --list-enrolled | grep DKMS # Проверьте, что MOK зарегистрирован.
Также помните, чтобы добавить своего пользователя в группу vboxusers
.
Ответ или решение
Для решения проблемы с использованием VirtualBox на CentOS 8 с включенным режимом Secure Boot, вам необходимо подписать соответствующие модули ядра (vboxdrv, vboxnetflt, vboxnetadp, vboxpci). Вот подробное руководство по выполнению этой процедуры.
Шаги по подписыванию модулей ядра VirtualBox
-
Установите пакет
mokutil
. Это утилита, которая поможет вам управлять ключами машинного владельца (MOK).sudo dnf update sudo dnf install mokutil
-
Создайте RSA ключ в новой папке. Этот ключ будет использован для подписывания модулей.
sudo -i mkdir /root/signed-modules cd /root/signed-modules openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/" chmod 600 MOK.priv
-
Импортируйте MOK. Эта команда запросит вас ввод пароля, который вам потребуется после перезагрузки.
sudo mokutil --import MOK.der
-
Перезагрузите систему. На экране появится синяя оболочка. Выберите «Enroll MOK» -> «Continue», введите ранее установленный пароль, и ваша система продолжит загрузку.
-
Создайте скрипт для подписывания модулей. Сохраните команды в исполняемом скрипте для повторного использования в будущем.
cd /root/signed-modules vi sign-virtual-box
Добавьте в скрипт следующие команды:
#!/bin/bash for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do echo "Signing $modfile" /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \ /root/signed-modules/MOK.priv \ /root/signed-modules/MOK.der "$modfile" done
Проверьте путь к файлу
sign-file
, если скрипт не выполняется, с помощью следующей команды:find /usr/src -name sign-file
-
Дайте права на выполнение и запустите скрипт.
chmod 700 sign-virtual-box ./sign-virtual-box
-
Запустите VirtualBox. После подписывания модулей загрузите их.
modprobe vboxdrv
Дополнительно
- Не забудьте добавить пользователя в группу
vboxusers
, чтобы иметь возможность управлять виртуальными машинами.sudo usermod -aG vboxusers ваше_имя_пользователя
- В случае возникновения проблем, вы можете проверить логи ошибок с помощью команды
dmesg
.
Заключение
Следуя данным шагам, вы сможете успешно подписать модули VirtualBox и запустить их на CentOS 8 с включенным Secure Boot. Чтобы избежать необходимости выполнять процедуру подписания при каждом обновлении системы, периодически пересматривайте вашу настройку и следите за обновлениями.