Problemas para cargar drivers de Virtualbox con Secure Boot activado

Hola,

Recientemente he activado el Secure Boot y ahora me encuentro con dificultades para usar Virtualbox en OpenSUSE Leap 15.6.

Si desactivo el Secure Boot Virtualbox funciona sin problemas, así que la instalación parece correcta en ese sentido.

Pero cuando activo el Secure Boot tengo firmar y cargar los drivers.

El problema es que haga lo que haga cuando ejecuto sudo modprobe vboxdrv devuelve un error.

modprobe: ERROR: could not insert ‘vboxdrv’: Key was rejected by service

En el dmesg aparece:

[ 775.629196] Loading of module with unavailable key is rejected

Los pasos que he seguido han sido:

  1. Crear el certificado.

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj “/CN=VirtualBox Kernel Modules/”

  1. Firmar los drivers.

sudo /usr/src/linux-6.4.0-150600.23.25-obj/x86_64/default/scripts/sign-file sha256 MOK.priv MOK.der /lib/modules/$(uname -r)/misc/vboxdrv.ko
sudo /usr/src/linux-6.4.0-150600.23.25-obj/x86_64/default/scripts/sign-file sha256 MOK.priv MOK.der /lib/modules/$(uname -r)/misc/vboxnetadp.ko
sudo /usr/src/linux-6.4.0-150600.23.25-obj/x86_64/default/scripts/sign-file sha256 MOK.priv MOK.der /lib/modules/$(uname -r)/misc/vboxnetflt.ko

  1. Comprobar que los modulos están firmados.

sudo modinfo /lib/modules/$(uname -r)/misc/vboxdrv.ko
sudo modinfo /lib/modules/$(uname -r)/misc/vboxnetadp.ko
sudo modinfo /lib/modules/$(uname -r)/misc/vboxnetflt.ko

  1. Registrar la clave.

sudo mokutil --import MOK.der

  1. Reiniciar el PC y enrolar el certificado.
  2. Comprobar que la clave está registrada.

mokutil --list-enrolled

  1. Recargar los módulos firmados.

sudo modprobe -r vboxdrv vboxnetflt vboxnetadp
sudo modprobe vboxdrv vboxnetflt vboxnetadp

El paso de creación de los certificados lo he intentado de varias maneras consiguiendo siempre el mismo resultado al final.

No entiendo que estoy haciendo mal para que no acepte el driver firmado.

Saludos,
Saidano

Hola:

Si es por el mok, pienso que el equipo siga funcionado, ademas la base de datos son varias la keys y me parece que es una de ellas o 2 las que son rechazadas. (en la partición deben venir las utilidades para firmarlas) .
¿ no sera como pasan algunos, que les falta un kerrnel y por eso no puede cargarla ?
En algunos ejemplos ponen que falta el kernel driver RC 1908 y al no estar instalado, no puede firmarlo .

Mira la lista de lo que te pide y si dispone de ella (y si es por la iso, suelen ser híbridas,viene con los dos sistemas y utils para firmarla) .

Saludos

Ya tengo varias claves enroladas en el MOK, y cuando las listo desde el sistema operativo se ven las claves ahí.
El identificador es el mismo que sale cuando uso el modinfo para ver si hay firma.
No sé porqué el proceso de añadir el driver rechaza la clave, no me da mucha información.
Tengo que decir que pasa lo mismo con los tres drivers.

Bienvenido @Saidano

Presentate en el hilo de Presentaciones que esta en la sección de Charla General y nos cuentas cosas de ti y de tu gecko.

¿Has probado recompilar el kernel de VirtualBox?

https://en.opensuse.org/SDB:VirtualBox_Installation

Aunque el Vbox, es para el kernel linux-6.4.0-150600.23.25-obj/x86_64 ,Vbox lleva otros kernel .

Si ese Vbox coincide con el kernel en uso, lo mas seguro es que viene ya compilado.
Lo que si tienes que tener en cuenta 1º verificar que el equipo (anfitrión) , este configurado en uefi .
2º cuando hagas la instalación y en configuración de la instalación (donde aparece : partición, software, time zone, configuración de red, debajo debe poner booting o algo por el estilo, ahí tienes que marcar arranque seguro) y así proceder con la instalación .

Recuerda que aparecen unos errores por lo cual es rechazado las keys o claves, en cuanto a MOK, la clave del propietario del equipo, no es muy importante (incluso cuando sale en un pc normal, si la ignoras, y sigues con el arranque , no pasa nada) .

En win cuando hacías muchos cambios de hardware, te daba un aviso de este, en mok, creo que son hasta 5 (se resetea actualizando bios, o cargando la base de datos en bios) ., así que el error es por falta de algo : [ 775.629196] Loading of module with unavailable key is rejected y el primero : modprobe: ERROR: could not insert ‘vboxdrv’: Key was rejected by service

Mira haber que es lo que falta de Vbox, para que rechace las claves, ademas lo veo lógico, si falta alguna, no debería dejar hacer una instalación .
Mira en oracle, o en wiki si falta algún kernel ( devel,syms,etc) + algún posible archivo (de algún lado necesita sacar las claves y no creo que sean todas del frimware del pc ) .
Esto sería mas largo, pero lo dejo antes de que me tiren de las orejas, y perdón, por lo largo .
Saludos

Hola DiabloRojo,

Ya había intentado compilarlos, de hecho es lo que hace propio proceso de vboxconfig, compila y despliega los drivers (y falla al intentar cargar los módulos).

En todo caso intenté hacer lo que pone en el link que me das, pero en mi sistema no hay ningún archivo en la ruta que indica para ejecutar.

No sé que tengo que hacer para que el sistema acepte las firmas que les pongo a los drivers.

En todo caso muchas gracias por responder.

Saludos,
Saidano

Hola mikrios,

El problema no está en Virtualbox realmente. De hecho Virtualbox consigue generar los drivers bien, lo que falla es el intento de cargar los drivers en el host, por alguna razón rechaza las firmas a pesar de que está en el MOK.

De hecho sin secure boot virtualbox funciona a la primera.

En todo caso gracias por responder.

Saludos,
Saidano

Hola.

Hai algunos hilos que pueden darte algunas ideas:

Una pregunta. ¿De donde te has descargado VirtualBox?

Y otra cosa, ¿estas usando BIOS Legacy o BIOS UEFI?

Hola:
Hay varias interrogantes? Si la versión de Vbox, coincide con el kernel, cabe la posibilidad de que venga ya compilado (o sea funcional de los repositorios) , por lo que es seguir el paso de @DiabloRojo , que sistemas estas virtualizando, y en legacy rom o en uefi, si es el 1º funciona, si arrancas en legacy y no si lo haces en UEFI; si instalas en legacy no sirve de nada firmar.

Si Vbox es con versión con kernel y no está compilado, al menos sabes que es ese, pero te toca bajar otros tantos, mas las herramientas ( cuando yo lo hacía marcaba en yast2 el perfil del kernel, y este instalaba los kernel+mas las herramientas , o hacer como creo que hace @Krovikan , bajarse solo los necesarios .

Lo mejor es obtener la lista, y bajar los necesarios + las utilidades, necesarias .
Supuestamente, la key o la clave no la tiene, es lo que dice el log del principio .

Para DKMS, sería lo ideal, pero tiene que ser la versión de Oracle (si es así no solo tiene todo+ información, si no lo correspondiente a sus añadidos (eso si el ftp, de ellos sigue en marcha) .

En la wiki, en ese tiempo, apenas estábamos empezando lo de UEFI (haciendo pruebas con un i7 para el trabajo de jcsl) , por lo que no hay nada de uefi en esa parte, ahí mejor seguir lo que dice @karlggest ,

Y a mi lo que preveo, es que lo de Vbox, lo hace , con el sistema invitado , o sea con la iso, y activa el arranque seguro en la configuración de la instalación (o sea después de red, viene lo de arranque y si empezó con uefi , solo tiene que activarlo ahí (las claves que recuerde, las he visto en /boot/efi (siempre que sea un linux y openSUSE, si es otro S.O. llevara otras (recordar que /boot/efi/ es estándar, tanto lo tiene que llevar win, como mac, linux, adroide,etc , Es como está estipulado, lo mismo que las fat, tienen que ser 12,16,32, si mal no recuerdo) .

Para no alargar mucho el tema, si el Vbox funcional que te has bajado de los repos, son pocos archivos, es el compilado, en caso contrario, seria , muchos mas, utilidades para compilar, varios kernel, utilidades para Vbox, y en la instalación, en primer lugar DKMS (el cual crea un /etc/dkms) no puedes instalar Vbox, si no lo activas.y al final de todo, tienes que añadirte al grupo de Vbox en gestión de usuarios y grupos .

Saludos.

Intenta aportar datos, para saber por donde está el problema, de paso aprendemos nosotros de la experiencia , gracias y bien venido al foro.

Y lo que pienso es lo de antes, Vbox lo mas seguro este ok, lo que falla es el aporte del modulo a el S.O. invitado de las claves, por falta de algún archivo (cosa que comento @karlggest , y en la web, lo que si vi es que le faltaba un determinado kernel, para las keys ,

He instalado el virtualbox del repositorio de OpenSUSE.
Virtualbox en UEFI sin Secure Boot funciona. Si habilito el Secure Boot con el UEFI no funciona (porque necesita firmados los módulos de kernel para arrancarlos)

Hola mikrios,

Virtualbox tiene un comando que compila los drivers que necesita, ese comando lo dice en un error que lanza el propio software si no encuentra los drivers. Dicho comando es vboxconfig. Ese comando requiere cosas como el gcc, kernel-syms, etc., y compilarlos los compila, pero sin firma para el secure boot.

El problema está en el proceso de firmar los drivers.

Aunque virtualbox trajera los drivers ya compilados seguiría con el mismo problema, que el sistema acepte la firma que estoy añadiendo a los módulos. La versión del kernel aquí no debería ser un problema porque se está compilando para mi sistema.

Lo que me sorprende es que no he encontrado el proceso de firma de módulos documentado como otras cosas como por ejemplo hacer funcionar los codecs de video (que basicamente es añadir el repositorio packman).

He rebuscado bastante y generado los certificados ssl de diferentes formas, pero siempre pasa lo mismo, el modprobe rechaza el certificado.

Saludos,
Saidano

Hola, intenta con el de Oracle, hay una ftp, donde ademas del programa, está , los añadidos .

Ventajas : suele venir con todo, se puede usar DKMS (o sea que no necesitas copilar, cada vez que hay un cambio de kernel, dkms, se encarga de los módulos, para que Vbox sea compatible y siga funcionando) .

La información que está en la wiki, se hizo, antes del UEFI (en ese tiempo se estaba haciendo pruebas en icore 7, para crear un artículo , sobreUEFI, por lo que no se incluyo , ni por mi parte ,probé con Vbox) , todo lo que aquí se aprenda, nos ayudara con la experiencia , de lo que faltaba de antes.
Según la web, es un archivo el que provee, de esas firmas, o se hace la prueba, o bién se pregunta en el foro ingles, o donde se corresponde (instalarlo, el del report, suele llevar menos de 5 minutos , a mi fue tres ) con los resultados , se hace un reclamación de ello .

Aunque si esta seguro el anfitrión , no creo que tengas problemas con el invitado (el sistema virtualizado ) .

Saludos

A mi en su día el de openSUSE me daba problemas y no se si ha mejorado o no.

Prueba el de la propia casa, es el que yo utilizo sin problemas. Ojo, sale un texto diciendo que es para 15.3 pero no lo hagas caso.
https://download.virtualbox.org/virtualbox/rpm/opensuse/15.6/

Ojo, las versiones 15.x están unificadas en uno solo repositorio, lo veras en los enlaces del enlace de abajo. Selecciona tu versión de openSUSE que es el mismo de arriba.
https://download.virtualbox.org/virtualbox/rpm/opensuse/

Ya me contaras que tal.

PD: Te recomiendo encarecidamente que instales VirtualBox Extension Pack desde Descargas de la Web de VirtualBox, merece la pena y mucho porque las Maquinas Virtuales tendrá acceso a los puertos USB entre otros añadiodos.

Yo he conseguido con el repositorio del virtualbox
https://download.opensuse.org/repositories/Virtualization/

Y añadiendo (en algún foro vi) el certificado correcto para importar es

mokutil --import /etc/uefi/certs/1F673297-kmp.crt --root-pw

De esta forma cuando como el repo está preparado para la versión del kernel no hay nada mas que hacer porque ya van firmados.

Al menos a mi con el secureboot habilitado y el kernel lockdown activo, me carga los modulos.
Pero aún así , incluso habiendo añadido mi usuario al grupo vboxusers, la aplicación arranca, pero todas las máquinas virtuales fallan al intentar arrancarlas con el mensaje

The virtual machine ‘Debian12’ has terminated unexpectedly during startup because of signal 11.
|Código de resultado:|NS_ERROR_FAILURE (0x80004005)|
| — | — |
|Componente:|MachineWrap|
|Interfaz:|IMachine {e36a5081-a82a-40bd-9e4e-42a44d6ce50f}|

De hecho, si creo una máquina nueva también me da el mismo error.
No se como hacer que funcione.

Acabo de leer en el foro de virtualbox, el problema y la solución temporal hasta que lo solucionen en el repo.
El problema viene de que en los paquetes que hay en el repo oficial de VirtualBox y también el el repo de Virtualization de opensuse, deberían haber sido generados con dos archivos dentro

/usr/lib/virtualbox/libpthread.so
/usr/lib/virtualbox/libdl.so

Pero, como no están no arrancan las máquinas.
Pero haciendo un enlace de los que tienen en la propia distribución, ya funciona bien.

ln -s /lib64/libpthread.so.0 /usr/lib/virtualbox/libpthread.so
ln -s /lib64/libdl.so.2 /usr/lib/virtualbox/libdl.so

Con esto ya funciona perfectamente VirtualBox

1 Like

me pasó exactamente el mismo error. descargué fence-agents-vbox y virtualbox-host-source, reinicié y comenzó a funcionar, estos son los comandos:

sudo zypper in virtualbox-host-source fence-agents-vbox 
sudo reboot

si no te funciona simplemente borra ambos paquetes y prueba a instalar virtualbox-kmp rompiendo la dependencia con virtualbox-kmp-default