Tidak dapat memuat 'vboxdrv' setelah memutakhirkan ke Ubuntu 16.04 (dan saya ingin menjaga boot aman)

130

Saya memutakhirkan dari Ubuntu 15.10 ke 16.04 dan sejak itu VirtualBox 5.0.18 tidak memulai VM saya lagi. Ia mengeluh bahwa 'vboxdrv' tidak dimuat. Jadi saya mencoba memuatnya dan mendapatkan kesalahan berikut:

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

Saya percaya ini terkait dengan boot aman yang saya gunakan dan yang ingin saya terus gunakan. Sebenarnya dengan Ubuntu 15.10 boot aman dan VirtualBox berfungsi dengan baik.

Saya juga mencoba $ sudo apt-get --reinstall install virtualbox-dkmsyang berhasil membangun modul kernel tetapi tidak menyelesaikan masalah ini.

Adakah yang tahu bagaimana cara mendapatkan vboxdrv sambil tetap mengaktifkan boot aman?

Pembaruan 2 : Saya juga mencoba menjalankan sudo mokutil --disable-validation. Saat menjalankan perintah ini, selama boot berikutnya saya diminta untuk menonaktifkan boot aman, tambahkan kunci atau hash dari disk. Karena saya tidak ingin menonaktifkan boot aman, sepertinya ini juga tidak menyelesaikan masalah saya. Saya juga ingin mengaktifkan UEFI untuk instalasi Windows paralel.

Catatan : Jika Anda tidak keberatan menonaktifkan boot aman, lihat Mengapa saya mendapatkan "kunci yang diperlukan tidak tersedia" ketika menginstal modul kernel pihak ke-3 atau setelah upgrade kernel? sebagai gantinya.

jans
sumber
Meskipun pertanyaan ini merupakan duplikat dari askubuntu.com/questions/762254/… , pertanyaan itu tidak menampilkan jawaban yang diberikan oleh @Majal di bawah ini.
zwets
1
Panduan langkah demi langkah: stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail
Dušan Maďar
FWIW, untuk googler: dengan Ubuntu 18.04, menginstal aptitude install virtualbox virtualbox-dkms akan menandatangani modul dan meminta Anda kata sandi satu kali (?). Mulai ulang, masukkan konfigurasi MOK dan daftarkan kunci menggunakan kata sandi itu.
Raphael

Jawaban:

177

Sejak kernel versi 4.4.0-20, diberlakukan bahwa modul kernel yang tidak ditandatangani tidak akan diizinkan berjalan dengan Secure Boot diaktifkan. Karena Anda ingin menjaga Boot Aman, maka langkah logis berikutnya adalah menandatangani modul-modul tersebut.

Jadi mari kita coba.

  1. Buat kunci penandatanganan

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

    Opsi : untuk keamanan tambahan, lewati sakelar -node, yang akan meminta kata sandi. Kemudian sebelum melanjutkan ke langkah berikutnya, pastikan untuk melakukannyaexport KBUILD_SIGN_PIN='yourpassword'

  2. Masuk modul (vboxdrv untuk contoh ini, tetapi ulangi untuk modul lain ls $(dirname $(modinfo -n vboxdrv))/vbox*.ko)untuk fungsionalitas penuh)

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

    tail $(modinfo -n vboxdrv) | grep "Module signature appended"
    
  4. Daftarkan tombol-tombol tersebut ke Secure Boot

    sudo mokutil --import MOK.der
    

    yang akan meminta kata sandi untuk digunakan untuk mengonfirmasi impor di langkah berikutnya.

  5. Nyalakan ulang dan ikuti instruksi untuk Mendaftar MOK (Kunci Pemilik Mesin). Ini contoh dengan gambar. Sistem akan reboot sekali lagi.

  6. Konfirmasikan kunci terdaftar

    mokutil --test-key MOK.der
    

Jika VirtualBox masih tidak memuat, itu mungkin karena modul tidak memuat ( sudo modprobe vboxdrvakan memperbaikinya) atau bahwa kunci tidak ditandatangani. Cukup ulangi langkah itu dan semuanya akan bekerja dengan baik.

Sumber: Artikel situs web terperinci untuk implementasi modul penandatanganan Fedora dan Ubuntu . @zwets untuk keamanan tambahan . @shasha_trn untuk menyebutkan semua modul .

Sumber daya tambahan: Saya membuat skrip bash untuk saya gunakan setiap kali virtualbox-dkmsmeningkatkan dan dengan demikian menimpa modul yang ditandatangani. Lihat vboxsign saya awalnya di GitHub .

Majal
sumber
7
Saya juga menandatangani vboxnetadp, vboxnetflt, modul vboxpci untuk memiliki jaringan dan melewatkan perangkat pci di mesin virtual.
sasha_trn
4
Memperluas jawaban @ majal, saya harus mengeksekusi sudo apt install --reinstall virtualbox-dkmssebelum mengikuti instruksi yang diberikan.
TylersSN
1
@ zwets, bisakah Anda menguraikan cara mengatur KBUILD_SIGN_PINvariabel lingkungan dengan benar ? export KBUILD_SIGN_PIN=passworddan export KBUILD_SIGN_PIN="password"sebelum langkah 2 keduanya menghasilkanSSL error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read: pem_pkey.c:117
adempewolff
3
@adempewolff Jika kata sandi Anda berisi karakter yang akan ditafsirkan oleh shell Anda (mis. '$' dalam string yang dikutip), Anda harus melampirkannya dalam tanda kutip (').
zwets
1
@Majal Terima kasih atas jawaban Anda! Saya juga lebih suka menandatangani modul daripada menonaktifkan fitur. Saya dapat menambahkan: (1) Ini juga berlaku untuk modul VMware "vmmon" dan "vmnet", yang memiliki nasib yang sama. (2) Saat menambahkan kunci yang Anda buat, pilih kata sandi Anda dengan bijak. Selama fase pendaftaran booting ulang dan boot aman, tata letak keyboard Anda mungkin berbeda dari pengaturan lokal Anda. (-> US-Layout)
one-mb
15

Pada sistem saya, saya melakukan yang berikut untuk membuatnya berfungsi:

Jalankan mokutil:

sudo mokutil --disable-validation

Kemudian mokutil meminta saya untuk mengatur kata sandi untuk Manajer MOK. Setelah reboot PC BIOS menunjukkan dialog untuk mengkonfigurasi MOK Manager. Saya menonaktifkan SecureBoot dari dialog ini, ia meminta beberapa karakter dari kata sandi (mis. Masukkan karakter (5), dll).

Setelah mem-boot modul vboxdrv dimuat dengan benar.

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

Anehnya, mokutil masih menunjukkan SecureBoot diaktifkan:

sudo mokutil --sb-state
SecureBoot enabled
Pocho
sumber
9
Seperti yang dinyatakan dalam pertanyaan saya, saya ingin terus menggunakan boot aman. Jadi menonaktifkan boot aman tidak menyelesaikan masalah.
jans
2
Tidak ingin menonaktifkan boot aman tetapi pada akhirnya harus melakukan ini karena tidak ada lagi yang akan berhasil - tidak ingin mulai menandatangani hal-hal secara manual setiap kali pembaruan kernel datang. Sayangnya ini adalah satu-satunya solusi mudah ke depan. Btw, UEFI masih mengatakan boot aman diaktifkan. ¯_ (ツ) _ / ¯
jaywink
4

Anda dapat menonaktifkan pemeriksaan validasi dengan

sudo apt install mokutil
sudo mokutil --disable-validation

Setelah itu paket DKMS harus diinstal.

Pilot6
sumber
2
Saya juga mencoba menjalankan sudo mokutil --disable-validation. Saat menjalankan perintah ini, selama boot berikutnya saya diminta untuk menonaktifkan boot aman, tambahkan kunci atau hash dari disk. Karena saya tidak ingin menonaktifkan boot aman, sepertinya ini juga tidak menyelesaikan masalah saya. Tolong beri tahu saya jika saya salah memahami perintah ini.
jans
2
Cobalah untuk menonaktifkan boot aman. Anda dapat mengaktifkannya kembali, jika itu tidak membantu.
Pilot6
Saya mencoba untuk menonaktifkan boot aman - tetapi masih diaktifkan :( (ubuntu 18.04)
xhudik
0

Saya mendapat kesalahan tentang vboxdrv setelah peningkatan juga. Tetapi ada masalah dengan versi lama (5.0.14) dari Paket Ekstensi Oracle VM VirtualBox. Saya mengunduh dan menginstal versi yang lebih baru (5.0.18) dari paket ini dan masalah hilang.

Berhubungan
sumber
Hei, bisakah Anda menjelaskan? Dari mana Anda mengunduhnya? File PPA atau deb?
Karthik Nishanth
1
Saya mengunduh paket Ekstensi dari unduhan di situs VirtualBox , tautannya adalah "VirtualBox 5.0.18 Oracle VM Paket VirtualBox -> Semua platform yang didukung ". Kemudian saya membuka File> Preferensi pada Oracle VM Virtual Box Manager, memilih "Extensions", dan menambahkan file yang diunduh ke daftar. Itu menggantikan versi lama "Oracle VM VirtualBox Extension Pack" (adalah 5.0.14rxxxxxx).
Reling
1
Paket ekstensi tidak memperbaiki kesalahan. Kesalahannya adalah tentang menandatangani modul
Karthik Nishanth
Ini tidak berlaku untuk masalah saya.
jans
1
Ini tidak terkait dengan masalah OP. Pesan kesalahan "Kunci yang diperlukan tidak tersedia" menunjukkan bahwa masalah ini disebabkan oleh modul kernel yang tidak ditandatangani pada platform yang mengaktifkan Boot Aman. Tidak ada pembaruan VirtualBox yang dapat memperbaikinya kecuali ini menyertakan modul yang ditandatangani menggunakan kunci yang dipercaya oleh kernel. Yaitu Canonical harus menandatanganinya, atau Oracle harus menandatanganinya dan kunci publiknya harus ditambahkan ke kunci tepercaya kernel (atau platform Anda).
zwets
0

Baiklah jadi setelah sedikit pengujian saya cukup yakin ini adalah masalah boot yang aman.

Seperti jika diaktifkan maka ini dilemparkan:

PERINGATAN: Modul kernel vboxdrv tidak dimuat. Entah tidak ada modul yang tersedia untuk kernel saat ini (4.4.0-21-generik) atau gagal memuat. Harap kompilasi ulang modul kernel dan instal dengan pengaturan sudo / sbin / rcvboxdrv

Namun jika boot aman dinonaktifkan maka virtualbox dimuat dengan baik tanpa kesalahan.

Saya masih menetapkan BIOS sebagai UEFI.

David Haynes
sumber
3
Seperti yang dinyatakan dalam pertanyaan saya, saya ingin terus menggunakan boot aman. Jadi menonaktifkan boot aman tidak menyelesaikan masalah.
jans
0

Saya memiliki masalah yang sama hari ini, saya memiliki Windows 10 dan Ubuntu 15.10 pada dual boot dengan uefi diaktifkan pada Bios (saya tidak menonaktifkannya sehingga saya dapat menjalankan Windows yang sudah diinstal sebelumnya).

Setelah memutakhirkan ke Ubuntu 16.04 VirtualBox berhenti memuat VMs saya dengan pesan kesalahan yang sama:

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

Saya menduga masalah UEFI karena ketika memutakhirkan penginstal bertanya apakah saya ingin menonaktifkannya, yang saya jawab Tidak (Karena Ya dapat membuat Windows saya tidak dapat digunakan).

Apa yang saya lakukan adalah pergi ke Bios dan mengaktifkan dukungan untuk boot BIOS lama TANPA menonaktifkan boot aman.

Virtualbox berfungsi dengan baik sekarang.

Pembaruan : Sebagaimana @zwets menunjuk dengan benar di komentar, mengaktifkan modul lawas menyebabkan boot aman dinonaktifkan.

Zeine77
sumber
2
Sebenarnya saya juga perlu UEFI untuk mem-boot instalasi Windows paralel. Jadi menonaktifkannya juga bukan pilihan bagi saya. Saya memperbarui pertanyaan saya sesuai.
jans
Sudahkah Anda mengaktifkan Dukungan untuk modul BIOS lawas? Ini adalah opsi lain di UEFI bios, berbeda dari boot aman.
Zeine77
1
@ Zeine77 dapatkah Anda memverifikasi bahwa BIOS Anda memungkinkan mengaktifkan "legacy modules" sementara Secure Boot tetap diaktifkan ? Ini sangat tidak mungkin, karena opsi pertama memungkinkan kode yang tidak dipercaya dijalankan di ruang kernel, yang mengalahkan tujuan yang kedua.
zwets
@ zwets Anda benar, saya baru saja memeriksa pengaturan bios saya; dan mengaktifkan modul legacy menyebabkan boot aman dinonaktifkan. Saya berasumsi, seperti yang dijelaskan dalam respons, bahwa menonaktifkan boot aman akan menyebabkan boot Windows 10 gagal, ini bukan masalahnya. Ketika saya pertama kali menginstal 15.10 (Bulan lalu) saya berhati-hati untuk tidak menonaktifkan boot aman karena ini akan merusak instalasi Win 10. Apakah ini berarti bahwa pra-instal Win 10 berfungsi dengan baik dengan mode aman dinonaktifkan?
Zeine77