vmlinuz-4.18.12-041812-generic มีลายเซ็นไม่ถูกต้อง


15

ฉันอัพเกรดเคอร์เนลของฉันในวันนี้ด้วย ukuu และตั้งแต่นั้นฉันไม่สามารถบูตได้เพราะฉันได้รับข้อผิดพลาดนี้:

error: /boot/vmlinuz-4.18.12-041812-generic has invalid signature
error: you need to load the kernel first

ฉันมีบูตคู่กับ windows 10 และ Ubuntu 18.10 (อัพเกรดวันนี้)

ปรับปรุง: ฉันจัดการเพื่อบูตเคอร์เนลเก่าที่ฉันเลือกจาก "ตัวเลือกขั้นสูงสำหรับ Ubuntu" ในด้วง

แต่ฉันต้องอัพเกรดเคอร์เนลของฉันและถ้าฉันทำอย่างนั้นฉันยังคงได้รับปัญหาเดียวกัน ...


ฉันประสบปัญหาเดียวกันนี้ในขณะนี้หลังจากอัปเดตเฟิร์มแวร์ของ Lenovo T480 ของฉันและฉันไม่เข้าใจว่าทำไมเมล็ดเก่ายังคงใช้งานได้
user205301

คำตอบ:


5

แทนที่จะเซ็นชื่อเคอร์เนลที่เป็นปัญหาฉันเพิ่งปิด Secure Boot ในเมนู BIOS / UEFI ของแล็ปท็อปของฉัน

โดยปกติคุณสามารถเข้าสู่เมนูโดยการกดปุ่มพิเศษในระหว่างการบู๊ตคุณสามารถ google ปุ่มเฉพาะสำหรับอุปกรณ์ของคุณหรืออาจปรากฏบนหน้าจอระหว่างการบู๊ต


ขอบคุณ! ฉันเพิ่งอัพเดตไบออสและลืมที่จะปิดการใช้งาน!
Lucas Bustamante

มันใช้งานได้สำหรับฉัน!
Jonathan

5

https://github.com/jakeday/linux-surface/blob/master/SIGNING.mdมีคำแนะนำเฉพาะเพิ่มเติมเกี่ยวกับการลงชื่อเคอร์เนล (ดัดแปลงมาจากบทแนะนำเดียวกันที่เชื่อมโยงกับคำตอบที่ยอมรับ) คำแนะนำจะทำซ้ำทั้งหมดดังนี้:

การลงนามเคอร์เนลที่กำหนดเองสำหรับ Secure Boot

คำแนะนำสำหรับอูบุนตู แต่ควรทำงานคล้ายกับ distros อื่น ๆ หากใช้ shim และ grub เป็น bootloader หาก distro ของคุณไม่ได้ใช้ shim (เช่น Linux Foundation Preloader) ควรมีขั้นตอนที่คล้ายกันเพื่อให้การลงชื่อ (เช่น HashTool แทน MokUtil สำหรับ LF Preloader) หรือคุณสามารถติดตั้ง shim เพื่อใช้แทน แพคเกจ ubuntu สำหรับ shim นั้นถูกเรียกใช้shim-signedแต่โปรดแจ้งให้คุณทราบถึงวิธีการติดตั้งอย่างถูกต้องดังนั้นคุณจะไม่ทำให้ bootloader เสีย

ตั้งแต่การอัปเดต GRUB2 ล่าสุด (2.02 + dfsg1-5ubuntu1) ใน Ubuntu, GRUB2 จะไม่โหลดเคอร์เนลที่ไม่ได้ลงชื่ออีกต่อไปตราบใดที่เปิดใช้งาน Secure Boot ผู้ใช้งาน Ubuntu 18.04 จะได้รับแจ้งระหว่างการอัพเกรดแพ็คเกจ grub-efi ซึ่งเคอร์เนลนี้ไม่ได้ลงนามและการอัพเกรดจะยกเลิก

ดังนั้นคุณมีสามตัวเลือกในการแก้ปัญหานี้:

  1. คุณลงนามเคอร์เนลด้วยตัวคุณเอง
  2. คุณใช้เคอร์เนลทั่วไปของ distro ของคุณ
  3. คุณปิดใช้งาน Secure Boot

เนื่องจากตัวเลือกที่สองและสามไม่สามารถใช้งานได้จริงเหล่านี้เป็นขั้นตอนในการเซ็นชื่อเคอร์เนลด้วยตัวคุณเอง

คำแนะนำในการดัดแปลงมาจากบล็อกอูบุนตู ก่อนที่จะติดตามโปรดสำรองข้อมูลไดเรกทอรี / boot / EFI ของคุณเพื่อให้คุณสามารถกู้คืนทุกสิ่งได้ ทำตามขั้นตอนเหล่านี้ด้วยความเสี่ยงของคุณเอง

  1. สร้างการกำหนดค่าเพื่อสร้างคีย์การลงนามบันทึกเป็น mokconfig.cnf:
# This definition stops the following lines failing if HOME isn't
# defined.
HOME                    = .
RANDFILE                = $ENV::HOME/.rnd 
[ req ]
distinguished_name      = req_distinguished_name
x509_extensions         = v3
string_mask             = utf8only
prompt                  = no

[ req_distinguished_name ]
countryName             = <YOURcountrycode>
stateOrProvinceName     = <YOURstate>
localityName            = <YOURcity>
0.organizationName      = <YOURorganization>
commonName              = Secure Boot Signing Key
emailAddress            = <YOURemail>

[ v3 ]
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always,issuer
basicConstraints        = critical,CA:FALSE
extendedKeyUsage        = codeSigning,1.3.6.1.4.1.311.10.3.6
nsComment               = "OpenSSL Generated Certificate"

ปรับทุกส่วนตามรายละเอียดของคุณ

  1. สร้างพับลิกคีย์สาธารณะและไพรเวตสำหรับการลงชื่อเคอร์เนล:
openssl req -config ./mokconfig.cnf \
        -new -x509 -newkey rsa:2048 \
        -nodes -days 36500 -outform DER \
        -keyout "MOK.priv" \
        -out "MOK.der"
  1. แปลงคีย์เป็นรูปแบบ PEM (mokutil ต้องการ DER, sbsign ต้องการ PEM):
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
  1. ลงทะเบียนกุญแจเพื่อติดตั้งชิมของคุณ:
sudo mokutil --import MOK.der

คุณจะถูกถามรหัสผ่านคุณจะใช้เพื่อยืนยันการเลือกกุญแจของคุณในขั้นตอนถัดไปดังนั้นเลือกใด ๆ

  1. รีสตาร์ทระบบของคุณ คุณจะพบหน้าจอสีน้ำเงินของเครื่องมือชื่อ MOKManager เลือก "ลงทะเบียน MOK" แล้วเลือก "ดูปุ่ม" ตรวจสอบให้แน่ใจว่าเป็นกุญแจสำคัญที่คุณสร้างขึ้นในขั้นตอนที่ 2 หลังจากนั้นให้ทำตามขั้นตอนต่อไปและคุณจะต้องป้อนรหัสผ่านที่คุณระบุไว้ในขั้นตอนที่ 4 ทำการบูตระบบของคุณต่อไป

  2. ตรวจสอบว่าคีย์ของคุณลงทะเบียนผ่าน:

sudo mokutil --list-enrolled
  1. เซ็นชื่อเคอร์เนลที่ติดตั้ง (ควรอยู่ที่ / boot / vmlinuz- [KERNEL-VERSION] -surface-linux-surface):
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface --output /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface.signed
  1. คัดลอก initram ของเคอร์เนลที่ไม่ได้ลงชื่อดังนั้นเราจึงมี initram สำหรับเคอร์เนลที่ลงชื่อ
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
  1. อัปเดต grub-config ของคุณ
sudo update-grub
  1. รีบูตระบบของคุณและเลือกเคอร์เนลที่ลงนามแล้ว หากการบูทใช้งานได้คุณสามารถลบเคอร์เนลที่ไม่ได้ลงชื่อ:
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub

ตอนนี้ระบบของคุณควรทำงานภายใต้เคอร์เนลที่ลงนามแล้วและการอัพเกรด GRUB2 ทำงานอีกครั้ง หากคุณต้องการอัพเกรดเคอร์เนลแบบกำหนดเองคุณสามารถลงชื่อเวอร์ชันใหม่ได้อย่างง่ายดายโดยทำตามขั้นตอนข้างต้นอีกครั้งจากขั้นตอนที่เจ็ด ดังนั้นการสำรองคีย์ MOK (MOK.der, MOK.pem, MOK.priv)


การตอบสนองที่ยอดเยี่ยมฉันไม่สามารถไปถึงที่นั่นได้ด้วยคำแนะนำอูบุนตูคนเดียว
User632716

ทางลัดที่ยอดเยี่ยมในการเปลี่ยนชื่อและเขียนทับไฟล์ด้วย postfix
Tom

1

ฉันแก้ไขปัญหาของฉันโดยทำตามบทช่วยสอนนี้เพื่อลงชื่อเข้าใช้ไฟล์ / boot / vmlinuz เพื่อการบูทอย่างปลอดภัยเพียงสังเกตส่วนสุดท้ายของบทช่วยสอน


6
คุณสามารถให้ข้อมูลรายละเอียดเกี่ยวกับการแก้ไขปัญหาได้ไหม? ฉันมีข้อผิดพลาดเดียวกันอย่างแน่นอน แต่ฉันไม่เข้าใจสิ่งที่ฉันต้องทำตามที่กล่าวถึงการกวดวิชา
Slon

ฉันจำไม่ได้ตอนนี้ฉันจะพยายามช่วยคุณในวันนี้ถ้ามันยังเกี่ยวข้อง
Nadav Shabtai

มันเกี่ยวข้องกับฉันด้วย ฉันมีปัญหาเดียวกัน
Vitalii Diravka

เพิ่งพบสิ่งนี้ฉันต้องการมันเช่นกัน
Mitch Talmadge

1
นี่ดูเหมือนจะเป็น "คำตอบสำหรับลิงก์เท่านั้น" โปรดแก้ไขคำถามและให้รายละเอียดเล็กน้อยเพื่อช่วยเหลือผู้ใช้รายอื่นที่มีปัญหาเดียวกัน ขอบคุณ!
mchid
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.