https://github.com/jakenay/linux-surface/blob/master/SIGNING.md có hướng dẫn cụ thể hơn về việc ký kernel (được điều chỉnh từ cùng một hướng dẫn được liên kết trong câu trả lời được chấp nhận). Các hướng dẫn được sao chép đầy đủ như sau:
Ký kernel tùy chỉnh cho Secure Boot
Các hướng dẫn dành cho Ubuntu, nhưng sẽ hoạt động tương tự đối với các bản phát hành khác, nếu chúng đang sử dụng shim và grub làm bộ nạp khởi động. Nếu bản phân phối của bạn không sử dụng shim (ví dụ: Linux Foundation Preloader), thì nên có các bước tương tự để hoàn thành việc ký kết (ví dụ HashTool thay vì MokUtil cho LF Preloader) hoặc bạn có thể cài đặt shim để sử dụng thay thế. Gói ubfox cho shim được gọi shim-signed
, nhưng vui lòng thông báo cho bạn cách cài đặt chính xác, để bạn không làm rối bộ tải khởi động của mình.
Vì bản cập nhật GRUB2 gần đây nhất (2.02 + dfsg1-5ubfox1) trong Ubuntu, GRUB2 không tải hạt nhân không dấu nữa, miễn là bật Secure Boot. Người dùng Ubuntu 18.04 sẽ được thông báo trong quá trình nâng cấp gói grub-efi, rằng hạt nhân này chưa được ký và bản nâng cấp sẽ hủy bỏ.
Do đó, bạn có ba tùy chọn để giải quyết vấn đề này:
- Bạn tự ký kernel.
- Bạn sử dụng một hạt nhân chung đã ký tên của bản phân phối của bạn.
- Bạn tắt Secure Boot.
Vì tùy chọn hai và ba không thực sự khả thi, đây là các bước để tự ký tên hạt nhân.
Hướng dẫn điều chỉnh từ Blog Ubuntu . Trước khi làm theo, hãy sao lưu thư mục / boot / EFI của bạn để bạn có thể khôi phục mọi thứ. Thực hiện theo các bước trên rủi ro của riêng bạn.
- Tạo cấu hình để tạo khóa ký, lưu dưới dạng 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"
Điều chỉnh tất cả các phần với chi tiết của bạn.
- Tạo khóa chung và khóa riêng để ký kernel:
openssl req -config ./mokconfig.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
- Chuyển đổi khóa cũng sang định dạng PEM (mokutil cần DER, sbsign cần PEM):
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
- Đăng ký khóa để cài đặt shim của bạn:
sudo mokutil --import MOK.der
Bạn sẽ được yêu cầu nhập mật khẩu, bạn sẽ chỉ sử dụng nó để xác nhận lựa chọn khóa của mình trong bước tiếp theo, vì vậy hãy chọn bất kỳ.
Khởi động lại hệ thống của bạn. Bạn sẽ bắt gặp một màn hình màu xanh của một công cụ có tên MOKManager. Chọn "Đăng ký MOK" và sau đó "Xem khóa". Đảm bảo đó là khóa của bạn mà bạn đã tạo ở bước 2. Sau đó tiếp tục quá trình và bạn phải nhập mật khẩu mà bạn đã cung cấp ở bước 4. Tiếp tục với việc khởi động hệ thống của bạn.
Xác nhận khóa của bạn được đăng ký qua:
sudo mokutil --list-enrolled
- Ký tên kernel đã cài đặt của bạn (nó phải ở / 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
- Sao chép initram của kernel không dấu, vì vậy chúng ta cũng có initram cho kernel đã ký.
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
- Cập nhật cấu hình grub của bạn
sudo update-grub
- Khởi động lại hệ thống của bạn và chọn kernel đã ký. Nếu khởi động hoạt động, bạn có thể loại bỏ kernel không dấu:
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub
Bây giờ hệ thống của bạn sẽ chạy dưới kernel đã ký và nâng cấp GRUB2 hoạt động trở lại. Nếu bạn muốn nâng cấp kernel tùy chỉnh, bạn có thể dễ dàng ký phiên bản mới bằng cách làm lại các bước trên từ bước bảy trở đi. Do đó, BACKUP các phím MOK (MOK.der, MOK.pem, MOK.priv).