vmlinuz-4.18.12-041812-generic possui assinatura inválida

15

Atualizei meu kernel hoje com o ukuu e, desde então, não consigo inicializar porque estou recebendo esses erros:

error: /boot/vmlinuz-4.18.12-041812-generic has invalid signature
error: you need to load the kernel first

Eu tenho dual boot com o windows 10 e o ubuntu 18.10 (atualizado hoje)

Atualização: Eu consegui inicializar no kernel mais antigo que eu escolhi em "Opções avançadas para Ubuntu" no grub

Mas preciso atualizar meu kernel e, se fizer isso, continuo com o mesmo problema ...

Nadav Shabtai
fonte
Estou enfrentando esse mesmo problema agora após atualizar o firmware do meu Lenovo T480 e não entendo por que os kernels mais antigos ainda funcionam.
User205301

Respostas:

5

Em vez de assinar o kernel em questão, acabei de desligar o Secure Boot no menu BIOS / UEFI do meu laptop.

Geralmente, você pode entrar no menu pressionando uma tecla especial durante a inicialização , pode pesquisar no google uma específica para o seu dispositivo ou pode até aparecer na tela durante a inicialização.

xjcl
fonte
Obrigado! Acabei de atualizar meu BIOS e esqueci de desabilitar isso!
Lucas Bustamante
5

https://github.com/jakeday/linux-surface/blob/master/SIGNING.md possui instruções mais específicas sobre assinatura de kernel (adaptadas do mesmo tutorial vinculado na resposta aceita). As instruções são reproduzidas na íntegra da seguinte maneira:

Assinando um kernel personalizado para inicialização segura

As instruções são para o ubuntu, mas devem funcionar de maneira semelhante para outras distribuições, se estiverem usando shim e grub como gerenciador de inicialização. Se sua distribuição não estiver usando o shim (por exemplo, Linux Foundation Preloader), deve haver etapas semelhantes para concluir a assinatura (por exemplo, HashTool em vez do MokUtil for LF Preloader) ou você pode instalar o shim para usá-lo. O pacote ubuntu para shim é chamado shim-signed, mas informe-se sobre como instalá-lo corretamente, para não atrapalhar o seu gerenciador de inicialização.

Desde a atualização mais recente do GRUB2 (2.02 + dfsg1-5ubuntu1) no Ubuntu, o GRUB2 não carrega mais kernels não assinados, desde que o Secure Boot esteja ativado. Os usuários do Ubuntu 18.04 serão notificados durante a atualização do pacote grub-efi, de que este kernel não está assinado e a atualização será cancelada.

Portanto, você tem três opções para resolver esse problema:

  1. Você assina o kernel você mesmo.
  2. Você usa um kernel assinado e genérico da sua distribuição.
  3. Você desabilita a Inicialização segura.

Como as opções dois e três não são realmente viáveis, estas são as etapas para assinar o kernel você mesmo.

Instruções adaptadas do Ubuntu Blog . Antes de seguir, faça backup do diretório / boot / EFI, para que você possa restaurar tudo. Siga estas etapas por sua conta e risco.

  1. Crie a configuração para criar a chave de assinatura, salve como mokconfig.cnf:
# This definition stops the following lines failing if HOME isn't
# defined.
HOME                    = .
RANDFILE                = $ENV::HOME/.rnd 
[ req ]
distinguished_name      = req_distinguished_name
x509_extensions         = v3
string_mask             = utf8only
prompt                  = no

[ req_distinguished_name ]
countryName             = <YOURcountrycode>
stateOrProvinceName     = <YOURstate>
localityName            = <YOURcity>
0.organizationName      = <YOURorganization>
commonName              = Secure Boot Signing Key
emailAddress            = <YOURemail>

[ v3 ]
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always,issuer
basicConstraints        = critical,CA:FALSE
extendedKeyUsage        = codeSigning,1.3.6.1.4.1.311.10.3.6
nsComment               = "OpenSSL Generated Certificate"

Ajuste todas as peças com os seus detalhes.

  1. Crie a chave pública e privada para assinar o kernel:
openssl req -config ./mokconfig.cnf \
        -new -x509 -newkey rsa:2048 \
        -nodes -days 36500 -outform DER \
        -keyout "MOK.priv" \
        -out "MOK.der"
  1. Converta a chave também no formato PEM (mokutil precisa de DER, sbsign precisa de PEM):
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
  1. Registre a chave da sua instalação do shim:
sudo mokutil --import MOK.der

Você será solicitado a fornecer uma senha; basta usá-la para confirmar sua seleção de chave na próxima etapa; portanto, escolha uma.

  1. Reinicie seu sistema. Você encontrará uma tela azul de uma ferramenta chamada MOKManager. Selecione "Registrar MOK" e, em seguida, "Visualizar chave". Verifique se foi a sua chave que você criou na etapa 2. Depois, continue o processo e digite a senha que você forneceu na etapa 4. Continue com a inicialização do sistema.

  2. Verifique se sua chave está registrada via:

sudo mokutil --list-enrolled
  1. Assine o kernel instalado (ele deve estar em / boot / vmlinuz- [KERNEL-VERSION] -surface-linux-surface):
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface --output /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface.signed
  1. Copie o initram do kernel não assinado, para que também tenhamos um initram para o assinado.
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
  1. Atualize seu grub-config
sudo update-grub
  1. Reinicie seu sistema e selecione o kernel assinado. Se a inicialização funcionar, você poderá remover o kernel não assinado:
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub

Agora seu sistema deve ser executado sob um kernel assinado e a atualização do GRUB2 funciona novamente. Se você deseja atualizar o kernel personalizado, pode assinar a nova versão facilmente seguindo as etapas acima novamente a partir da etapa sete. Assim, faça backup das teclas MOK (MOK.der, MOK.pem, MOK.priv).

prusswan
fonte
Resposta excelente, eu não poderia ter chegado lá apenas com as instruções do Ubuntu
User632716 21/01
Ótimo atalho para renomear e sobrescrever arquivos com correções posteriores.
Tom
1

Resolvi meu problema seguindo este tutorial para assinar o arquivo / boot / vmlinuz para uma inicialização segura, observe a última parte do tutorial

Nadav Shabtai
fonte
6
Você poderia fornecer informações detalhadas sobre como resolver esse problema? Tenho absolutamente o mesmo erro, mas não entendo o que devo fazer de acordo com o tutorial mencionado.
Slon
Não me lembro agora, vou tentar ajudá-lo mais tarde neste dia, se ainda for relevante
Nadav Shabtai 12/03/19
É relevante para mim também. Eu tenho o mesmo problema #
Vitalii Diravka
Só encontrei isso, eu preciso disso também
Mitch Talmadge
1
Parece ser uma "resposta apenas para links". Edite a pergunta e forneça alguns detalhes para ajudar outros usuários que têm o mesmo problema. Obrigado!
Mchid 30/07/19