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?

50

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

Quando tento instalar módulos DKMS como 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 gera Required key not available .

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

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

Como posso corrigir isso?

    
por Pilot6 25.04.2016 / 09:48

4 respostas

53

Desde o kernel do Ubuntu 4.4.0-20, a configuração do kernel EFI_SECURE_BOOT_SIG_ENFORCE foi ativada. Isso evita o carregamento de módulos de terceiros não assinados se a inicialização segura 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 do 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 a inicialização segura 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 pede não a senha completa, mas para inserir alguns caracteres, como primeiro, terceiro, etc. Tenha cuidado. Algumas pessoas não entendem isso. Eu também não obtive isso da 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
21

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 de 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. Crie 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 Implementação do Ubuntu da assinatura do módulo. (eles estão trabalhando nisso) ;-)

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
4

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 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
1

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:

  
  • Abra um terminal (Ctrl + Alt + T) e execute sudo update-secureboot-policy e selecione Sim.
  •   
  • Insira uma senha temporária entre 8 e 16 dígitos. (Por exemplo, 12345678, usaremos essa senha mais tarde
  •   
  • Digite a mesma senha novamente para confirmar.
  •   
  • Reinicialize o sistema e pressione qualquer tecla quando vir a tela azul (gerenciamento MOK
  •   
  • Selecione Alterar estado de inicialização segura
  •   
  • Insira a senha que você selecionou na etapa 2 e pressione Enter.
  •   
  • Selecione Sim para desativar a inicialização segura em assinados shim.
  •   
  • Pressione a tecla Enter para finalizar todo o procedimento.
  •   

Você ainda pode ativar a Inicialização segura novamente assinada. Apenas execute

     

sudo update-secureboot-policy --enable   e siga os passos acima

    
por Kent Lin 04.08.2016 / 16:48