https://github.com/jakeday/linux-surface/blob/master/SIGNING.md tiene instrucciones más específicas sobre la firma del núcleo (adaptadas del mismo tutorial vinculado en la respuesta aceptada). Las instrucciones se reproducen en su totalidad de la siguiente manera:
Firma de un kernel personalizado para arranque seguro
Las instrucciones son para ubuntu, pero deberían funcionar de manera similar para otras distribuciones, si están usando shim y grub como gestor de arranque. Si su distribución no está usando shim (por ejemplo, Linux Foundation Preloader), debe haber pasos similares para completar la firma (por ejemplo, HashTool en lugar de MokUtil para LF Preloader) o puede instalar shim para usar en su lugar. Se llama al paquete ubuntu para shim shim-signed
, pero infórmese sobre cómo instalarlo correctamente, para no estropear su gestor de arranque.
Desde la actualización más reciente de GRUB2 (2.02 + dfsg1-5ubuntu1) en Ubuntu, GRUB2 ya no carga núcleos sin firmar, siempre y cuando Secure Boot esté habilitado. Los usuarios de Ubuntu 18.04 serán notificados durante la actualización del paquete grub-efi, que este kernel no está firmado y la actualización se cancelará.
Por lo tanto, tiene tres opciones para resolver este problema:
- Usted firma el núcleo usted mismo.
- Utiliza un núcleo genérico firmado de su distribución.
- Deshabilita el arranque seguro.
Como las opciones dos y tres no son realmente viables, estos son los pasos para firmar el núcleo usted mismo.
Instrucciones adaptadas del Blog de Ubuntu . Antes de seguir, haga una copia de seguridad de su directorio / boot / EFI para que pueda restaurar todo. Siga estos pasos bajo su propio riesgo.
- Cree la configuración para crear la clave de firma, guárdela como 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"
Ajuste todas las partes a sus detalles.
- Cree la clave pública y privada para firmar el núcleo:
openssl req -config ./mokconfig.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
- Convierta la clave también a formato PEM (mokutil necesita DER, sbsign necesita PEM):
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
- Registre la clave para su instalación de cuñas:
sudo mokutil --import MOK.der
Se le pedirá una contraseña, solo la usará para confirmar su selección de clave en el siguiente paso, así que elija cualquiera.
Reinicia tu sistema. Encontrará una pantalla azul de una herramienta llamada MOKManager. Seleccione "Registrar MOK" y luego "Ver clave". Asegúrese de que es la clave que creó en el paso 2. Luego continúe el proceso y debe ingresar la contraseña que proporcionó en el paso 4. Continúe con el arranque de su sistema.
Verifique que su clave esté registrada a través de:
sudo mokutil --list-enrolled
- Firme el kernel instalado (debe estar en / 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
- Copie el initram del kernel sin firmar, para que también tengamos un initram para el firmado.
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
- Actualiza tu grub-config
sudo update-grub
- Reinicie su sistema y seleccione el núcleo firmado. Si el arranque funciona, puede eliminar el núcleo sin firmar:
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub
Ahora su sistema debería ejecutarse bajo un núcleo firmado y la actualización de GRUB2 funciona nuevamente. Si desea actualizar el kernel personalizado, puede firmar la nueva versión fácilmente siguiendo los pasos anteriores nuevamente desde el paso siete en adelante. Por lo tanto, COPIA DE SEGURIDAD de las teclas MOK (MOK.der, MOK.pem, MOK.priv).