¿Por qué obtengo "La clave requerida no está disponible" cuando instalo módulos de kernel de terceros o después de una actualización de kernel?

79

Este problema solo ocurre en sistemas UEFI con arranque seguro habilitado.

Cuando intento instalar módulos DKMS como los controladores VirtualBox, Nvidia o Broadcom, no se instalan y obtengo Required key not availablecuando los intento modprobe.

VirtualBox se queja de que vboxdrvno está cargado.

El wlcontrolador Broadcom se muestra lspci -kcomo un módulo de kernel pero no está en uso. sudo modprobe wllanza Required key not available.

Además, este problema puede ocurrir cuando instalo algunos módulos del kernel desde las fuentes de git.

Este problema puede aparecer después de una actualización del kernel como un adaptador inalámbrico deshabilitado, una pantalla negra después de un reinicio, etc.

¿Cómo puedo arreglarlo?

Piloto6
fuente
Similar: askubuntu.com/questions/760671/…
Tor Klingberg

Respuestas:

85

Desde Ubuntu kernel 4.4.0-20, la EFI_SECURE_BOOT_SIG_ENFORCEconfiguración del kernel se ha habilitado. Eso evita que se carguen módulos de terceros sin firmar si UEFI Secure Boot está habilitado.

La forma más fácil de solucionar este problema es deshabilitar el Arranque seguro en la configuración de UEFI (BIOS).

En la mayoría de los casos, puede acceder a la configuración de UEFI utilizando el menú de grub. Presione el ESCbotón al iniciar, acceda al menú de grub y seleccione Configuración del sistema. La opción de arranque seguro debe estar en la sección "Seguridad" o "Arranque" de la UEFI.

Puede ingresar directamente a UEFI, pero depende de su hardware. Lea el manual de su computadora para ver cómo llegar allí. Puede ser Del, o F2en el arranque, o algo más.

Una forma alternativa es deshabilitar el arranque seguro usando mokutil.

Desde Ubuntu kernel build 4.4.0-21.37 esto se puede solucionar ejecutando

sudo apt install mokutil
sudo mokutil --disable-validation

Será necesario crear una contraseña. La contraseña debe tener al menos 8 caracteres de longitud. Después de reiniciar, UEFI le preguntará si desea cambiar la configuración de seguridad. Elige "Sí".

Luego se le pedirá que ingrese la contraseña creada anteriormente. Algunos firmware UEFI no solicitan la contraseña completa, sino que ingresan algunos caracteres, como el 1er, 3er, etc. Tenga cuidado. Algunas personas no entienden esto. Tampoco lo obtuve desde el primer intento ;-)

Actualización: ahora esta configuración del núcleo está habilitada en todos los núcleos de Ubuntu compatibles. Ubuntu 16.04, 15.10 y 14.04 se ven afectados.

Piloto6
fuente
Esto no funciona para mi. La respuesta de @Sputnik sí. Pero aún así, me gustaría saber por qué mokutil me está pidiendo una contraseña y cuándo la necesito.
Alwin Kesler
8
@AlwinKesler Solicita una contraseña que validará después del reinicio, antes de que se realicen los cambios en la base de datos MOK. Sin esto, un proceso deshonesto podría cambiar las claves en la base de datos MOK que entrarán en vigencia después del próximo reinicio. Además, ahora la plataforma 'sabe' que la persona que solicita el cambio es la misma persona que está físicamente presente después del reinicio y, por lo tanto, habrá aprobado medidas de seguridad de hardware, como tener acceso físico a la máquina y conocer la contraseña del sistema de tiempo de arranque .
zwets
@ Pilot6: Todavía estoy en Ubuntu 14.04 LTS debido a algunos problemas técnicos. Muchas gracias por actualizar la respuesta.
Ravi Joshi
3
Trabajó para mí en Ubuntu 18.04. No pude entender de por vida por qué instalar controladores de nvidia no funcionaba de ninguna manera, o incluso volviendo a 16.04. Gah! Esto lo solucionó. Tanto tiempo perdido.
Nate
1
Mi sistema Ubuntu era realmente lento. No tenía sentido ya que se trataba de una computadora portátil nueva. Ahora me doy cuenta de que la CPU estaba haciendo todo y mi tarjeta de video estaba inactiva todo el tiempo. Este enlace también ayudó - linuxbabe.com/ubuntu/install-nvidia-driver-ubuntu-18-04
Peter Drinnan
32

Como lo sugirió el usuario @zwets, estoy copiando (con ediciones) una respuesta aquí:

Desde la versión de kernel 4.4.0-20, se impuso que los módulos de kernel no firmados no se puedan ejecutar con Secure Boot habilitado. Si desea mantener el Arranque seguro y también ejecutar estos módulos, el siguiente paso lógico es firmar esos módulos.

Entonces probémoslo.

  1. Crear claves de firma

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
    
  2. Firma el módulo

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

Nota 1 : puede haber varios archivos para firmar para un solo controlador / módulo, por lo que es /path/to/moduleposible que deba reemplazarse con $(modinfo -n <modulename>), por ejemplo,$(modinfo -n vboxdrv)

Nota 2 : sudo kmodsign sha512 ./MOK.priv ./MOK.der /path/to/modulees una alternativa si sign-fileno está disponible.

  1. Registre las claves para el arranque seguro

    sudo mokutil --import MOK.der
    

    Proporcione una contraseña para su uso posterior después de reiniciar

  2. Rebooty siga las instrucciones para inscribir MOK (clave del propietario de la máquina). Aquí hay una muestra con fotos. El sistema se reiniciará una vez más.

Si la clave se ha registrado correctamente, aparecerá debajo sudo mokutil --list-enrolled.

Avíseme si sus módulos se ejecutarían de esta manera en Ubuntu 16.04 (en el kernel 4.4.0-21, creo).

Recursos: Artículo detallado del sitio web para la implementación de Fedora y Ubuntu de la firma de módulos. (han estado trabajando en ello) ;-)

Recurso adicional: creé un script bash para mi propio uso cada vez que virtualbox-dkmsrealizo actualizaciones y, por lo tanto, sobrescribe los módulos firmados. Mira mi vboxsignoriginalmente en GitHub .

Nota adicional para la seguridad (extra) consciente: ;-)

Dado que la clave privada que creó ( MOK.priven este ejemplo) puede ser utilizada por cualquier persona que pueda tener acceso a ella, es una buena práctica mantenerla segura. Puede chmodhacerlo, cifrarlo ( gpg) o almacenarlo en otro lugar seguro (r). O, como se señaló en este comentario , elimine la opción -nodesen el paso número 1. Esto cifrará la clave con una frase de contraseña.

Majal
fuente
En Ubuntu 14.10 seguí viendo 'la clave requerida no está disponible' tratando de instalar un controlador Broadcom compilado desde la fuente, a pesar de registrar previamente la clave y firmar el controlador. La desactivación de la validación funcionó.
Mark
1
Esto funcionó para mí para VirtualBox y Ubuntu 16.04.
YtvwlD
1
Recibo el siguiente error en el paso 3: "Las variables EFI no son compatibles con este sistema". "dmesg" no tiene entradas efi ("dmesg | grep efi" no tiene resultados) ¿Qué más puedo hacer? Gracias
musbach
Puede sustituir la ruta con $ (modinfo -n modulename)
Shane
En Ubuntu 18.04 aquí, insmod para el módulo talpa_syscallhook.ko continúa diciendo "La clave requerida no está disponible" a pesar de haber firmado ese módulo y todos los demás módulos en el mismo directorio para Sophos AV por si acaso. La clave se ha registrado correctamente como puedo verla cuando enumero todas las claves mok. Alguna idea de cómo proceder?
Fran Marzoa
6

Puede deshabilitar el Arranque seguro (UEFI) en el BIOS con los siguientes pasos:

  1. Reinicie su máquina e ingrese al menú del BIOS (en mi caso presionando F2)

  2. Busque el Arranque seguro y cambie a Legacy

En una placa base ASUS:

  • Vaya al modo avanzado (F7)
  • Vaya a la opción de arranque seguro en la sección de arranque
  • Cambie el "modo UEFI de Windows" con "Otro sistema operativo"
  • Guardar y reiniciar para aplicar la configuración (F10)
Sputnik
fuente
2
Secure Boot y "Legacy" son configuraciones diferentes.
Pilot6 el
Pero si tiene habilitado el "arranque heredado" en lugar de UEFI, ¿eso implica que el arranque seguro no está habilitado?
Supernormal el
@Supernormal, sí, esto es lo que entiendo.
Sputnik
3

También puede deshabilitar el arranque seguro en la ejecución firmada con shim sudo update-secureboot-policy. Esta página wiki explica este método:

  • Abra una terminal (Ctrl + Alt + T), ejecute sudo update-secureboot-policy y luego seleccione Sí.
  • Ingrese una contraseña temporal entre 8 y 16 dígitos. (Por ejemplo, 12345678, usaremos esta contraseña más tarde
  • Ingrese la misma contraseña nuevamente para confirmar.
  • Reinicie el sistema y presione cualquier tecla cuando vea la pantalla azul (administración de MOK
  • Seleccione Cambiar estado de arranque seguro
  • Ingrese la contraseña que seleccionó en el Paso 2 y presione Entrar.
  • Seleccione Sí para deshabilitar el Arranque seguro en shim -igned.
  • Presione la tecla Intro para finalizar todo el procedimiento.

Todavía puede habilitar el arranque seguro en shim-firmado nuevamente. Solo ejecuta

sudo update-secureboot-policy - habilita y luego sigue los pasos anteriores

Kent Lin
fuente