53 votes

Comment signer un module du noyau Ubuntu 18.04

J'utilise Ubuntu pour la première fois. J'essaie d'installer Genymotion pour avoir accès à un émulateur Android. Afin d'utiliser Genymotion, il est nécessaire d'avoir VirtualBox. J'ai installé VirtualBox mais il semble que je doive signer un module kernal... et je ne sais vraiment pas comment faire. Voici le message d'erreur que j'obtiens après avoir lancé /sbin/vboxconfig :

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.  If your system is using EFI Secure Boot you may need to sign the
kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load
them. Please see your Linux system's documentation for more information.

J'ai essayé de chercher sur Google, mais je n'arrive pas à trouver une réponse claire et concise avec des étapes séquentielles. Encore une fois, je suis assez novice en linux, donc toute aide est la bienvenue. Merci d'avance à tous ceux qui me répondront.

70voto

balast Points 741

Pour faire fonctionner VirtualBox sans désactiver le Secure Boot de l'UEFI, vous devez procéder comme suit :

  1. Créez une paire de clés RSA personnelle publique/privée pour signer les modules du noyau. Comme recommandé dans le lien ci-dessous, j'ai choisi de stocker la paire de clés dans le répertoire /root/module-signing/.

    sudo -i
    mkdir /root/module-signing
    cd /root/module-signing
    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=YOUR_NAME/"
    chmod 600 MOK.priv 
  2. Utilisez mokutil, un outil permettant d'importer ou de supprimer les clés du propriétaire de la machine (MOK), pour importer la clé publique et l'enregistrer lors du redémarrage de la machine. Le mot de passe utilisé dans cette étape est un mot de passe temporaire dont vous n'aurez à vous souvenir que pendant quelques minutes.

    mokutil --import /root/module-signing/MOK.der
    input password:
    input password again:
  3. Redémarrer la machine. Lorsque le chargeur de démarrage démarre, vous devriez voir un écran vous demandant d'appuyer sur un bouton pour entrer dans l'utilitaire EFI du gestionnaire MOK. Notez que tout clavier externe ne fonctionnera pas à cette étape. Sélectionnez Enroll MOK dans le premier menu, puis continuez, et sélectionnez Yes pour enregistrer les clés, et entrez à nouveau le mot de passe établi à l'étape 2. Sélectionnez ensuite OK pour poursuivre le démarrage du système.

  4. Les futures mises à jour du noyau nécessiteront de signer à nouveau les noyaux mis à jour, il est donc logique de placer les commandes de signature dans un script qui peut être exécuté à une date ultérieure si nécessaire. Un exemple de script /root/module-signing/sign-vbox-modules est donné ci-dessous.

    !/bin/bash

    for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do echo "Signing $modfile" /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \ /root/module-signing/MOK.priv \ /root/module-signing/MOK.der "$modfile" done

  5. Ajoutez la permission d'exécution et exécutez le script ci-dessus en tant que root à partir du répertoire /root/module-signing/.

    sudo -i
    cd /root/module-signing
    chmod 700 /root/module-signing/sign-vbox-modules
    ./sign-vbox-modules
  6. Chargez le module vboxdrv et lancez VirtualBox.

    modprobe vboxdrv 

La plupart de ces informations ont été obtenues à partir du lien suivant et peuvent être consultées pour obtenir des informations complémentaires. https://stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail/ .

22voto

Arindam Ghosh Points 35

Je sais que cette question est ancienne, mais comme il n'y a pas de réponse acceptée et qu'aucune de ces réponses n'a résolu le problème pour moi, j'écris aujourd'hui comment j'ai résolu cette question :

Lors de l'exécution de cette commande, j'obtiens l'erreur suivante :

$ sudo modprobe vboxdrv
modprobe: ERROR: could not insert 'vboxdrv': Required key not available

Le problème est que le module n'est pas signé et n'est donc pas chargé avec le noyau. Cela se produit si le mode SecureBoot est activé sur votre ordinateur, ce qui est très courant dans les équipements modernes.

C'est pourquoi j'obtiens cette erreur en ouvrant n'importe quelle machine dans la boîte virtuelle.

Le pilote du noyau n'est pas installé (rc=-1908)

Suivez les étapes suivantes pour signer un pilote, et il est chargé en tant que module du noyau, sur les systèmes Ubuntu et également sur Debian 9 :

  1. Installer le mkutil pour pouvoir signer.

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install mokutil
  2. Générer le fichier de signature :

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
  3. Puis l'ajouter au noyau :

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
  4. L'enregistrer pour le Secure Boot.

    IMPORTANT ! Cela vous demandera un mot de passe, mettez celui que vous voulez, vous n'aurez à l'utiliser qu'une seule fois lors du prochain redémarrage.

    sudo mokutil --import MOK.der
  5. Enfin, redémarrez l'ordinateur. Un écran bleu apparaît avec un clavier d'attente, appuyez sur la touche qui vous demande d'interrompre le démarrage.

    enter image description here

Lorsque vous êtes dans l'écran bleu, sélectionnez

Enroll MOK -> Continue -> et il vous demandera votre mot de passe.

que vous avez préalablement introduite, vous la saisirez et vous serez informé que l'opération s'est déroulée avec succès.

Votre système d'exploitation démarre et vous pouvez maintenant utiliser VirtualBox sans problème :)

J'espère que cela aidera quelqu'un.

6voto

ejaenv Points 161

J'ai rencontré ce problème. Désactiver Secure Boot : https://wiki.ubuntu.com/UEFI/SecureBoot/DKMS

6voto

John Points 61

J'ai eu le même problème sur Ubuntu 20.04, mais je ne comprenais pas pourquoi. J'ai essayé toutes les options ci-dessus, mais elles n'ont pas vraiment fonctionné pour moi. La signature des paquets semble un peu complexe et inutile, donc je ne suis pas sûr d'avoir bien fait les choses, mais j'ai réussi à comprendre et à résoudre le problème.

Je me suis rendu compte que ce problème ne survenait qu'après une mise à jour du noyau et de la base de données. Si vous compilez manuellement un programme sur votre système et que vous mettez à jour votre noyau ou votre système d'exploitation, vous obtenez le même problème.

La solution a consisté à installer le virtualbox-dkms paquet. Si vous regardez les paquets d'installation sur Synaptic Package Manager, vous en trouverez beaucoup. (J'avais virtualbox-6.1 )

Si vous n'êtes pas sûr, exécutez la commande suivante :

sudo apt install --reinstall virtualbox-dkms

Il demandera d'abord de désinstaller la version actuelle s'il ne s'agit pas du DKMS et demandera de taper -y pour confirmer. (Remarque : cette opération ne supprime pas vos machines virtuelles).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X