Pokud jste někdy instalovali jeden z výše uvedených nástrojů pro správu virtuálních počítačů, pak jste určitě narazili na problémy u systémů s technologií SecureBoot. Proč k potížím dochází a jak tyto nástroje správně nainstalovat, aniž by bylo potřeba SecureBoot vypínat?

SecureBoot

Na úvod aspoň stručně popíši, co má SecureBoot za úkol a proč působí problémy právě s virtualizačními nástroji jako jsou VirtualBox a VMware. SecureBoot je technologie, která kontroluje zavaděč operačního systému. Než SecureBoot spolu s UEFI přišel, tak mohl teoreticky jakýkoliv malware pozměnit zavaděč operačního systému a napadnout jej tak přímo během procesu bootování a ve výsledku se tak stát neodstranitelným z prostředí zavedeného systému. SecureBoot zajistí, že zavaděč bude podepsaný důvěryhodným certifikátem, jinak nebude systém spuštěn.

Proč mají právě oblíbené virtualizační nástroje se SecureBoot problém? Jak VirtualBox, tak i VMware pro svoji funkčnost potřebují zavést moduly do jádra. Potíž je však v tom, že na systémech s aktivním SecureBoot musejí být všechny zaváděné jaderné moduly podepsané.

vbox
VirtualBox na systému se SecureBoot

Vytvoření certifikátu a podpis modulů

Než vůbec půjde moduly podepsat musíme vytvořit certifikát X.509:

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

Nyní můžeme .der soubor naimportovat pomocí nástroje mokutil:

sudo mokutil --import MOK.der

Po spuštění příkazu musíte zadat heslo, které bude potřeba pro dokončení importu z prostředí UEFI. Import certifikátu dokončíme až za chvíli, nyní ještě před restartem podepíšeme moduly VirtualBoxu, případně VMware, aby se už po restartu spustily správně jejich služby.

VirtualBox

Od VirtualBoxu 5.0.6 je potřeba podepsat modulů více a před začátkem je zkompilovat:

sudo /sbin/rcvboxdrv setup
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxnetadp)
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxnetflt)
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxpci)

U starších verzí stačilo podepsat jediný modul:

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

VMware

Před začátkem sestavíte moduly:

sudo vmware-modconfig --console --install-all

a poté je podepíšete pomocí:

sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)

Screenshot_kvm-rawhide-64-uefi-1_2014-02-27_14_00_13_cropPrůvodce importem .der souboru v prostředí UEFI


Počítač nyní restartujte a měl by se zobrazit průvodce importem podobný tomu na obrázku výše. V opačném případě zkuste místo GRUBu nabootovat shim.efi . V průvodci zvolte možnost Enroll MOK, Continue a ještě jednou volbu potvrďte vybráním Yes. Nyní musíte zadat heslo, které jste v během importu .der souboru před restartem nastavili. Poté už normálně naběhne systém a funkčnost můžete ověřit jak spuštěním virtualizačního nástroje, tak příkazem dmesg | grep 'EFI: Loaded cert' , v jehož výstupu by nyní měl být řádek podobný tomuto:

[ 1.043867] EFI: Loaded cert 'Fedora Secure Boot CA: fde32599c2d61db1bf5807335d7b20e4cd963b42' linked to '.system_keyring'

Aktualizace jádra

Nyní jen musíte dávat pozor během aktualizací systému (přesněji balíku kernel). Poté totiž budete muset moduly podepsat znovu. Není už potřeba vytvářet certifikát, importovat jej atd. Jen spusťte virtualizační nástroj, nechte jej zkompilovat potřebné moduly a pak už jen zopakuje podepisování. Počítač poté restartujte, případně ručně nastartujte patřičnou službu:

sudo systemctl start vmware # Pro VMware

Pro VirtualBox prvně sestavte moduly

sudo /sbin/rcvboxdrv setup

poté je podepište pomocí příkazů uvedených výše a načtěte:

sudo /sbin/rcvboxdrv start