Está en la página 1de 3

PROCEDIMIENTO PARA FIRMAR UN MÓDULO QUE NO LO ESTÁ.

A veces VMWare o VirtualBox no arrancan porque algún módulo asociado no está firmado con una
pareja de claves públicas/privadas (por lo visto es un problema que sale en las últimas versiones de
kernels). Y cuando actualizas vuelves a tener el problema.

Para ver si todo va bien, con vmware:

sudo /etc/init.d/vmware restart

Stopping VMware services:


VMware Authentication Daemon done
VM communication interface socket family done
Virtual machine communication interface done
Virtual machine monitor done
Blocking file system done
Starting VMware services:
Virtual machine monitor failed
Virtual machine communication interface done
VM communication interface socket family done
Blocking file system done
Virtual ethernet failed
VMware Authentication Daemon done

Vemos que en este caso, fallan el Virtual machine monitor (vmmon) y el Virtual eternet (vmnet).

Con el siguiente comando nos diría cuál es el problema:

sudo modprobe vmmon


modprobe: ERROR: could not insert 'vmmon': Required key not available

Es decir, se requiere una pareja de claves públicas privadas para firmar ese módulo.

Con el siguiente comando vemos dónde está la librería del módulo:


modinfo vmmon
filename: /lib/modules/4.8.0-58-generic/misc/vmmon.ko
supported: external
license: GPL v2
description: VMware Virtual Machine Monitor.
author: VMware, Inc.
srcversion: 3665CAD46F507EF6C532CF4
depends:
vermagic: 4.8.0-58-generic SMP mod_unload modversions

Ya solo queda firmarlo, utilizando una pareja de claves que previamente se haya generado.
Para generar una pareja de claves pública/privada siguiendo el estándar X.509:

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der
-nodes -days 36500 -subj "/CN=Akrog/"
Donde se puede reemplazar MOK por el nombre que se le quiera dar al archivo que almacena tanto
la clave privada (.priv) como la clave pública (.der) y donde pone Akrog poner el nombre de la
empresa real, por ejemplo. También se pueden modificar los valores de número de bits, algoritmo
de encriptación y demás.

Con las claves generadas, firmamos el módulo:

sudo /usr/src/linux-headers-4.8.0-58-generic/scripts/sign-file sha256 ./cthulu.priv ./cthulu.der


/lib/modules/4.8.0-58-generic/misc/vmmon.ko

En el comando anterior el script de firma se encuentra en ese directorio para las versiones de
Ubuntu por encima de la 16 (en versiones anteriores hay que buscarlo en otro directorio). Y también
supone que en el directorio actual (.) se hayan dos claves: chtulu.priv (privada) y cthulu.der
(pública) generadas con el comando de más arriba.

Para firmar cualquier otro módulo, repetiríamos el proceso. Por ejemplo, para el vmnet:

modinfo vmnet
filename: /lib/modules/4.8.0-58-generic/misc/vmnet.ko
supported: external
license: GPL v2
description: VMware Virtual Networking Driver.
author: VMware, Inc.
srcversion: A861CE611E742C9FFC7007A
depends:
vermagic: 4.8.0-58-generic SMP mod_unload modversions
parm: vnet_max_qlen:Maximum queue length of the vmnet, default is 1024, maximum is
1024 (uint)

sudo modprobe vmnet


modprobe: ERROR: could not insert 'vmnet': Required key not available

sudo /usr/src/linux-headers-4.8.0-58-generic/scripts/sign-file sha256 ./cthulu.priv ./cthulu.der


/lib/modules/4.8.0-58-generic/misc/vmnet.ko

Después de eso, todos los módulos están correctos y arrancará sin problema.

sudo /etc/init.d/vmware restart


Stopping VMware services:
VMware Authentication Daemon done
VM communication interface socket family done
Virtual machine communication interface done
Virtual machine monitor done
Blocking file system done
Starting VMware services:
Virtual machine monitor done
Virtual machine communication interface done
VM communication interface socket family done
Blocking file system done
Virtual ethernet done
VMware Authentication Daemon done
Shared Memory Available done
OJO: CADA VEZ QUE SE RECOMPILE EL KERNEL SERÁ NECESARIO REALIZAR
ESTE PROCESO. EN /USR/SRC SE CREARÁ AUTOMÁTICAMENTE OTRA CARPETA
DE LINUX-HEADERS-XXX, CON XXX SIENDO LA NUEVA VERSIÓN CON LA QUE
HABRÁ QUE REALIZAR LA FIRMA SEGÚN LO ESTIPULADO MÁS ARRIBA.

PROBLEMAS DE CARGA DE LOS CONTROLADORES VMNET (PONER EN MODO


PROMISCUO).

Hay un problema cada vez que se cierra la sesión con Linux: Los controladores vmnet en /dev se
quedan sin permisos de lectura y escritura para usuarios que no sean el root, lo que evita que esas
interfaces de red virtuales se puedan poner en modo promiscuo. Para evitarlo, cada vez que se
reinicie la sesión, es necesario conferirle permisos de lectura y escritura a todos los usuarios:

sudo chmod a+rw /dev/vmnet*

(OJO: Si no están estos controladores, tendré que entrar en Virtual Network Editor de VMWare para
que los genere automáticamente).

También podría gustarte