Не удалось загрузить vboxdrv после обновления до Ubuntu 16.04 (и я хочу сохранить безопасную загрузку)

Я обновляю Ubuntu 15.10 до 16.04, и с тех пор VirtualBox 5.0.18 больше не запускает мои виртуальные машины. Он жалуется, что vboxdrv не загружен. Поэтому я пытаюсь загрузить его и получаю следующую ошибку:

$ sudo modprobe vboxdrv
modprobe: ERROR: could not insert 'vboxdrv': Required key not available

Я считаю, что это связано с безопасной загрузкой, которую я использую и которую я хочу продолжать использовать. На самом деле с Ubuntu 15.10 безопасная загрузка и VirtualBox работали просто отлично.

Тоже попробовал $ sudo apt-get --reinstall install virtualbox-dkms который успешно собрал модуль ядра, но не решил эту проблему.

Любая идея, как загрузить vboxdrv при сохранении безопасной загрузки?

Обновление 2: также я попытался выполнить sudo mokutil --disable-validation, При выполнении этой команды во время следующей загрузки мне предлагается отключить безопасную загрузку, добавить ключ или хэш с диска. Поскольку я не хочу отключать безопасную загрузку, похоже, это тоже не решает мою проблему. Также я хочу оставить UEFI активным для параллельной установки Windows.

Примечание. Если вы не против отключить безопасную загрузку, см. Почему я получаю "Требуемый ключ недоступен" при установке модулей ядра сторонних производителей или после обновления ядра? вместо.

9 ответов

Начиная с версии ядра 4.4.0-20 было принудительно запрещено запускать неподписанные модули ядра с включенной безопасной загрузкой. Поскольку вы хотите сохранить безопасную загрузку, следующий логический шаг - подписать эти модули.

Итак, давайте попробуем это.

  1. Создать ключи подписи

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive common name/"
    

    Опция: для дополнительной безопасности пропустите ключ -nodes, который запросит пароль. Затем, прежде чем перейти к следующему шагу, обязательно export KBUILD_SIGN_PIN='yourpassword'

  2. Подпишите модуль (vboxdrv для этого примера, но повторите для других модулей в ls $(dirname $(modinfo -n vboxdrv))/vbox*.ko) для полной функциональности)

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
    
  3. Подтвердите, что модуль подписан

    tail $(modinfo -n vboxdrv) | grep "Module signature appended"
    
  4. Зарегистрируйте ключи для безопасной загрузки

    sudo mokutil --import MOK.der
    

    который попросит ввести пароль для подтверждения импорта на следующем шаге.

  5. Перезагрузитесь и следуйте инструкциям, чтобы зарегистрировать MOK (ключ владельца машины). Вот образец с картинками. Система перезагрузится еще раз.

  6. Подтвердите, что ключ зарегистрирован

    mokutil --test-key MOK.der
    

Если VirtualBox по-прежнему не загружается, возможно, модуль не загружается (sudo modprobe vboxdrv исправит это) или что ключ не подписан. Просто повторите этот шаг, и все должно работать нормально.

Ресурсы: Подробная статья на сайте для реализации подписания модулей в Fedora и Ubuntu. @zwets для дополнительной безопасности. @shasha_trn за упоминание всех модулей.

Дополнительный ресурс: я каждый раз создавал bash-скрипт для собственного использования virtualbox-dkms обновляет и, таким образом, перезаписывает подписанные модули. Проверьте мой vboxsign первоначально на GitHub.

Я знаю, что этот вопрос слишком старый, но поскольку нет принятого ответа, и ни один из этих ответов не решил проблему в моем случае, я пишу, как я решил это сегодня, не отключая безопасную загрузку:

При запуске этой команды получайте такую ​​ошибку:

$ sudo modprobe vboxdrv
modprobe: ERROR: could not insert 'vboxdrv': Required key not available

Проблема в том, что модуль не подписан и поэтому не загружается с ядром. Это произойдет, если на вашем компьютере активирован режим SecureBoot, что очень часто встречается в современном оборудовании.

Вот почему я получаю эту ошибку, открывая любую машину в виртуальном ящике.

Драйвер ядра не установлен (rc=-1908)

Выполните следующие действия, чтобы подписать драйвер, и он загружается как модуль ядра в системах Ubuntu, а также в Debian 9:

1. Установите пакет mkutil, чтобы иметь возможность подписывать.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mokutil

2. сгенерируйте файл подписи:

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"

3. Затем добавляем в ядро:

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)

4. Зарегистрируйте его для безопасной загрузки.

ВАЖНЫЙ! Это попросит вас ввести пароль, введите тот, который вы хотите, вам нужно будет использовать его только один раз при следующей перезагрузке.

sudo mokutil --import MOK.der

5. Наконец, перезагрузите компьютер. Появится синий экран с ожиданием клавиатуры, нажмите клавишу, которая просит вас прервать загрузку.

Когда вы находитесь внутри синего экрана, выберите

Enroll MOK > Continue > and it will ask you for the password

что вы ввели ранее, вы введете его, и вам сообщат, что операция была успешно завершена.

Теперь ваша операционная система запустится, и теперь вы можете без проблем использовать VirtualBox:)

Надеюсь, это кому-то поможет.

В моей системе я сделал следующее, чтобы она заработала:

Запустите mokutil:

sudo mokutil --disable-validation

Затем mokutil попросил меня установить пароль для менеджера MOK. После перезагрузки ПК в BIOS появилось диалоговое окно для настройки MOK Manager. Я отключил SecureBoot из этого диалога, он запрашивал несколько символов из пароля (т. Е. Введите символ (5) и т. Д.).

После загрузки модули vboxdrv загружаются правильно.

lsmod | grep vboxdrv
vboxdrv               454656  3 vboxnetadp,vboxnetflt,vboxpci

Любопытно, что mokutil все еще показывает, что SecureBoot включен:

sudo mokutil --sb-state
SecureBoot enabled

Вы можете отключить проверку

sudo apt install mokutil
sudo mokutil --disable-validation

После этого следует установить пакеты DKMS.

У меня была эта проблема с Ubuntu 20.04 (после новой установки). Я не запускал UEFI в BIOS и выполнял автоматический вход в Ubuntu.

Что исправлено, я изменил автоматический вход на автоматический вход и включил UEFI в BIOS.

Хорошо, после небольшого тестирования я почти уверен, что это проблема безопасной загрузки.

Как в случае, если он включен, то это бросается:

ВНИМАНИЕ: модуль ядра vboxdrv не загружен. Либо нет доступного модуля для текущего ядра (4.4.0-21-generic), либо его не удалось загрузить. Пожалуйста, перекомпилируйте модуль ядра и установите его с помощью установки sudo /sbin/rcvboxdrv

Однако, если безопасная загрузка отключена, то Virtualbox загружается просто без ошибок.

У меня все еще мой биос установлен как UEFI.

У меня была та же проблема сегодня, у меня были Windows 10 и Ubuntu 15.10 на двойной загрузке с включенным UEFI на Bios (я не отключил его, чтобы я мог запустить предустановленную Windows).

После обновления до Ubuntu 16.04 VirtualBox перестал загружать мои виртуальные машины с тем же сообщением об ошибке:

modprobe: ERROR: could not insert 'vboxdrv': Required key not available

Я подозревал проблему UEFI, потому что при обновлении установщик спросил меня, хочу ли я отключить его, на что я ответил "Нет" (потому что "Да" может сделать мою Windows непригодной для использования).

Что я сделал, так это перешел в Bios и включил поддержку устаревшей загрузки BIOS БЕЗ отключения безопасной загрузки.

Виртуалбокс теперь работает нормально.

Обновление: как правильно заметил @zwets в комментарии, включение устаревших модулей приводит к отключению безопасной загрузки.

Я получил ошибку о vboxdrv после обновления тоже. Но была проблема со старой версией (5.0.14) Oracle VM VirtualBox Extension Pack. Я скачал и установил более новую версию (5.0.18) этого пакета, и проблема исчезла.

Это сработало для меня (сборка 5.11.0-27-generic)

sudo apt-get autoremove virtualbox-dkmssudo apt-get установить виртуальный бокс

он был перекомпилирован с новым ядром :)

Другие вопросы по тегам