Módulo de Assinatura em Placas Não UEFI

0

Estou no Ubuntu 16.04 com o kernel 4.4.0-57 e quero instalar um módulo feito por você mesmo. O BIOS é um BIOS que não é UEFI (Kontron 986LCD-M / mITX).

Eu tentei assinar o módulo seguindo este procedure mas o resultado do passo 3 ( sudo mokutil --import MOK.der ) é EFI variables are not supported on this system .

Eu tentei seguir esta receita , mas não posso encontrar as chaves públicas.

Como posso assinar um módulo em uma placa que não seja UEFI?

=============================================== =====

Atualização 1: Parece ser um conto de fadas que somente módulos rodando com um UEFI Bios precisam usar módulos assinados sob 16.04:

I use as grub option: 'GRUB_CMDLINE_LINUX=" acpi_enforce_resources=lax"'. 

I get the error 'module verification failed: signature and/or required key missing - tainting kernel' in dmesg if I try to load a module via modprobe.

'sudo mokutil --disable-validation' returns the error 'EFI variables are not supported on this system'

================ Atualização 1 ============================= ======================

Desculpe, mas esta afirmação está errada:

The procedure to which you refer describes disabling Secure Boot validation, not signing modules. There's no need to sign kernel modules on non-UEFI systems, since Secure Boot is exclusively a UEFI feature.

O kernel deve funcionar desta forma não funciona. Eu experiance porque eu recebo sempre a mensagem de erro Eu recebo o error module verification failed: signature and/or required key missing - tainting kernel no dmesg e o kernel não está carregado.

================ Atualização 2 ============================= ====================== Como posso instalar o shim em uma placa-mãe que não seja da uefi:

# aptitude search shim
p   grub-splashimages                                   - a collection of great GRUB splashimages
p   grub2-splashimages                                  - a collection of great GRUB2 splashimages
p   libjs-es5-shim                                      - ECMAScript 5 compat. shims for old JavaScript engines (library
p   libjs-es6-shim                                      - ECMAScript 6 compat. shims for legacy JavaScript engines (libr
p   node-es5-shim                                       - ECMAScript 5 compat. shims for old JavaScript engines (Node.js
p   node-es6-shim                                       - ECMAScript 6 compat. shims for legacy JavaScript engines (Node
p   olpc-kbdshim                                        - Dienst zur OLPC-XO-Tastaturunterstützung
v   olpc-kbdshim-common                                 -
v   olpc-kdbshim-hal                                    -
p   ruby-launchy-shim                                   - helper class for launching a web browser
p   shimmer-themes                                      - Gtk+ themes from Shimmer Project
p   shimmer-wallpapers                                  - Wallpapers from Shimmer Project
p   systemd-shim                                        - shim für systemd
p   yoshimi                                             - Software-Synthesizer, basiert auf ZynAddSubFX
p   yoshimi-data                                        - Voreinstellungen für Yoshimi

systemd-shim está correto? Acredito que não funcionará porque é um MB não-uefi ...

    
por musbach 07.01.2017 / 22:50

2 respostas

0

É um bug enorme no Ubuntu. mokutil e MokManager só podem assinar seus próprios módulos se você tiver o MB que suporta o uefi. MB mais antigos no Ubuntu 16.04 que não suportam o uefi não podem assinar módulos com mokutil e MokManager . Você sempre receberá respostas como EFI variables are not supported on this system ou similar.

Afirma-se que a assinatura é ativada apenas pelo kernel para o uefi MB. Me desculpe, mas isso está errado. Isto também é mostrado, e. por esses parâmetros do kernel:

CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_UEFI=y
CONFIG_MODULE_SIG_SHA512=y
CONFIG_MODULE_SIG_HASH="sha512"
CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE=y
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_CHECK_SIGNATURE=y
CONFIG_SIGNATURE=y

Como eu disse, este é o parâmetro do kernel para um MB que não seja uefi e que não faz sentido, especialmente CONFIG_MODULE_SIG_UEFI=y .

Você tem que recompilar o kernel e desativar as opções de assinatura. Eles podem ser encontrados por grep -v ^# /boot/config-$(uname -r) | grep _SIG . Especialmente CONFIG_MODULE_SIG e CONFIG_MODULE_SIG_ALL devem ser definidos como n . No entanto, isso tem uma clara desvantagem porque você precisa colocar a atualização do kernel em espera e terá que recompilar cada novo kernel. É frustrante.

    
por user618061 12.01.2017 / 21:27
-1

O procedimento ao qual você se refere descreve a desativação da validação da Inicialização Segura, não a assinatura de módulos. Não há necessidade de assinar módulos do kernel em sistemas não-UEFI, já que o Secure Boot é exclusivamente um recurso UEFI.

Dito isto, se você quisesse assinar módulos do kernel em um sistema não-UEFI, você deveria ser capaz de fazê-lo. (Eu não tentei, mas o AFAIK todas as ferramentas são ferramentas do espaço do usuário do Linux que não dependem do Secure Boot disponível ou ativo.) Você pode fazer isso se quiser construir um pacote com módulos assinados para instalação em outros sistemas. Note que você precisará instalar suas próprias chaves nos sistemas de destino, o que pode ser entediante; veja abaixo para ponteiros. Para assinar módulos do kernel:

  1. Crie um conjunto de chaves de assinatura. Esta é uma tarefa complexa. Eu recomendo que você leia a minha página no Secure Boot para obter informações sobre a criação de chaves de assinatura.
  2. Localize o binário sign-file . Este binário não é normalmente instalado onde os binários do Linux estão instalados; em vez disso, ele vem com cabeçalhos de kernel. O comando find /usr/src/ -name sign-file deve localizá-lo se estiver instalado em seu sistema. Se este comando não retornar nada, você deve instalar um pacote de cabeçalhos do kernel.
  3. Assinar o binário com um comando como /path/to/sign-file sha256 /key/path/your.key /key/path/your.cer /path/to/module/module.ko

Neste ponto, o binário module.ko será assinado com sua chave ( your.key e your.cer ). Para ser usada, sua chave deve ser registrada no sistema de destino, presumivelmente na lista MOK. Para fazer isso, você deve instalá-lo com MokManager.efi , conforme detalhado na minha página de inicialização segura.

Gostaria de enfatizar novamente, porém, que assinar módulos do kernel não é necessário, exceto em sistemas que estão inicializando no modo UEFI com inicialização segura ativa - e, mesmo assim, é necessário apenas para módulos de kernel de terceiros ou compilados localmente, como drivers de vídeo comerciais ou módulos de kernel do VirtualBox. A maioria dos módulos do kernel fornecidos com o kernel do Ubuntu já estão assinados com a mesma chave canônica usada para assinar o GRUB e o arquivo principal do kernel do Ubuntu.

    
por Rod Smith 08.01.2017 / 19:09