ไม่สามารถโหลด 'vboxdrv' หลังจากอัปเกรดเป็น Ubuntu 16.04 (และฉันต้องการให้บูตอย่างปลอดภัย)


130

ฉันอัพเกรดจาก Ubuntu 15.10 เป็น 16.04 และตั้งแต่นั้นมา VirtualBox 5.0.18 จะไม่เริ่มต้น VMs ของฉันอีกต่อไป มันบ่นว่า 'vboxdrv' ไม่ได้โหลด ดังนั้นฉันพยายามโหลดและรับข้อผิดพลาดต่อไปนี้:

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

ฉันเชื่อว่ามันเกี่ยวข้องกับการบูตที่ปลอดภัยซึ่งฉันใช้และที่ฉันต้องการใช้ต่อไป จริงๆแล้วกับ Ubuntu 15.10 boot ที่ปลอดภัยและ VirtualBox ก็ใช้งานได้ดี

นอกจากนี้ฉันพยายาม$ sudo apt-get --reinstall install virtualbox-dkmsที่สร้างโมดูลเคอร์เนลสำเร็จ แต่ไม่ได้แก้ปัญหานี้

มีความคิดวิธีการโหลด vboxdrv ขณะที่เปิดใช้งานการบูตอย่างปลอดภัยหรือไม่

อัพเดท 2 : sudo mokutil --disable-validationนอกจากนี้ผมพยายามดำเนินการ เมื่อดำเนินการคำสั่งนี้ในระหว่างการบู๊ตครั้งต่อไปฉันได้รับแจ้งให้ปิดการใช้งานการบูทอย่างปลอดภัยเพิ่มคีย์หรือแฮชจากดิสก์ เนื่องจากฉันไม่ต้องการปิดใช้งานการบูตที่ปลอดภัยดูเหมือนว่านี่จะไม่ช่วยแก้ปัญหาของฉันเช่นกัน นอกจากนี้ฉันต้องการให้ UEFI เปิดใช้งานสำหรับการติดตั้ง Windows แบบขนาน

หมายเหตุ : หากคุณไม่รังเกียจที่จะปิดการใช้งานการบูตอย่างปลอดภัยโปรดดูเหตุใดฉันจึงได้รับ "คีย์ที่ต้องการไม่พร้อมใช้งาน" เมื่อติดตั้งโมดูลเคอร์เนลบุคคลที่สามหรือหลังจากการอัพเกรดเคอร์เนล แทน.



แม้ว่าคำถามนี้จะเป็นคำถามซ้ำซ้อนกับaskubuntu.com/questions/762254/ …คำถามนั้นไม่ได้มีคำตอบที่ @Majal ให้มาด้านล่าง
zwets

1
คู่มือทีละขั้นตอน: stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail
DušanMaďar

FWIW สำหรับผู้ใช้ Google: ด้วย Ubuntu 18.04 การติดตั้งaptitude install virtualbox virtualbox-dkms จะลงนามในโมดูลและขอรหัสผ่าน (?) แบบใช้ครั้งเดียว รีบูตใส่ MOK config และลงทะเบียนรหัสโดยใช้รหัสผ่านนั้น
กราฟิลส์

คำตอบ:


177

ตั้งแต่เคอร์เนลเวอร์ชัน 4.4.0-20 จะมีการบังคับใช้ว่าโมดูลเคอร์เนลที่ไม่ได้ลงชื่อจะไม่ได้รับอนุญาตให้เรียกใช้เมื่อเปิดใช้งาน Secure Boot เนื่องจากคุณต้องการเก็บ Secure Boot ไว้ดังนั้นขั้นตอนต่อไปคือการเซ็นชื่อโมดูลเหล่านั้น

ลองทำดู

  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. ลงทะเบียนคีย์เพื่อ Secure Boot

    sudo mokutil --import MOK.der
    

    ซึ่งจะขอรหัสผ่านเพื่อใช้ยืนยันการนำเข้าในขั้นตอนต่อไป

  5. รีบูตและทำตามคำแนะนำในการลงทะเบียน MOK (รหัสเจ้าของเครื่อง) นี่คือตัวอย่างที่มีรูปภาพ ระบบจะรีบูตอีกครั้ง

  6. ยืนยันการลงทะเบียนกุญแจ

    mokutil --test-key MOK.der
    

หาก VirtualBox ยังไม่โหลดอาจเป็นเพราะโมดูลไม่โหลด ( sudo modprobe vboxdrvจะแก้ไขได้) หรือว่าคีย์ไม่ได้ลงชื่อ เพียงทำซ้ำขั้นตอนนั้นและทุกอย่างจะทำงานได้ดี

ทรัพยากร: บทความเว็บไซต์โดยละเอียดสำหรับการใช้งานFedoraและUbuntuของการเซ็นชื่อโมดูล @zwets สำหรับการรักษาความปลอดภัยเพิ่มเติม @shasha_trn สำหรับการพูดถึงโมดูลทั้งหมด

ทรัพยากรเพิ่มเติม:ฉันสร้างสคริปต์ทุบตีเพื่อการใช้งานของตัวเองทุกครั้งที่virtualbox-dkmsอัพเกรดและดังนั้นจึงเขียนทับโมดูลที่เซ็นชื่อ ตรวจสอบของฉันvboxsign เดิมบน GitHub


7
ฉันยังเซ็นชื่อโมดูล vboxnetadp, vboxnetflt, vboxpci เพื่อให้มีเครือข่ายและส่งผ่านอุปกรณ์ pci ในเครื่องเสมือน
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 หากรหัสผ่านของคุณมีอักขระที่เชลล์ของคุณจะตีความ (เช่น '$' ในสตริงที่ยกมา) คุณจะต้องใส่มันไว้ใน apostrophes (')
zwets

1
@ Majal ขอบคุณสำหรับคำตอบของคุณ! ฉันชอบที่จะเซ็นชื่อโมดูลแทนการปิดใช้งานคุณลักษณะนี้ ฉันสามารถเพิ่ม: (1) สิ่งนี้ยังใช้กับโมดูล VMware "vmmon" และ "vmnet" ซึ่งใช้ชะตาเดียวกัน (2) ในขณะที่เพิ่มคีย์ที่คุณสร้างให้เลือกรหัสผ่านอย่างชาญฉลาด ระหว่างขั้นตอนการรีบูตและการรักษาความปลอดภัยการบูตรูปแบบแป้นพิมพ์ของคุณอาจแตกต่างจากการตั้งค่าตำแหน่งที่ตั้งของคุณ (-> US-Layout)
one-mb

15

ในระบบของฉันฉันได้ทำสิ่งต่อไปนี้เพื่อให้มันทำงานได้:

เรียกใช้ mokutil:

sudo mokutil --disable-validation

จากนั้น mokutil ขอให้ฉันตั้งรหัสผ่านสำหรับ MOK Manager หลังจากรีบู๊ตพีซี BIOS จะแสดงกล่องโต้ตอบเพื่อกำหนดค่า MOK Manager ฉันปิดการใช้งาน SecureBoot จากกล่องโต้ตอบนี้จะถามตัวละครหลายตัวจากรหัสผ่าน (เช่นป้อนตัวอักษร (5) ฯลฯ )

หลังจากบูทโมดูล vboxdrv ที่โหลดอย่างถูกต้อง

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

อยากรู้อยากเห็น mokutil ยังคงแสดง SecureBoot เปิดใช้งาน:

sudo mokutil --sb-state
SecureBoot enabled

9
ตามที่ระบุในคำถามของฉันฉันต้องการใช้การบูตที่ปลอดภัยต่อไป ดังนั้นการปิดใช้งานการบูตที่ปลอดภัยไม่สามารถแก้ปัญหาได้
jans

2
ไม่ต้องการปิดการใช้งานการบูตที่ปลอดภัย แต่ในที่สุดก็ต้องทำเช่นนี้เพราะไม่มีอะไรจะใช้งานได้ - ไม่ต้องการเริ่มการลงชื่อด้วยตนเองทุกครั้งที่มีการอัปเดตเคอร์เนลมา .. สงสารนี่เป็นทางออกเดียวที่ง่าย Btw, UEFI ยังคงเปิดใช้งานการบูตที่ปลอดภัย ¯_ (ツ) _ / ¯
jaywink

4

คุณสามารถปิดการใช้งานการตรวจสอบการตรวจสอบโดย

sudo apt install mokutil
sudo mokutil --disable-validation

หลังจากนั้นแพ็คเกจ DKMS นั้นควรติดตั้ง


2
นอกจากนี้ฉันพยายามดำเนินการ sudo mokutil - ตรวจสอบได้ปิดการใช้งาน เมื่อดำเนินการคำสั่งนี้ในระหว่างการบู๊ตครั้งต่อไปฉันได้รับแจ้งให้ปิดการใช้งานการบูทอย่างปลอดภัยเพิ่มคีย์หรือแฮชจากดิสก์ เนื่องจากฉันไม่ต้องการปิดใช้งานการบูตที่ปลอดภัยดูเหมือนว่านี่จะไม่ช่วยแก้ปัญหาของฉันเช่นกัน โปรดแจ้งให้เราทราบในกรณีที่ฉันเข้าใจผิดกับคำสั่งนี้
jans

2
ลองปิดการใช้งานการบูตที่ปลอดภัย คุณสามารถเปิดใช้งานได้หากไม่ได้ผล
Pilot6

ฉันพยายามที่จะปิดการใช้งานการบูตที่ปลอดภัย - แต่มันยังคงเปิดใช้งาน :( (อูบุนตู 18.04)
xhudik

0

ฉันมีข้อผิดพลาดเกี่ยวกับ vboxdrv หลังจากอัปเกรดด้วย แต่มีปัญหากับ Oracle VM VirtualBox Extension Pack เวอร์ชันเก่า (5.0.14) ฉันดาวน์โหลดและติดตั้งรุ่นที่ใหม่กว่า (5.0.18) ของชุดนี้และปัญหาหายไป


เฮ้คุณช่วยอธิบายเพิ่มเติมได้ไหม? คุณดาวน์โหลดจากที่ไหน PPA หรือไฟล์ deb
Karthik Nishanth

1
ฉันดาวน์โหลด Extension pack จากการดาวน์โหลดบนเว็บไซต์ VirtualBoxลิงก์คือ "VirtualBox 5.0.18 Oracle VM VirtualBox Extension Pack -> แพลตฟอร์มที่รองรับทั้งหมด " จากนั้นฉันก็เปิดไฟล์> การกำหนดค่าตามความชอบบน Oracle VM Virtual Box Manager เลือก "ส่วนขยาย" และเพิ่มไฟล์ที่ดาวน์โหลดลงในรายการ มันแทนที่รุ่นเก่าของ "Oracle VM VirtualBox Extension Pack" (คือ 5.0.14rxxxxxx)
สัมพันธ์

1
แพ็คส่วนขยายไม่ได้แก้ไขข้อผิดพลาด ข้อผิดพลาดเกี่ยวกับการเซ็นชื่อโมดูล
Karthik Nishanth

สิ่งนี้ใช้ไม่ได้กับปัญหาของฉัน
jans

1
สิ่งนี้ไม่เกี่ยวข้องกับปัญหาของ OP ข้อความแสดงข้อผิดพลาด "ไม่ต้องใช้คีย์ที่จำเป็น" แสดงว่าปัญหาเกิดจากโมดูลเคอร์เนลที่ไม่ได้ลงชื่อบนแพลตฟอร์มที่เปิดใช้งานการบูตปลอดภัย ไม่มีการปรับปรุง VirtualBox สามารถแก้ไขได้ยกเว้นว่ามีโมดูลที่เซ็นชื่อโดยใช้คีย์ที่เคอร์เนลเชื่อถือได้ นั่นคือ Canonical ต้องลงชื่อหรือ Oracle ต้องเซ็นชื่อและจะต้องเพิ่มรหัสสาธารณะในคีย์ที่เชื่อถือได้ของเคอร์เนล (หรือแพลตฟอร์มของคุณ)
zwets

0

เอาล่ะหลังจากการทดสอบเล็กน้อยฉันค่อนข้างแน่ใจว่านี่เป็นปัญหาการบูตที่ปลอดภัย

ราวกับว่ามันเปิดใช้งานอยู่แล้วสิ่งนี้จะถูกโยน:

คำเตือน: โมดูลเคอร์เนล vboxdrv ไม่ได้ถูกโหลด อาจไม่มีโมดูลสำหรับเคอร์เนลปัจจุบัน (4.4.0-21-generic) หรือไม่สามารถโหลดได้ กรุณาคอมไพล์โมดูลเคอร์เนลอีกครั้งและติดตั้งโดยการตั้งค่า sudo / sbin / rcvboxdrv

อย่างไรก็ตามหากปิดใช้งานการบูตที่ปลอดภัยแล้ว Virtualbox ก็ใช้ได้โดยไม่มีข้อผิดพลาด

ฉันยังตั้งค่าประวัติของฉันเป็น UEFI


3
ตามที่ระบุในคำถามของฉันฉันต้องการใช้การบูตที่ปลอดภัยต่อไป ดังนั้นการปิดใช้งานการบูตที่ปลอดภัยไม่สามารถแก้ปัญหาได้
jans

0

ฉันมีปัญหาเดียวกันวันนี้ฉันมี Windows 10 และ Ubuntu 15.10 ในการบูทคู่โดยเปิดใช้งาน uefi บน Bios (ฉันไม่ได้ปิดการใช้งานดังนั้นฉันจึงสามารถเรียกใช้ Windows ที่ติดตั้งไว้ล่วงหน้า)

หลังจากอัปเกรดเป็น Ubuntu 16.04 VirtualBox หยุดโหลด VMs ของฉันด้วยข้อผิดพลาดเดียวกัน:

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

ฉันสงสัยว่าปัญหา UEFI เพราะขณะอัปเกรดตัวติดตั้งถามฉันว่าฉันต้องการปิดการใช้งานหรือไม่ซึ่งฉันตอบว่าไม่ (เพราะใช่อาจทำให้ Windows ของฉันใช้งานไม่ได้)

สิ่งที่ฉันทำคือไปที่ Bios และเปิดใช้งานการรองรับการบู๊ต BIOS ดั้งเดิมโดยไม่ต้องปิดการใช้งานการบูตที่ปลอดภัย

Virtualbox ใช้งานได้ดีในขณะนี้

อัปเดต : เนื่องจาก @zwets ชี้ไปที่ความคิดเห็นอย่างถูกต้องการเปิดใช้งานโมดูลแบบดั้งเดิมทำให้การปิดใช้งานการบูตที่ปลอดภัยถูกปิดใช้งาน


2
ที่จริงฉันต้องการ UEFI ในการบูตการติดตั้ง Windows แบบขนาน ดังนั้นการปิดใช้งานไม่ใช่ตัวเลือกสำหรับฉันเช่นกัน ฉันปรับปรุงคำถามของฉันตาม
jans

คุณเปิดใช้งานการสนับสนุนสำหรับโมดูล BIOS รุ่นเก่าหรือไม่ นี่เป็นอีกตัวเลือกหนึ่งในประวัติ UEFI ซึ่งแตกต่างจากการบูทที่ปลอดภัย
Zeine77

1
@ Zeine77 คุณสามารถตรวจสอบว่า BIOS ของคุณอนุญาตให้เปิดใช้งาน "โมดูลดั้งเดิม" ในขณะที่ Secure Boot ยังคงเปิดใช้งานอยู่หรือไม่ นี่เป็นเรื่องที่ไม่น่าเป็นไปได้อย่างมากเนื่องจากตัวเลือกแรกอนุญาตให้ใช้รหัสที่ไม่น่าเชื่อถือเพื่อทำงานในพื้นที่เคอร์เนลซึ่งเอาชนะวัตถุประสงค์ที่สอง
zwets

@zwets คุณพูดถูกฉันเพิ่งตรวจสอบการตั้งค่าไบออส และการเปิดใช้งานโมดูลแบบดั้งเดิมทำให้การปิดใช้งานการบู๊ตอย่างปลอดภัย ฉันสันนิษฐานตามที่อธิบายในการตอบสนองว่าการปิดใช้งานการบูตที่ปลอดภัยจะทำให้การบูต Windows 10 ล้มเหลวนี่ไม่ใช่กรณี เมื่อฉันติดตั้งครั้งแรก 15.10 (เดือนที่แล้ว) ฉันระมัดระวังที่จะไม่ปิดใช้งานการบูตที่ปลอดภัยเนื่องจากจะทำให้การติดตั้ง Win 10 เสียหาย นี่หมายความว่า Win 10 ที่ติดตั้งไว้ล่วงหน้าทำงานได้ดีเมื่อปิดใช้งานโหมดปลอดภัยหรือไม่
Zeine77
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.