Pourquoi est-ce que j'obtiens «La clé requise n'est pas disponible» lors de l'installation de modules de noyau tiers ou après une mise à niveau du noyau?

79

Ce problème se produit uniquement sur les systèmes UEFI sur lesquels Secure Boot est activé.

Lorsque j'essaie d'installer des modules DKMS tels que les pilotes VirtualBox, Nvidia ou Broadcom, ils ne s'installent pas et je les ai Required key not availablequand je les essaie modprobe.

VirtualBox se plaint de vboxdrvne pas être chargé.

Le wlpilote Broadcom est présenté en lspci -ktant que module du noyau mais n’est pas utilisé. sudo modprobe wljette Required key not available.

De plus, ce problème peut survenir lorsque j'installe des modules du noyau à partir de sources git.

Ce problème peut apparaître après une mise à jour du noyau en tant qu'adaptateur sans fil désactivé, écran noir après un redémarrage, etc.

Comment puis-je le réparer?

Pilote6
la source
Similaire: askubuntu.com/questions/760671/…
Tor Klingberg le

Réponses:

85

Depuis le noyau Ubuntu 4.4.0-20, la EFI_SECURE_BOOT_SIG_ENFORCEconfiguration du noyau est activée. Cela empêche de charger des modules tiers non signés si UEFI Secure Boot est activé.

Le moyen le plus simple de résoudre ce problème consiste à désactiver le démarrage sécurisé dans les paramètres UEFI (BIOS).

Dans la plupart des cas, vous pouvez accéder aux paramètres UEFI à l'aide du menu de menu. Appuyez ESCsur le bouton au démarrage, entrez dans le menu de menu et sélectionnez Configuration du système. L'option de démarrage sécurisé doit figurer dans les sections "Sécurité" ou "Amorçage" de l'UEFI.

Vous pouvez entrer directement dans UEFI, mais cela dépend de votre matériel. Lisez le manuel de votre ordinateur pour savoir comment vous y rendre. Cela peut être Del, ou F2au démarrage, ou quelque chose d'autre.

Une autre solution consiste à désactiver Secure Boot à l'aide de mokutil.

Depuis la version 4.4.0-21.37 du noyau Ubuntu, ceci peut être corrigé en exécutant

sudo apt install mokutil
sudo mokutil --disable-validation

Il faudra créer un mot de passe. Le mot de passe doit comporter au moins 8 caractères. Après le redémarrage, UEFI vous demandera si vous souhaitez modifier les paramètres de sécurité. Choisissez "Oui".

Ensuite, il vous sera demandé de saisir le mot de passe créé précédemment. Certains micrologiciels UEFI ne demandent pas le mot de passe complet, mais bien quelques caractères, comme 1er, 3ème, etc. Soyez prudent. Certaines personnes ne comprennent pas cela. Je ne l'ai pas eu dès la première tentative non plus ;-)

Mise à jour: cette configuration de noyau est maintenant activée dans tous les noyaux Ubuntu pris en charge. Ubuntu 16.04, 15.10 et 14.04 sont affectés.

Pilote6
la source
Cela ne marche pas pour moi. @Sputnik répond. Mais je voudrais quand même savoir pourquoi mokutil me demande un mot de passe et quand en ai-je besoin?
Alwin Kesler Le
8
@AlwinKesler Il demande un mot de passe qu'il validera après le redémarrage, avant que les modifications apportées à la base de données MOK ne soient réellement effectuées. Sans cela, un processus non autorisé pourrait changer les clés de la base de données MOK qui entreront en vigueur après le prochain redémarrage. De plus, la plate-forme "sait" que la personne qui demande le changement est la même personne que celle qui est physiquement présente après le redémarrage et a donc adopté les mesures de sécurité matérielles, telles que l'accès physique à la machine et la connaissance du mot de passe du système au moment de son démarrage. .
Zwets
@ Pilot6: Je suis toujours sur Ubuntu 14.04 LTS en raison de problèmes techniques. Merci beaucoup d'avoir mis à jour la réponse.
Ravi Joshi
3
Travaillé pour moi sur Ubuntu 18.04. Je ne pouvais pas comprendre pourquoi les pilotes nvidia n’avaient pas été installés, ni même en revenant à 16.04. Gah! Cela l'a corrigé. Tant de temps perdu.
Nate
1
Mon système Ubuntu était vraiment lent. Cela n'avait aucun sens puisqu'il s'agissait d'un tout nouvel ordinateur portable. Maintenant, je réalise que le processeur faisait tout et que ma carte vidéo était restée inactive tout le temps. Ce lien a également aidé - linuxbabe.com/ubuntu/install-nvidia-driver-ubuntu-18-04
Peter Drinnan le
32

Comme suggéré par l'utilisateur @zwets, je copie (avec les modifications) une réponse ici:

Depuis la version 4.4.0-20 du noyau, il a été décidé que les modules du noyau non signés ne seraient pas autorisés à s'exécuter avec Secure Boot activé. Si vous souhaitez conserver Secure Boot et également exécuter ces modules, l'étape logique suivante consiste à signer ces modules.

Alors essayons.

  1. Créer des clés de signature

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
    
  2. Signer le module

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

Remarque 1 : Il peut y avoir plusieurs fichiers à signer pour un seul pilote / module, il /path/to/modulepeut donc être nécessaire de les remplacer $(modinfo -n <modulename>), par exemple$(modinfo -n vboxdrv)

Note 2 : sudo kmodsign sha512 ./MOK.priv ./MOK.der /path/to/moduleest une alternative si sign-filen'est pas disponible.

  1. Enregistrez les clés pour sécuriser le démarrage

    sudo mokutil --import MOK.der
    

    Fournissez un mot de passe pour une utilisation ultérieure après le redémarrage

  2. Rebootet suivez les instructions pour inscrire MOK (clé du propriétaire de la machine). Voici un échantillon avec des images. Le système redémarre une fois de plus.

Si la clé a été correctement enregistrée, elle apparaîtra sous sudo mokutil --list-enrolled.

Faites-moi savoir si vos modules fonctionneraient de cette façon sur Ubuntu 16.04 (sur le noyau 4.4.0-21, je crois).

Ressources: Article détaillé sur le site Web pour la mise en œuvre par Fedora et Ubuntu de la signature de module. (ils y travaillent) ;-)

Ressource supplémentaire: j'ai créé un script bash pour mon propre usage à chaque virtualbox-dkmsmise à niveau et écrase ainsi les modules signés. Découvrez mon vboxsignorigine sur GitHub .

Note complémentaire pour la sécurité (extra) consciente: ;-)

Étant donné que la clé privée que vous avez créée ( MOK.privdans cet exemple) peut être utilisée par toute personne pouvant y accéder, il est recommandé de la garder en sécurité. Vous pouvez le chmodfaire, le chiffrer ( gpgou le stocker) ou le stocker ailleurs dans un coffre-fort (r). Ou, comme indiqué dans ce commentaire , supprimez l'option -nodesà l'étape numéro 1. Cela chiffrera la clé avec une phrase secrète.

Majal
la source
Sous Ubuntu 14.10, j'ai continué à voir «clé requise non disponible» essayant d'installer un pilote broadcom compilé à partir du code source, malgré l' enregistrement préalable de la clé et la signature du pilote. Désactiver la validation a fonctionné.
Mark
1
Cela a fonctionné pour moi pour VirtualBox et Ubuntu 16.04.
YtvwlD
1
Le message d'erreur suivant à l'étape 3 s'affiche: "Les variables EFI ne sont pas prises en charge sur ce système". "dmesg" n'a aucune entrée efi ("dmesg | grep efi" n'a aucun résultat) Que puis-je faire? Merci
musbach
Vous pouvez remplacer le chemin par $ (modinfo -n modulename)
Shane
Sur Ubuntu 18.04 ici, insmod pour le module talpa_syscallhook.ko continue en disant "Clé requise non disponible", alors que j'ai signé ce module et tous les autres modules du même répertoire pour Sophos AV au cas où. La clé a été enregistrée avec succès car je peux la voir lorsque je liste toutes les clés mok. Des idées sur la façon de procéder?
Fran Marzoa
6

Vous pouvez désactiver le démarrage sécurisé (UEFI) dans le BIOS en procédant comme suit:

  1. Redémarrez votre ordinateur et entrez dans le menu du BIOS (dans mon cas, appuyez sur F2)

  2. Recherchez Secure Boot et passez à Legacy

Dans une carte mère ASUS:

  • Accéder au mode avancé (F7)
  • Allez dans l'option de démarrage sécurisé dans la section de démarrage
  • Changez le "mode Windows UEFI" avec "Autre système d'exploitation"
  • Enregistrer et redémarrer pour appliquer les paramètres (F10)
Spoutnik
la source
2
Secure Boot et "Legacy" sont des paramètres différents.
Pilot6
Mais si "Legacy Boot" est activé au lieu de UEFI, cela signifie-t-il que Secure Boot n'est pas activé?
Supernormal
@Supernormal, oui, c'est ce que j'ai compris.
Sputnik
3

Vous pouvez également désactiver le démarrage sécurisé dans l'exécution en cours sudo update-secureboot-policy. Cette page wiki explique cette méthode:

  • Ouvrez un terminal (Ctrl + Alt + T), exécutez sudo update-secureboot-policy, puis sélectionnez Oui.
  • Entrez un mot de passe temporaire entre 8 et 16 chiffres. (Par exemple, 12345678, nous utiliserons ce mot de passe plus tard
  • Entrez à nouveau le même mot de passe pour confirmer.
  • Redémarrez le système et appuyez sur n’importe quelle touche lorsque l’écran bleu apparaît (Gestion MOK
  • Sélectionnez Modifier l'état de démarrage sécurisé.
  • Entrez le mot de passe que vous avez sélectionné à l'étape 2 et appuyez sur Entrée.
  • Sélectionnez Oui pour désactiver le démarrage sécurisé dans Shim-Signed.
  • Appuyez sur la touche Entrée pour terminer toute la procédure.

Vous pouvez toujours activer Secure Boot dans une nouvelle signature avec shim. Il suffit d'exécuter

sudo update-secureboot-policy --enable, puis suivez les étapes ci-dessus

Kent Lin
la source