2016-06-03 4 views
2

Поскольку у меня есть безопасная загрузка Ubuntu 16.04, мне нужно подписать vboxdrv.Невозможно подписать модуль (vboxdrv)

создать ключей подписи с помощью:

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

Тогда я знаком модуля:

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

Однако, когда я называю:

MODINFO vboxdrv

Модуль не Подтверждение подлежит подписанию:

$ 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)

Я затем запустить:

sudo mokutil --import MOK.der 

И перезагрузка, которая побуждает меня импортировать ключ владельца машины.

Однако это не удается (неверный параметр (2)).

Я думаю, что из-за того, что модуль не был подписан ранее, поскольку работающий modinfo vboxdrv должен подтвердить, что модуль был подписан.

+0

Я подал ошибку против 'mokutil' здесь: https://bugs.launchpad.net/ubuntu/+source/mokutil/+bug/1600452 и против' shim' здесь https://github.com/rhinstaller/ shim/issues/55 – adempewolff

+0

Это уже исправлено разработчиком прокладки (я тестировал его, и он работает). Я обновил свой ответ соответственно. – adempewolff

ответ

3

Это связано с тем, что прошивка Lenovo не поддерживает EFI_VARIABLE_APPEND_WRITE. Один из разработчиков прошивки уже переписал MokManager.efi для работы на затронутых машинах Lenovo, хотя неясно, как долго это будет объединено и выведено вниз по течению от Ubuntu. Вы можете следить за выпуском журнала отслеживания github gimub here.

Если вы не можете ждать (виновным в качестве обвинения), вы можете скомпилировать прокладку и протестировать ее самостоятельно.

Если у вас нет git, gnu-efi, libnss3-toolspesign и вам необходимо установить их первую (подробнее о настройке среды разработки EFI можно найти here, я использую довольно новую установку Ubuntu 16,04, но вполне возможно, что я установил требуются другие библиотеки/инструменты и забыл о них - просто искать ошибки при компиляции и установки недостающие пакеты как neccesary):

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

Далее клонировать ветвь git с патчем:

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

Далее вам необходимо изменить Makefile (подкладок разработчики не используют Ubuntu)

gedit Makefile 

Внести следующие изменения (кредит на эту 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 

Следующая Вы» Вам нужно будет прокомментировать неиспользованную переменную в прокладке.с:

gedit shim.c 

сделать следующие изменения в строке 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; 

Compile прокладка:

make 

Выключить безопасную загрузку временно:

sudo mokutil --disable-validation 

Установите пароль , перезагрузитесь и следуйте инструкциям (пароль сложный, он просит вас ввести определенные символы из пароля, а не всего).

резервного копирования MokManager.efi и дважды проверьте, что резервное копирование:

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

Переместите исправленную версию MokManager в раздел EFI.

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

Записаться ключ (изменять по мере необходимости в зависимости от того, где вы ключ и то, что он называется):

sudo mokutil --import MOK.der 

Установить пароль, перезагрузка и следуйте инструкциям, чтобы зарегистрировать его Мок. На машинах Lenovo это должно получиться.

Revert к оригинальной версии MokManager и 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 

Установить пароль, перезагрузка, следуйте инструкциям.

Подпишите свои модули, загрузите их с modprobe и наслаждайтесь!

Примечание: надеюсь, что это будет официально исправлено в большинстве репозиториев дистрибутива в ближайшее время. Этот ответ является вариантом для исключительно нетерпеливых людей, которым удобно создавать патч из источника и тестировать его. Он работал на моей машине (Lenovo P50), но это не значит, что она будет работать для всех. Если вам неудобно создавать приложения efi из источника, просто подождите, пока исправленная версия попадет в репозитории (в этот момент я обновлю этот ответ).

+0

Зафиксирован ли этот PPA? https://launchpad.net/~cyphermox/+archive/ubuntu/efi –