Nie można załadować „vboxdrv” po aktualizacji do Ubuntu 16.04 (i chcę zachować bezpieczny rozruch)


130

Uaktualniam z Ubuntu 15.10 do 16.04 i od tego czasu VirtualBox 5.0.18 nie uruchamia już moich maszyn wirtualnych. Narzeka, że ​​„vboxdrv” nie jest załadowany. Dlatego próbuję go załadować i wyświetlić następujący błąd:

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

Uważam, że jest to związane z bezpiecznym uruchomieniem, którego używam i którego chcę nadal używać. W rzeczywistości z Ubuntu 15.10 bezpieczny rozruch i VirtualBox działały dobrze.

Próbowałem również, $ sudo apt-get --reinstall install virtualbox-dkmsktóry z powodzeniem zbudował moduł jądra, ale nie rozwiązałem tego problemu.

Masz pomysł, jak załadować vboxdrv, zachowując bezpieczny rozruch?

Aktualizacja 2 : Próbowałem także wykonać sudo mokutil --disable-validation. Podczas wykonywania tego polecenia podczas następnego rozruchu pojawia się monit o wyłączenie bezpiecznego rozruchu, dodanie klucza lub skrótu z dysku. Ponieważ nie chcę wyłączać bezpiecznego rozruchu, wydaje się, że to również nie rozwiązuje mojego problemu. Chcę również zachować UEFI aktywowany dla równoległej instalacji Windows.

Uwaga : jeśli nie masz nic przeciwko wyłączeniu bezpiecznego rozruchu, zobacz Dlaczego pojawia się komunikat „Wymagany klucz nie jest dostępny” podczas instalowania modułów jądra innych firm lub po aktualizacji jądra? zamiast.



Chociaż to pytanie jest duplikatem strony askubuntu.com/questions/762254/... , w tym pytaniu nie ma odpowiedzi udzielonej przez @Majal poniżej.
zwets


FWIW dla Googlersami: Ubuntu 18.04, instalacja aptitude install virtualbox virtualbox-dkms będzie znak moduł i poprosi o podanie hasła jednorazowego (?). Uruchom ponownie, wprowadź konfigurację MOK i zarejestruj klucz przy użyciu tego hasła.
Raphael

Odpowiedzi:


177

Od wersji jądra 4.4.0-20 wymuszono, że niepodpisane moduły jądra nie będą mogły działać przy włączonym Bezpiecznym rozruchu. Ponieważ chcesz zachować bezpieczny rozruch, następnym logicznym krokiem jest podpisanie tych modułów.

Więc spróbujmy.

  1. Utwórz klucze do podpisywania

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

    Opcja : dla dodatkowego bezpieczeństwa pomiń przełącznik -nodes, który poprosi o hasło. Następnie przed przejściem do następnego kroku upewnij się, żeexport KBUILD_SIGN_PIN='yourpassword'

  2. Podpisz moduł (vboxdrv w tym przykładzie, ale powtórz dla innych modułów w ls $(dirname $(modinfo -n vboxdrv))/vbox*.ko)celu uzyskania pełnej funkcjonalności)

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
    
  3. Potwierdź, że moduł jest podpisany

    tail $(modinfo -n vboxdrv) | grep "Module signature appended"
    
  4. Zarejestruj klucze do bezpiecznego rozruchu

    sudo mokutil --import MOK.der
    

    który poprosi o podanie hasła do potwierdzenia importu w następnym kroku.

  5. Uruchom ponownie i postępuj zgodnie z instrukcjami, aby zarejestrować MOK (klucz właściciela maszyny). Oto próbka ze zdjęciami. System uruchomi się ponownie.

  6. Potwierdź, że klucz jest zarejestrowany

    mokutil --test-key MOK.der
    

Jeśli VirtualBox nadal się nie ładuje, może to być spowodowane tym, że moduł nie załadował się ( sudo modprobe vboxdrvnaprawi to) lub że klucz nie jest podpisany. Po prostu powtórz ten krok i wszystko powinno działać dobrze.

Zasoby: Szczegółowy artykuł na stronie internetowej dotyczący implementacji podpisywania modułów przez Fedorę i Ubuntu . @zwets dla dodatkowego bezpieczeństwa . @shasha_trn za wzmiankę o wszystkich modułach .

Dodatkowy zasób: Utworzyłem skrypt bash na własny użytek za każdym razem, gdy przeprowadzana jest virtualbox-dkmsaktualizacja, i dlatego zastępuje podpisane moduły. Sprawdź mój vboxsign pierwotnie na GitHub .


7
Podpisałem również moduły vboxnetadp, vboxnetflt, vboxpci, aby mieć urządzenia sieciowe i przekazywać urządzenia pci na maszynach wirtualnych.
sasha_trn

4
Rozszerzając odpowiedź @ majal, musiałem wykonać, sudo apt install --reinstall virtualbox-dkmszanim wykonam podane instrukcje.
TylersSN,

1
@zwets czy mógłbyś ewentualnie opracować, jak prawidłowo ustawić KBUILD_SIGN_PINzmienną środowiskową? export KBUILD_SIGN_PIN=passworda export KBUILD_SIGN_PIN="password"przed krokiem 2 oba zakończyły sięSSL error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read: pem_pkey.c:117
adempewolff

3
@adempewolff Jeśli twoje hasło zawiera znaki, które twoja powłoka będzie interpretować (np. „$” w cudzysłowie), będziesz musiał zawrzeć je w apostrofach (').
zwets

1
@Majal Dziękujemy za odpowiedź! Wolę też podpisywać moduły zamiast wyłączać tę funkcję. Mogę dodać: (1) Dotyczy to również modułów VMware „vmmon” i „vmnet”, które dzielą ten sam los. (2) Dodając utworzone klucze, mądrze wybierz hasło. Podczas fazy ponownego uruchamiania i bezpiecznego rozruchu układ klawiatury może różnić się od ustawień regionalnych. (-> US-Layout)
one-mb

15

W moim systemie wykonałem następujące czynności, aby to działało:

Uruchom mokutil:

sudo mokutil --disable-validation

Następnie mokutil poprosił mnie o ustawienie hasła dla menedżera MOK. Po ponownym uruchomieniu komputera BIOS pokazał okno dialogowe do konfiguracji MOK Managera. Wyłączyłem SecureBoot w tym oknie dialogowym, poprosiłem o kilka znaków z hasła (tj. Wprowadź znak (5) itp.).

Po uruchomieniu poprawnie załadowane moduły vboxdrv.

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

Co ciekawe, mokutil nadal pokazuje, że SecureBoot jest włączony:

sudo mokutil --sb-state
SecureBoot enabled

9
Jak stwierdzono w moim pytaniu, chcę nadal używać bezpiecznego rozruchu. Wyłączenie bezpiecznego rozruchu nie rozwiązuje problemu.
Jans

2
Nie chciałem wyłączać bezpiecznego rozruchu, ale ostatecznie musiałem to zrobić, ponieważ nic innego nie działałoby - nie chcę ręcznie podpisywać rzeczy za każdym razem, gdy pojawia się aktualizacja jądra. Szkoda, że ​​to jedyne łatwe rozwiązanie do przodu. Btw, UEFI nadal twierdzi, że bezpieczny rozruch jest włączony. ¯_ (ツ) _ / ¯
jaywink

4

Możesz wyłączyć sprawdzanie poprawności przez

sudo apt install mokutil
sudo mokutil --disable-validation

Następnie pakiety DKMS powinny zostać zainstalowane.


2
Próbowałem także wykonać sudo mokutil --disable-validation. Podczas wykonywania tego polecenia podczas następnego rozruchu pojawia się monit o wyłączenie bezpiecznego rozruchu, dodanie klucza lub skrótu z dysku. Ponieważ nie chcę wyłączać bezpiecznego rozruchu, wydaje się, że to również nie rozwiązuje mojego problemu. Daj mi znać, jeśli nie zrozumiem tego polecenia.
Jans

2
Spróbuj wyłączyć bezpieczny rozruch. Możesz włączyć to z powrotem, jeśli to nie pomoże.
Pilot6

Próbowałem wyłączyć bezpieczny rozruch - ale nadal jest włączony :( (ubuntu 18.04)
xhudik

0

Po aktualizacji pojawił się błąd dotyczący vboxdrv. Ale wystąpił problem ze starą wersją (5.0.14) pakietu Oracle VM VirtualBox Extension Pack. Pobrałem i zainstalowałem nowszą wersję (5.0.18) tego pakietu i problem zniknął.


Hej, mógłbyś rozwinąć? Skąd go pobrałeś? Plik PPA lub deb?
Karthik Nishanth

1
Pobrałem pakiet rozszerzeń z plików do pobrania na stronie VirtualBox , link to „VirtualBox 5.0.18 Oracle VM VirtualBox Extension Pack -> Wszystkie obsługiwane platformy ”. Następnie otworzyłem Plik> Preferencje w Virtual VM Manager Oracle VM, wybrałem „Rozszerzenia” i dodałem pobrany plik do listy. Zastąpił starą wersję „Oracle VM VirtualBox Extension Pack” (wcześniej 5.0.14rxxxxxx).
Reling

1
Pakiet rozszerzeń nie usuwa błędu. Błąd dotyczy podpisania modułu
Karthik Nishanth,

Nie dotyczy to mojego problemu.
Jans

1
Nie ma to związku z problemem PO. Komunikat o błędzie „Wymagany klucz niedostępny” wskazuje, że przyczyną problemu jest niepodpisany moduł jądra na platformie obsługującej bezpieczny rozruch. Żadna aktualizacja VirtualBox nie może tego naprawić, chyba że zawiera moduł podpisany przy użyciu klucza zaufanego przez jądro. Tj. Canonical musi to podpisać, albo Oracle musi to podpisać, a jego klucz publiczny musi zostać dodany do zaufanych kluczy jądra (lub platformy).
zwets

0

W porządku, więc po kilku testach jestem pewien, że jest to problem z bezpiecznym uruchomieniem.

Jak w przypadku, gdy jest włączony, jest to zgłaszane:

OSTRZEŻENIE: Moduł jądra vboxdrv nie jest załadowany. Albo nie ma dostępnego modułu dla bieżącego jądra (4.4.0-21-ogólny), albo nie można go załadować. Proszę ponownie skompilować moduł jądra i zainstalować go przez konfigurację sudo / sbin / rcvboxdrv

Jednak jeśli bezpieczny rozruch jest wyłączony, virtualbox ładuje się dobrze bez żadnych błędów.

Nadal mam ustawiony bios jako UEFI.


3
Jak stwierdzono w moim pytaniu, chcę nadal używać bezpiecznego rozruchu. Wyłączenie bezpiecznego rozruchu nie rozwiązuje problemu.
Jans

0

Miałem dzisiaj ten sam problem, miałem Windows 10 i Ubuntu 15.10 na podwójnym rozruchu z uefi włączonym na Bios (nie wyłączyłem go, aby móc uruchomić wstępnie zainstalowany system Windows).

Po aktualizacji do Ubuntu 16.04 VirtualBox przestał ładować moje maszyny wirtualne z tym samym komunikatem o błędzie:

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

Podejrzewałem problem z interfejsem UEFI, ponieważ podczas aktualizacji instalator zapytał mnie, czy chcę go wyłączyć, na co odpowiedziałem Nie (ponieważ Tak może sprawić, że mój system Windows będzie bezużyteczny).

To, co zrobiłem, to przejście do Bios i włączenie obsługi starszego rozruchu BIOS-u BEZ wyłączenia bezpiecznego rozruchu.

Virtualbox działa teraz dobrze.

Aktualizacja : Jak słusznie wskazano @zwets w komentarzu, włączenie starszych modułów powoduje wyłączenie bezpiecznego rozruchu.


2
Właściwie potrzebuję również UEFI, aby uruchomić równoległą instalację systemu Windows. Dlatego wyłączenie tej opcji również nie jest dla mnie możliwe. Zaktualizowałem odpowiednio moje pytanie.
Jans

Czy włączyłeś obsługę starszych modułów BIOS? To kolejna opcja w biosie UEFI, inna niż bezpieczny rozruch.
Zeine77

1
@ Zeine77 czy możesz sprawdzić, czy BIOS pozwala na włączenie „starszych modułów”, podczas gdy Bezpieczny rozruch pozostaje włączony ? Jest to bardzo mało prawdopodobne, ponieważ pierwsza opcja pozwala na uruchamianie niezaufanego kodu w przestrzeni jądra, co przeczy celowi drugiej.
zwets

@zwet masz rację, właśnie sprawdziłem ustawienia bios; a włączenie starszych modułów spowodowało wyłączenie bezpiecznego rozruchu. Przyjąłem, jak wyjaśniono w odpowiedzi, że wyłączenie bezpiecznego rozruchu spowoduje niepowodzenie rozruchu systemu Windows 10, tak nie jest. Kiedy pierwszy raz zainstalowałem 15.10 (kilka miesięcy temu), zadbałem o to, aby nie wyłączyć bezpiecznego rozruchu, ponieważ mogłoby to uszkodzić instalację Win 10. Czy to oznacza, że ​​wstępnie zainstalowany Win 10 działa dobrze przy wyłączonym trybie bezpiecznym?
Zeine77
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.