2016-06-03 1 views
2

Étant donné que j'ai un démarrage sécurisé sur Ubuntu 16.04 activé, je dois signer vboxdrv.Impossible de signer le module (vboxdrv)

Je crée des clés de signature à l'aide:

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

Je signe le module:

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv) 

Cependant, quand je l'appelle:

modinfo vboxdrv

Le module n'est pas confirmé à être signé:

$ modinfo vboxdrv filename: /lib/modules/4.4.0-22-generic/updates/dkms/vboxdrv.ko version: 5.0.18_Ubuntu (0x00240000) license: GPL description: Oracle VM VirtualBox Support Driver author: Oracle Corporation srcversion: 316C2AE8082B5DFBAABE7EA depends:
vermagic: 4.4.0-22-generic SMP mod_unload modversions parm: force_async_tsc:force the asynchronous TSC mode (int)

Je lance alors:

sudo mokutil --import MOK.der 

Et redémarrage, ce qui me pousse à importer une clé de propriétaire de la machine.

Cependant, cela échoue (paramètre invalide (2)).

Je pense que c'est dû au fait que le module n'a pas été signé plus tôt, car vinfodrv devrait confirmer que le module a été signé.

+0

J'ai déposé un bug contre 'mokutil' ici: https://bugs.launchpad.net/ubuntu/+source/mokutil/+bug/1600452 et contre' shim' ici https://github.com/rhinstaller/ shim/issues/55 – adempewolff

+0

Cela a déjà été corrigé par un développeur shim (je l'ai testé et ça marche). J'ai mis à jour ma réponse en conséquence. – adempewolff

Répondre

3

Cela est dû au fait que le microprogramme Lenovo ne prend pas en charge EFI_VARIABLE_APPEND_WRITE. L'un des développeurs de shim a déjà réécrit MokManager.efi pour qu'il fonctionne sur les machines Lenovo concernées, mais on ne sait pas combien de temps cela prendra pour fusionner et tirer vers le bas par Ubuntu. Vous pouvez suivre le problème sur le suiveur de problème github de shim here.

Si vous ne pouvez pas attendre (coupable selon la charge), vous pouvez compiler et tester vous-même.

Si vous n'avez pas git, gnu-efi, libnss3-tools et pesign vous aurez besoin de les installer en premier (plus d'informations sur la mise en place d'un environnement de développement EFI se trouvent here, j'utilise une assez nouvelle installation d'Ubuntu 16,04, mais il est possible que je l'ai installé requis autres bibliothèques/outils et oublié à leur sujet - il suffit de regarder les erreurs lors de la compilation et installer les paquets manquants comme neccesary):

sudo apt-get install git gnu-efi libnss3-tools pesign 

Ensuite, clone la branche du dépôt git avec le patch:

cd /src 
git clone -b fix-lenovo-write https://github.com/lcp/shim.git 
cd shim 

Ensuite, vous devrez modifier le Makefile (les développeurs shim n'utilisent pas Ubuntu)

gedit Makefile 

Effectuez les modifications suivantes (crédit à cette post):

-OBJCOPY_GTE224 = $(shell expr `$(OBJCOPY) --version |grep ^"GNU objcopy" | sed 's/^.version //g' | cut -f1-2 -d.` \>= 2.24) 
+#OBJCOPY_GTE224 = $(shell expr `$(OBJCOPY) --version |grep ^"GNU objcopy" | sed 's/^.version //g' | cut -f1-2 -d.` \>= 2.24) 
+OBJCOPY_GTE224 = 1 

-LIB_PATH  = /usr/lib64 
+LIB_PATH  = /usr/lib 

-EFI_PATH  := /usr/lib64/gnuefi 
+EFI_PATH  := /usr/lib 

Ensuite, vous » ll faut commenter une variable inutilisée dans shim.c:

gedit shim.c 

Faites le changement suivant à la ligne 1118:

@@ -1118,7 +1118,7 @@ static EFI_STATUS handle_image (void *data, unsigned int datasize, 
     EFI_STATUS efi_status; 
     char *buffer; 
     int i; 
-  unsigned int size; 
+  //unsigned int size; 
     EFI_IMAGE_SECTION_HEADER *Section; 
     char *base, *end; 
     PE_COFF_LOADER_IMAGE_CONTEXT context; 

cale Compile:

make 

Désactiver démarrage sécurisé temporairement:

sudo mokutil --disable-validation 

Définissez votre mot de passe , redémarrez et suivez les instructions tions pour désactiver le démarrage sécurisé (le mot de passe est difficile, il vous demande d'entrer certains caractères du mot de passe plutôt que le tout).

sauvegarde MokManager.efi et vérifiez qu'il est sauvegardé:

sudo mv /boot/efi/EFI/ubuntu/MokManager.efi /boot/efi/EFI/ubuntu/MokManager.efi.bak 
sudo ls /boot/efi/EFI/ubuntu/ 

Déplacez votre version patchée de MokManager à la partition EFI.

sudo mv ./MokManager.efi.signed /boot/efi/EFI/ubuntu/MokManager.efi 

Inscrivez votre clé (modifier si nécessaire en fonction de l'endroit où vous saisissez est et ce qu'il porte le nom):

sudo mokutil --import MOK.der 

Définir mot de passe, redémarrez et suivez les instructions pour s'inscrire MOK. Il devrait réussir sur les machines Lenovo maintenant.

Revert à la version originale de sécurité-boot MokManager et renable:

sudo mv /boot/efi/EFI/ubuntu/MokManager.efi ./MokManager.efi.signed 
sudo mv /boot/efi/EFI/ubuntu/MokManager.efi.bak /boot/efi/EFI/ubuntu/MokManager.efi 
sudo mokutil --enable-validation 

Définir mot de passe, redémarrage, suivez les instructions.

Signer vos modules, les charger avec modprobe et profitez-en!

Note: J'espère que cela sera officiellement corrigé dans la plupart des dépôts de la distribution assez bientôt. Cette réponse est une option pour les personnes exceptionnellement impatientes qui sont à l'aise de construire le patch depuis la source et de le tester. Cela a marché sur ma machine (Lenovo P50) mais cela ne veut pas dire que ça marchera pour tout le monde. Si vous n'êtes pas à l'aise avec la création d'applications efi à partir de la source, attendez que la version patché atteigne les repos (à quel moment je mettrai à jour cette réponse).

+0

Cet APM est-il correctif? https://launchpad.net/~cyphermox/+archive/ubuntu/efi –