Por que recebo a “Chave necessária não disponível” quando instalo módulos do kernel de terceiros ou após uma atualização do kernel?

70

Esse problema ocorre apenas em sistemas UEFI com inicialização segura ativada.

Quando tento instalar módulos DKMS como o VirtualBox, Nvidia ou Broadcom, eles não são instalados e eu recebo Required key not available quando tento modprobe .

O VirtualBox reclama que vboxdrv não está carregado.

O driver Broadcom wl é mostrado em lspci -k como um módulo do kernel, mas não está em uso. sudo modprobe wl lança Required key not available .

Além disso, este problema pode acontecer quando eu instalo alguns módulos do kernel a partir de fontes git.

Este problema pode aparecer após uma atualização do kernel como adaptador wireless desativado, tela preta após uma reinicialização, etc.

Como posso corrigir isso?

    
por Pilot6 25.04.2016 / 09:48

4 respostas

77

Desde o kernel do Ubuntu 4.4.0-20, a configuração do kernel EFI_SECURE_BOOT_SIG_ENFORCE foi ativada. Isso impede o carregamento de módulos de terceiros não assinados se a Inicialização Segura da UEFI estiver ativada.

A maneira mais fácil de corrigir esse problema é desativar a Inicialização Segura nas configurações UEFI (BIOS).

Na maioria dos casos, você pode entrar nas configurações de UEFI usando o menu do grub. Pressione o botão ESC na inicialização, entre no menu do grub e selecione Configuração do sistema. A opção de inicialização segura deve estar na seção "Segurança" ou "Inicialização" do UEFI.

Você pode entrar diretamente no UEFI, mas isso depende do seu hardware. Leia o manual do seu computador para ver como chegar lá. Pode ser Del , ou F2 na inicialização, ou qualquer outra coisa.

Uma maneira alternativa é desabilitar o Secure Boot usando mokutil .

Desde a versão 4.4.0-21.37 do kernel do Ubuntu, isso pode ser corrigido executando

sudo apt install mokutil
sudo mokutil --disable-validation

Será necessário criar uma senha. A senha deve ter pelo menos 8 caracteres. Após a reinicialização, a UEFI perguntará se você deseja alterar as configurações de segurança. Escolha "Sim".

Em seguida, você será solicitado a inserir a senha criada anteriormente. Algum firmware UEFI solicita a senha completa, mas para inserir alguns caracteres, como 1º, 3º, etc. Tenha cuidado. Algumas pessoas não entendem isso. Eu também não obtive desde a primeira tentativa; -)

Update: Agora esta configuração do kernel está habilitada em todos os kernels Ubuntu suportados. O Ubuntu 16.04, 15.10 e 14.04 são afetados.

    
por Pilot6 25.04.2016 / 09:51
31

Como sugerido pelo usuário @zwets, estou copiando (com edições) uma resposta aqui:

Desde a versão do kernel 4.4.0-20, foi imposto que os módulos do kernel não assinados não poderão ser executados com o Secure Boot ativado. Se você quiser manter a inicialização segura e também executar esses módulos, a próxima etapa lógica é assinar esses módulos.

Então, vamos tentar.

  1. Criar chaves de assinatura

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

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /path/to/module
    
  3. Registre as chaves no Secure Boot

    sudo mokutil --import MOK.der
    

    Forneça uma senha para uso posterior após a reinicialização

  4. Reboot e siga as instruções para Inscrever MOK (Chave do Proprietário da Máquina). Aqui está um exemplo com imagens. O sistema irá reiniciar mais uma vez.

Por favor, deixe-me saber se seus módulos seriam executados desta forma no Ubuntu 16.04 (no kernel 4.4.0-21, eu acredito).

Recursos: Site detalhado artigo para o Fedora e < href="https://github.com/Canonical-kernel/Ubuntu-kernel/blob/master/Documentation/module-signing.txt"> Implementação do Ubuntu da assinatura do módulo. (eles estiveram trabalhando nisso); -)

Recurso adicional: Criei um script bash para uso próprio toda vez que virtualbox-dkms atualiza e, portanto, sobrescreve os módulos assinados. Confira meu vboxsign originalmente no GitHub .

Nota adicional para a segurança (extra) consciente:; -)

Como a chave privada que você criou ( MOK.priv neste exemplo) pode ser usada por qualquer pessoa que possa ter acesso a ela, é recomendável mantê-la protegida. Você pode chmod , criptografar ( gpg ) ou armazená-lo em algum outro local seguro (r). Ou, como anotado neste comentário , remova a opção -nodes na etapa número 1. Isso criptografará a chave com uma frase secreta.

    
por Majal 09.05.2016 / 17:19
6

Você pode desativar a inicialização segura (UEFI) no BIOS com as seguintes etapas:

  1. Reinicialize sua máquina e entre no menu da BIOS (no meu caso, pressionando F2)

  2. Pesquise por inicialização segura e mude para legado

Em uma placa-mãe da ASUS:

  • Ir para o modo avançado (F7)
  • Entre na opção Inicialização segura na seção Inicialização
  • Alterar "modo UEFI do Windows" com "Outro sistema operacional"
  • Salve e reinicie para aplicar as configurações (F10)
por Sputnik 28.04.2016 / 18:08
3

Você também pode Desabilitar Inicialização Segura na execução assinada por correção sudo update-secureboot-policy . Esta página wiki explica este método:

  • Open a terminal (Ctrl + Alt + T), and execute sudo update-secureboot-policy and then select Yes.
  • Enter a temporary password between 8 to 16 digits. (For example, 12345678, we will use this password later
  • Enter the same password again to confirm.
  • Reboot the system and press any key when you see the blue screen (MOK management
  • Select Change Secure Boot state
  • Enter the password you had selected in Step 2 and press Enter.
  • Select Yes to disable Secure Boot in shim-signed.
  • Press Enter key to finish the whole procedure.

You can still enable Secure Boot in shim-signed again. Just execute

sudo update-secureboot-policy --enable and then follow the steps above

    
por Kent Lin 04.08.2016 / 16:48