Не вдалося завантажити 'vboxdrv' після оновлення до Ubuntu 16.04 (і я хочу захистити завантаження)


130

Я оновлююсь з 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.

Примітка : Якщо ви не проти відключення захищеного завантаження, див. Чому я отримую "Необхідний ключ недоступний" під час встановлення сторонніх модулів ядра або після оновлення ядра? замість цього.



Хоча це запитання є дублікатом askubuntu.com/questions/762254/… , це питання не містить відповіді, наданої нижче @Majal.
zwets

1

FWIW для Googlers: з Ubuntu 18.04, установка aptitude install virtualbox virtualbox-dkms буде підписувати модуль і запросить у вас одноразовий пароль (?). Перезавантажте систему, введіть конфігурацію MOK і введіть ключ, використовуючи цей пароль.
Рафаель

Відповіді:


177

Починаючи з версії ядра 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 .


7
Я також підписав модулі vboxnetadp, vboxnetflt, vboxpci, щоб мати мережеві та передаючі ПК-пристрої у віртуальних машинах.
sasha_trn

4
Подовжуючи відповідь @ majal, мені довелося виконати, sudo apt install --reinstall virtualbox-dkmsперш ніж виконувати надані інструкції.
TylersSN

1
@zwets Ви могли б пояснити, як правильно встановити KBUILD_SIGN_PINзмінну навколишнього середовища? export KBUILD_SIGN_PIN=passwordа export KBUILD_SIGN_PIN="password"перед кроком 2 обидва призвели доSSL error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read: pem_pkey.c:117
adempewolff

3
@adempewolff Якщо у вашому паролі є символи, які інтерпретують ваші оболонки (наприклад, '$' у котируваному рядку), вам потрібно буде укласти його в апострофи (').
zwets

1
@Majal Дякую за вашу відповідь! Я також підтримую підписання модулів замість вимкнення функції. Я можу додати: (1) Це стосується також модулів VMware "vmmon" та "vmnet", які поділяють ту саму долю. (2) Додаючи створені ключі, обережно вибирайте свій пароль. Під час фази перезавантаження та реєстрації у захищеному завантаженні розкладка клавіатури може відрізнятися від налаштувань локальної мови. (-> US-Layout)
one-mb

15

У своїй системі я зробив наступне, щоб вона працювала:

Запустити mokutil:

sudo mokutil --disable-validation

Тоді mokutil попросив мене встановити пароль для менеджера MOK. Після перезавантаження ПК BIOS показав діалогове вікно для налаштування менеджера MOK. Я відключив SecureBoot з цього діалогового вікна, він запитав кілька символів із пароля (тобто введіть символ (5) тощо).

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

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

Цікаво, що mokutil все ще показує, що SecureBoot увімкнено:

sudo mokutil --sb-state
SecureBoot enabled

9
Як зазначено в моєму запитанні, я хочу продовжувати використовувати захищене завантаження. Тому відключення безпечного завантаження не вирішує проблему.
січня

2
Не хотілося відключити захищене завантаження, але врешті-решт довелося це зробити, оскільки нічого іншого не вийшло - не хочуть починати підписувати речі вручну щоразу, коли надходить оновлення ядра. Шкода, це єдине просте рішення вперед. До речі, UEFI все ще говорить, що захищене завантаження ввімкнено. ¯_ (ツ) _ / ¯
jaywink

4

Ви можете відключити перевірку перевірки за допомогою

sudo apt install mokutil
sudo mokutil --disable-validation

Після цього пакети DKMS слід встановити.


2
Також я спробував виконати sudo mokutil - unisable-validation. Виконуючи цю команду, під час наступного завантаження мені буде запропоновано відключити захищене завантаження, додати ключ або хеш з диска. Оскільки я не хочу відключати безпечне завантаження, схоже, що це також не вирішує мою проблему. Будь ласка, повідомте мене про те, якщо я неправильно зрозумів цю команду.
січ

2
Спробуйте вимкнути безпечне завантаження. Ви можете ввімкнути його назад, якщо це не допомагає.
Пілот6

Я намагався вимкнути безпечне завантаження - але він все ще ввімкнено :( (ubuntu 18.04)
xhudik

0

Я отримав помилку щодо vboxdrv і після оновлення. Але виникла проблема зі старою версією (5.0.14) пакету розширень Oracle VM VirtualBox. Я завантажив і встановив нову версію (5.0.18) цього пакета, і проблема зникла.


Гей, ви можете, будь ласка, докладно? Звідки ви його скачали? Файл PPA або deb?
Картик Нішант

1
Я завантажив пакет розширень із завантажень на сайт VirtualBox , посилання - "VirtualBox 5.0.18 Oracle VM VirtualBox Extension Pack -> Усі підтримувані платформи ". Потім я відкрив Файл> Налаштування в Oracle VM Virtual Box Manager, вибрав "Розширення" та додав завантажений файл до списку. Він замінив стару версію "Oracle VM VirtualBox Extension Pack" (був 5.0.14rxxxxxx).
Reling

1
Пакет розширення не виправляє помилку. Помилка стосується підписання модуля
Karthik Nishanth

Це не стосується моєї проблеми.
січ

1
Це не пов'язано з проблемою ОП. Повідомлення про помилку "Необхідний ключ недоступний" вказує на те, що проблема пов’язана з непідписаним модулем ядра на платформі з підтримкою Secure Boot. Жодне оновлення VirtualBox не може це виправити, якщо воно не включає модуль, підписаний за допомогою ключа, якому довіряється ядро. Тобто Canonical повинен підписати його, або Oracle повинен підписати його, і його відкритий ключ повинен бути доданий до надійних ключів ядра (або вашої платформи).
zwets

0

Гаразд, після тестування я майже впевнений, що це безпечне завантаження.

Як якщо ввімкнено, то це кидається:

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

Однак якщо захищене завантаження вимкнено, віртуальна скринька завантажується просто без помилок.

Я все ще маю свої біоси, встановлені як UEFI.


3
Як зазначено в моєму запитанні, я хочу продовжувати використовувати захищене завантаження. Тому відключення безпечного завантаження не вирішує проблему.
січ

0

У мене була та сама проблема сьогодні, у мене були 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 БЕЗ відключення безпечного завантаження.

Virtualbox зараз працює чудово.

Оновлення : Як @zwets справедливо вказав у коментарі, включення застарілих модулів призводить до відключення захищеного завантаження.


2
Насправді мені також потрібен UEFI для завантаження паралельної установки Windows. Тож відключення - це не варіант для мене. Я відповідно оновив своє запитання.
січня

Чи ввімкнено підтримку застарілих модулів BIOS? Це ще один варіант біографії UEFI, відмінний від безпечного завантаження.
Zeine77

1
@ Zeine77 чи можете ви переконатися, що ваш BIOS дозволяє включити "застарілі модулі", тоді як захищене завантаження залишається ввімкненим ? Це малоймовірно, оскільки перша опція дозволяє ненадійному коду працювати в просторі ядра, що перемагає призначення другого.
zwets

@zwets ви маєте рацію, я щойно перевірив свої налаштування біографії; і включення застарілих модулів призвело до відключення захищеного завантаження. Як я пояснив у відповіді, я припускав, що відключення захищеного завантаження призведе до виходу з ладу завантажувальної системи Windows 10, це не так. Коли я вперше встановив 15.10 (місяці тому), я подбав про те, щоб не відключати безпечне завантаження, оскільки це може пошкодити установку Win 10. Чи означає це, що попередньо встановлений Win 10 працює нормально з відключеним захищеним режимом?
Zeine77
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.