https://github.com/jakeday/linux-surface/blob/master/SIGNING.md содержит более конкретные инструкции по подписанию ядра (адаптировано из того же учебника, на который есть ссылка в принятом ответе). Инструкции воспроизводятся в полном объеме следующим образом:
Подписание собственного ядра для безопасной загрузки
Инструкции для Ubuntu, но должны работать аналогично для других дистрибутивов, если они используют shim и grub в качестве загрузчика. Если в вашем дистрибутиве не используется shim (например, Linux Foundation Preloader), для завершения подписи должны быть выполнены аналогичные шаги (например, HashTool вместо MokUtil для LF Preloader), или вы можете установить вместо него shim. Пакет ubuntu для shim называется shim-signed
, но, пожалуйста, узнайте, как правильно его установить, чтобы не испортить загрузчик.
Поскольку последнее обновление GRUB2 (2.02 + dfsg1-5ubuntu1) в Ubuntu, GRUB2 больше не загружает неподписанные ядра, пока включена безопасная загрузка. Пользователи Ubuntu 18.04 будут уведомлены во время обновления пакета grub-efi, что это ядро не подписано и обновление будет прервано.
Таким образом, у вас есть три варианта решения этой проблемы:
- Вы сами подписываете ядро.
- Вы используете подписанное, общее ядро вашего дистрибутива.
- Вы отключаете Secure Boot.
Поскольку второй и третий варианты на самом деле не являются жизнеспособными, это шаги для самостоятельной подписи ядра.
Инструкции адаптированы из блога Ubuntu . Прежде чем продолжить, пожалуйста, сделайте резервную копию вашего каталога / boot / EFI, чтобы вы могли восстановить все. Следуйте этим шагам на свой страх и риск.
- Создайте конфигурацию для создания ключа подписи, сохраните как 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"
Отрегулируйте все детали в соответствии с вашими данными.
- Создайте открытый и закрытый ключ для подписи ядра:
openssl req -config ./mokconfig.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
- Преобразовать ключ также в формат PEM (mokutil нуждается в DER, sbsign нуждается в PEM):
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
- Зарегистрируйте ключ для установки вашей прокладки:
sudo mokutil --import MOK.der
Вам будет предложено ввести пароль, вы просто будете использовать его для подтверждения выбора ключа на следующем шаге, поэтому выберите любой.
Перезагрузите вашу систему. Вы увидите синий экран инструмента под названием MOKManager. Выберите «Регистрация MOK», а затем «Просмотр ключа». Убедитесь, что это ваш ключ, который вы создали на шаге 2. Затем продолжите процесс, и вы должны ввести пароль, который вы указали на шаге 4. Продолжите загрузку вашей системы.
Убедитесь, что ваш ключ зарегистрирован через:
sudo mokutil --list-enrolled
- Подпишите ваше установленное ядро (оно должно быть в / 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
- Скопируйте initram неподписанного ядра, чтобы у нас также был initram для подписанного.
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
- Обновите ваш grub-config
sudo update-grub
- Перезагрузите систему и выберите подписанное ядро. Если загрузка работает, вы можете удалить неподписанное ядро:
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 снова работает. Если вы хотите обновить собственное ядро, вы можете легко подписать новую версию, выполнив описанные выше действия еще раз, начиная с шага 7. Таким образом РЕЗЕРВНЫЕ МОК-ключи (МОК.дер, МОК.пем, МОК.прив).