Tại sao tôi nhận được Mã khóa bắt buộc không có sẵn khi cài đặt các mô-đun hạt nhân của bên thứ 3 hoặc sau khi nâng cấp kernel?


79

Sự cố này chỉ xảy ra trên các hệ thống UEFI có bật Khởi động an toàn.

Khi tôi cố gắng cài đặt các mô-đun DKMS như trình điều khiển VirtualBox, Nvidia hoặc Broadcom, chúng không cài đặt và tôi nhận được Required key not availablekhi tôi thử modprobechúng.

VirtualBox phàn nàn rằng vboxdrvkhông được tải.

wlTrình điều khiển Broadcom được hiển thị lspci -kdưới dạng một mô-đun hạt nhân nhưng không được sử dụng. sudo modprobe wlném Required key not available.

Ngoài ra vấn đề này có thể xảy ra khi tôi cài đặt một số mô-đun hạt nhân từ các nguồn git.

Sự cố này có thể xuất hiện sau khi cập nhật kernel là bộ điều hợp không dây bị vô hiệu hóa, màn hình đen sau khi khởi động lại, v.v.

Làm thế nào tôi có thể sửa chữa nó?


Câu trả lời:


85

Vì Ubuntu kernel 4.4.0-20, EFI_SECURE_BOOT_SIG_ENFORCEcấu hình kernel đã được kích hoạt. Điều đó ngăn không cho tải các mô-đun bên thứ ba không dấu nếu UEFI Secure Boot được bật.

Cách dễ nhất để khắc phục sự cố này là tắt Secure Boot trong cài đặt UEFI (BIOS).

Trong hầu hết các trường hợp, bạn có thể vào cài đặt UEFI bằng menu grub. Nhấn ESCnút khi khởi động, vào menu grub và chọn Cài đặt hệ thống. Tùy chọn Khởi động an toàn phải nằm trong phần "Bảo mật" hoặc "Khởi động" của UEFI.

Bạn có thể vào UEFI trực tiếp, nhưng nó phụ thuộc vào phần cứng của bạn. Đọc hướng dẫn sử dụng máy tính của bạn để xem làm thế nào để đạt được điều đó. Nó có thể Del, hoặc F2khi khởi động, hoặc một cái gì đó khác.

Một cách khác là vô hiệu hóa Secure Boot bằng cách sử dụng mokutil.

Vì Ubuntu kernel build 4.4.0-21.37, điều này có thể được sửa bằng cách chạy

sudo apt install mokutil
sudo mokutil --disable-validation

Nó sẽ yêu cầu tạo mật khẩu. Mật khẩu phải dài ít nhất 8 ký tự. Sau khi bạn khởi động lại, UEFI sẽ hỏi bạn có muốn thay đổi cài đặt bảo mật không. Chọn "Có".

Sau đó, bạn sẽ được yêu cầu nhập mật khẩu đã tạo trước đó. Một số phần mềm UEFI yêu cầu không phải mật khẩu đầy đủ, nhưng để nhập một số ký tự của nó, như thứ 1, thứ 3, v.v. Hãy cẩn thận. Một số người không hiểu điều này. Tôi cũng không nhận được nó từ lần thử đầu tiên ;-)

Cập nhật: Bây giờ cấu hình kernel này được kích hoạt trong tất cả các hạt nhân Ubuntu được hỗ trợ. Ubuntu 16.04, 15.10 và 14.04 bị ảnh hưởng.


Điều này không làm việc cho tôi. @Sputnik trả lời không. Tuy nhiên, tôi vẫn muốn biết tại sao mokutil lại hỏi tôi mật khẩu và khi nào tôi cần nó?
Alwin Kesler

8
@AlwinKesler Nó yêu cầu một mật khẩu mà nó sẽ xác nhận sau khi khởi động lại, trước khi những thay đổi đối với cơ sở dữ liệu MOK thực sự được thực hiện. Không có điều này, một quy trình giả mạo có thể thay đổi các khóa trong cơ sở dữ liệu MOK sẽ có hiệu lực sau lần khởi động lại tiếp theo. Ngoài ra, bây giờ nền tảng 'biết' rằng người yêu cầu thay đổi là cùng một người có mặt thực tế sau khi khởi động lại, và do đó sẽ thông qua các biện pháp bảo mật phần cứng, chẳng hạn như có quyền truy cập vật lý vào máy và biết mật khẩu hệ thống thời gian khởi động .
zwets

@ Pilot6: Tôi vẫn đang sử dụng Ubuntu 14.04 LTS do một số vấn đề kỹ thuật. Cảm ơn rất nhiều vì đã cập nhật câu trả lời.
Ravi Joshi

3
Làm việc cho tôi trên Ubuntu 18.04. Tôi không thể hiểu được cuộc sống của tôi tại sao cài đặt trình điều khiển nvidia không hoạt động thông qua bất kỳ phương tiện nào, hoặc thậm chí bằng cách quay lại 16.04. Trời ạ! Điều này đã sửa nó. Quá nhiều thời gian lãng phí.
Nate

1
Hệ thống Ubuntu của tôi thực sự bị lag. Không có ý nghĩa vì đây là một máy tính xách tay hoàn toàn mới. Bây giờ tôi nhận ra CPU đã làm mọi thứ và card màn hình của tôi lúc nào cũng nhàn rỗi. Liên kết này cũng có ích - linuxbabe.com/ubfox/install-nvidia- ấn
Peter Drinnan

32

Theo đề xuất của người dùng @zwets, tôi đang sao chép (có chỉnh sửa) một câu trả lời ở đây:

Vì phiên bản kernel 4.4.0-20, nên các mô-đun kernel không dấu sẽ không được phép chạy khi bật Secure Boot. Nếu bạn muốn giữ Secure Boot cũng chạy các mô-đun này, thì bước hợp lý tiếp theo là các mô-đun đó.

Vì vậy, hãy thử nó.

  1. Tạo khóa ký

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
    
  2. Ký mô-đun

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /path/to/module
    

Lưu ý 1 : Có thể có nhiều tệp được ký cho một trình điều khiển / mô-đun duy nhất, vì vậy /path/to/modulecó thể cần phải được thay thế bằng $(modinfo -n <modulename>), ví dụ:$(modinfo -n vboxdrv)

Lưu ý 2 : sudo kmodsign sha512 ./MOK.priv ./MOK.der /path/to/modulelà một thay thế nếu sign-filekhông có sẵn.

  1. Đăng ký các phím để Khởi động an toàn

    sudo mokutil --import MOK.der
    

    Cung cấp mật khẩu để sử dụng sau khi khởi động lại

  2. Rebootvà làm theo hướng dẫn để Ghi danh MOK (Khóa chủ sở hữu máy). Đây là một mẫu với hình ảnh. Hệ thống sẽ khởi động lại một lần nữa.

Nếu khóa đã được đăng ký đúng cách, nó sẽ hiển thị bên dưới sudo mokutil --list-enrolled.

Vui lòng cho tôi biết nếu các mô-đun của bạn sẽ chạy theo cách này trên Ubuntu 16.04 (tôi tin rằng trên kernel 4.4.0-21).

Tài nguyên: Bài viết trang web chi tiết để FedoraUbuntu thực hiện ký kết mô-đun. (họ đã làm việc với nó) ;-)

Tài nguyên bổ sung: Tôi đã tạo một tập lệnh bash để sử dụng cho riêng mình mỗi lần virtualbox-dkmsnâng cấp và do đó ghi đè lên các mô-đun đã ký. Kiểm tra vboxsignban đầu của tôi trên GitHub .

Ghi chú bổ sung cho ý thức bảo mật (thêm-): ;-)

Vì khóa riêng mà bạn đã tạo ( MOK.privtrong ví dụ này) có thể được sử dụng bởi bất kỳ ai có thể truy cập vào nó, nên giữ an toàn cho nó là một cách tốt. Bạn có thể chmodmã hóa ( gpg) nó hoặc lưu trữ ở nơi khác an toàn (r). Hoặc, như đã lưu ý trong nhận xét này , hãy xóa tùy chọn -nodestrong bước số 1. Điều này sẽ mã hóa khóa bằng cụm mật khẩu.


Trên Ubuntu 14.10, tôi tiếp tục thấy 'khóa bắt buộc không khả dụng' khi cố gắng cài đặt trình điều khiển rộng được biên dịch từ nguồn, mặc dù đã đăng ký trước khóa và ký trình điều khiển. Vô hiệu hóa xác nhận làm việc.
Đánh dấu

1
Điều này làm việc cho tôi cho VirtualBox và Ubuntu 16.04.
YtvwlD

1
Tôi nhận được lỗi sau trong bước 3: "Biến EFI không được hỗ trợ trên hệ thống này". "dmesg" không có mục efi ("dmesg | grep efi" không có kết quả) Tôi có thể làm gì khác? Cảm ơn
musbach

Bạn có thể thay thế đường dẫn bằng $ (modinfo -n modulename)
Shane

Trên Ubuntu 18.04 ở đây, insmod cho mô-đun Talpa_syscallhook.ko tiếp tục nói "Khóa bắt buộc không khả dụng" mặc dù tôi đã ký mô-đun đó và tất cả các mô-đun khác trong cùng thư mục cho Sophos AV chỉ trong trường hợp. Khóa đã được đăng ký thành công vì tôi có thể thấy nó khi tôi liệt kê tất cả các khóa mok. Bất kỳ ý tưởng về cách tiến hành?
Fran Marzoa

6

Bạn có thể tắt Khởi động an toàn (UEFI) trong BIOS theo các bước sau:

  1. Khởi động lại máy của bạn và vào Menu BIOS (Trong trường hợp của tôi, nhấn F2)

  2. Tìm kiếm Khởi động an toàn và thay đổi thành Di sản

Trong bo mạch chủ ASUS:

  • Chuyển đến Chế độ nâng cao (F7)
  • Đi vào tùy chọn Khởi động an toàn trong phần Khởi động
  • Thay đổi "Chế độ Windows UEFI" bằng "Hệ điều hành khác"
  • Lưu và khởi động lại để áp dụng cài đặt (F10)

2
Khởi động an toàn và "Di sản" là các cài đặt khác nhau.
Pilot6

Nhưng nếu bạn đã bật "boot legacy" thay vì UEFI, thì điều đó có đòi hỏi rằng Secure Boot không được kích hoạt không?
Siêu thường

@Supern normal, vâng, đây là những gì tôi hiểu.
Sputnik

3

Bạn cũng có thể Vô hiệu hóa Khởi động an toàn khi chạy có chữ ký shim sudo update-secureboot-policy. Đây trang wiki giải thích phương pháp này:

  • Mở một thiết bị đầu cuối (Ctrl + Alt + T) và thực hiện chính sách sudo update-secureboot-rồi chọn Có.
  • Nhập mật khẩu tạm thời từ 8 đến 16 chữ số. (Ví dụ: 12345678, chúng tôi sẽ sử dụng mật khẩu này sau
  • Nhập lại cùng một mật khẩu để xác nhận.
  • Khởi động lại hệ thống và nhấn bất kỳ phím nào khi bạn thấy màn hình xanh (quản lý MOK
  • Chọn Thay đổi trạng thái Khởi động an toàn
  • Nhập mật khẩu bạn đã chọn ở Bước 2 và nhấn Enter.
  • Chọn Có để tắt Khởi động an toàn trong chữ ký shim.
  • Nhấn phím Enter để hoàn tất toàn bộ quy trình.

Bạn vẫn có thể bật Secure Boot trong shim-ký lại. Chỉ cần thực hiện

sudo update-secureboot-chính sách - có thể thực hiện được và sau đó làm theo các bước trên

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.