- Вопрос или проблема
- Ответ или решение
- Как подписать модуль ядра в Ubuntu 18.04
- Шаг 1: Установка необходимых инструментов
- Шаг 2: Создание RSA ключей
- Шаг 3: Импорт публичного ключа
- Шаг 4: Перезагрузка системы
- Шаг 5: Создание скрипта для подписи модулей
- Шаг 6: Подпись модулей
- Шаг 7: Загрузка модуля и запуск VirtualBox
- Завершение
Вопрос или проблема
Я новичок в использовании Ubuntu. Я пытаюсь установить Genymotion, чтобы получить доступ к эмулятору Android. Для использования Genymotion требуется наличие VirtualBox. У меня установлен VirtualBox, но, похоже, мне нужно подписать модуль ядра… и я действительно не знаю, как это сделать. Вот сообщение об ошибке, которое я получаю после выполнения /sbin/vboxconfig
:
vboxdrv.sh: Остановка служб VirtualBox.
vboxdrv.sh: Запуск служб VirtualBox.
vboxdrv.sh: Построение модулей ядра VirtualBox.
vboxdrv.sh: не удалось: modprobe vboxdrv не удался. Пожалуйста, используйте 'dmesg', чтобы узнать почему.
Проблемы с настройкой VirtualBox. Чтобы перезапустить процесс настройки, выполните
/sbin/vboxconfig
от имени root. Если ваша система использует EFI Secure Boot, вам может потребоваться подписать
модули ядра (vboxdrv, vboxnetflt, vboxnetadp, vboxpci), прежде чем вы сможете загрузить
их. Пожалуйста, посмотрите документацию вашей системы Linux для получения дополнительной информации.
Я пытался поискать это в интернете, но не могу найти четкий и лаконичный ответ с последовательными шагами. В очередной раз, я довольно новичок в Linux, поэтому любая помощь будет приветствоваться. Спасибо заранее всем, кто ответит.
Чтобы заставить VirtualBox работать без простого отключения UEFI Secure Boot, вам нужно сделать следующее:
- Создайте личную пару RSA-ключей (открытый/закрытый) для подписи модулей ядра. Как рекомендовано в приведенной ниже ссылке, я решил хранить ключ/пару в каталоге /root/module-signing.
sudo -i
mkdir /root/module-signing
cd /root/module-signing
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=ВАШ_ИМЯ/"
chmod 600 MOK.priv
- Используйте mokutil, инструмент для импорта или удаления ключей владельца машины (MOK), чтобы импортировать открытый ключ, а затем зарегистрировать его при перезагрузке машины. Пароль на этом шаге – это временный пароль, который вам нужно будет запомнить всего на несколько минут.
mokutil --import /root/module-signing/MOK.der
введите пароль:
введите пароль снова:
-
Перезагрузите машину. Когда загрузчик запустится, вы должны увидеть экран, спрашивающий, чтобы вы нажали кнопку для входа в утилиту управления MOK EFI. Обратите внимание, что любые внешние клавиатуры не будут работать на этом этапе. Выберите Enroll MOK в первом меню, затем продолжите и выберите Да для регистрации ключей, а затем снова введите пароль, установленный на шаге 2. Затем выберите ОК, чтобы продолжить загрузку системы.
-
Будущие обновления ядра потребуют повторной подписи обновленных ядер, поэтому имеет смысл поместить команды подписи в скрипт, который можно запустить позже по мере необходимости. Пример скрипта /root/module-signing/sign-vbox-modules приведен ниже.
#!/bin/bash
for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
echo "Подписание $modfile"
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
/root/module-signing/MOK.priv \
/root/module-signing/MOK.der "$modfile"
done
- Добавьте разрешение на выполнение и запустите скрипт выше от имени root из каталога /root/module-signing.
sudo -i
cd /root/module-signing
chmod 700 /root/module-signing/sign-vbox-modules
./sign-vbox-modules
- Загрузите модуль vboxdrv и запустите VirtualBox.
modprobe vboxdrv
Большая часть этой информации была получена из следующей ссылки и может быть использована для дополнительной информации https://stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail/.
Я знаю, что этот вопрос старый, но поскольку нет принятого ответа и никакие из этих ответов не решили проблему для меня, я пишу, как я решил это сегодня:
При выполнении этой команды возникла следующая ошибка:
$ sudo modprobe vboxdrv
modprobe: ОШИБКА: не удалось вставить 'vboxdrv': Требуемый ключ недоступен
Проблема в том, что модуль не подписан и, следовательно, не загружается с ядром. Это происходит, если ваш компьютер имеет активированный режим SecureBoot, что очень распространено на современном оборудовании.
Вот почему я получаю эту ошибку, открывая любую машину в виртуальной коробке
Драйвер ядра не установлен (rc=-1908)
Следуйте следующим шагам, чтобы подписать драйвер, и он загружается как модуль ядра на системах Ubuntu и также на Debian 9:
-
Установите пакет
mkutil
, чтобы иметь возможность подписывать.sudo apt-get update sudo apt-get upgrade sudo apt-get install mokutil
-
Сгенерируйте файл подписи:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
-
Затем добавьте его в ядро:
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
-
Зарегистрируйте его для Secure Boot.
ВАЖНО! Это запросит вас ввести пароль, введите тот, который вы хотите, вам нужно будет использовать его только один раз при следующей перезагрузке.
sudo mokutil --import MOK.der
-
Наконец, перезагрузите компьютер. Появится синий экран с ожиданием клавиатуры, нажмите клавишу, которую вас попросят, чтобы прервать загрузку.
Когда вы находитесь на синем экране, выберите
Enroll MOK -> Продолжить -> и вас попросят ввести пароль
который вы ввели ранее, вы введете его и вас уведомят, что операция была успешно завершена.
Теперь ваша операционная система запустится, и вы сможете использовать VirtualBox без проблем 🙂
Надеюсь, это поможет кому-то.
У меня возникла та же проблема в Ubuntu 20.04, но я не мог понять, почему. Я пробовал все вышеперечисленные варианты, но они не совсем сработали для меня. Подписание пакетов кажется немного сложным и ненужным, поэтому я не совсем уверен, прав ли я, но в конце концов, я смог разобраться и решить проблему.
Я понял, что эта проблема возникла только после выполнения обновления ядра/дистрибутива. Если вы вручную скомпилируете любую программу на вашей системе, а затем обновите ядро или ОС, то вы получите ту же проблему.
Решением было установить пакет virtualbox-dkms. Если вы посмотрите на установочные пакеты в Synaptic Package Manager, вы найдете множество. (У меня был virtualbox-6.1)
Если вы не уверены, просто выполните следующую команду:
sudo apt install --reinstall virtualbox-dkms
Сначала он попросит удалить текущую версию, если это не DKMS, и попросит ввести -y, чтобы подтвердить. (Примечание: это не удалит ваши виртуальные машины)
У меня была эта проблема. Отключите Secure Boot :
https://wiki.ubuntu.com/UEFI/SecureBoot/DKMS
Я сделал скрипт для установки сертификата в MOK, после этого этот сертификат можно использовать для подписи собственных модулей ядра.
Скрипт: regMOK
#модуль-ядра #MOK #подписание
Ответ или решение
Как подписать модуль ядра в Ubuntu 18.04
Для корректной работы VirtualBox на вашей системе с активированной функцией Secure Boot в Ubuntu необходимо подписать модули ядра. Это действие позволит загрузить модули, такие как vboxdrv
, vboxnetflt
, vboxnetadp
и vboxpci
, без отключения Secure Boot. В этом руководстве будут представлены пошаговые инструкции по созданию и регистрации ключей для подписи модулей ядра.
Шаг 1: Установка необходимых инструментов
Сначала убедитесь, что у вас установлены все необходимые утилиты, такие как mokutil
и openssl
. Если они не установлены, выполните следующие команды:
sudo apt-get update
sudo apt-get install mokutil openssl
Шаг 2: Создание RSA ключей
Создайте пару ключей (приватный и публичный), которые будут использоваться для подписи модулей ядра.
sudo -i
mkdir /root/module-signing
cd /root/module-signing
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=YOUR_NAME/"
chmod 600 MOK.priv
Шаг 3: Импорт публичного ключа
Используйте mokutil
для импорта вашего публичного ключа в систему. Вам будет предложено ввести временный пароль, который нужно будет запомнить для следующего перезагрузки.
mokutil --import /root/module-signing/MOK.der
# Введите пароль: (введите и подтвердите пароль)
Шаг 4: Перезагрузка системы
Перезагрузите компьютер. Во время загрузки системы вам будет предложено войти в MOK (Machine Owner Key) Manager. Вам нужно будет выбрать опцию "Enroll MOK", затем нажать "Continue" и "Yes". После этого введите пароль, который вы установили на предыдущем шаге.
Шаг 5: Создание скрипта для подписи модулей
Так как при обновлении ядра вам возможно придется повторно подписать модули, создадим скрипт для автоматизации этого процесса. Создайте файл /root/module-signing/sign-vbox-modules.sh
и добавьте в него следующий код:
#!/bin/bash
for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
echo "Подписываю $modfile"
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
/root/module-signing/MOK.priv \
/root/module-signing/MOK.der "$modfile"
done
Дайте скрипту права на выполнение:
chmod 700 /root/module-signing/sign-vbox-modules.sh
Шаг 6: Подпись модулей
Запустите созданный скрипт для подписи необходимых модулей ядра:
cd /root/module-signing
./sign-vbox-modules.sh
Шаг 7: Загрузка модуля и запуск VirtualBox
Теперь вы можете загрузить модуль vboxdrv
и запустить VirtualBox:
modprobe vboxdrv
Завершение
После выполнения всех шагов вы должны иметь возможность запускать VirtualBox без ошибок, связанных с загрузкой модулей ядра. Этот процесс может показаться сложным для начинающих пользователей Linux, но следуя шагам, вы сможете успешно настроить вашу систему для работы с VirtualBox в среде Secure Boot.
Если возникнут дополнительные вопросы или проблемы, вы всегда можете обратиться к документации Ubuntu или сообществу пользователей для получения помощи.