Estou executando o AlmaLinux 9 (clone do RedHat 9) e compilei um novo módulo do kernel. Estou executando em uma VM com UEFI e inicialização segura habilitada. Quando insiro o módulo recebo o seguinte erro:
insmod: ERROR: could not insert module npreal2.mod: Key was rejected by service
De outras postagens, concluí que estava relacionado ao UEFI/inicialização segura. Então, desativei a inicialização segura e, em seguida, os relatórios do insmod:
insmod: ERROR: could not insert module npreal2.mod: Invalid module format
Tentei recompilar com o modo seguro desativado e o insmod funcionou, mas tive que deixar a inicialização segura desativada. Como posso fazer este módulo funcionar com inicialização segura?
Há uma postagem no github sobre como criar suas próprias chaves MOK, mas isso parece ser específico do DKMS.
Agora (depois de uma discussão nos comentários) que você tem um
npreal2.ko
módulo de kernel funcional, mas não assinado, podemos tentar abordar o Secure Boot.Primeiro, você precisa criar um par de chaves X.509 (uma chave pública e uma chave secreta correspondente) para usar como um MOK. Para fazer isso, primeiro crie um arquivo de configuração OpenSSL mínimo, como por exemplo
~/x509.genkey
:A
CN =
linha define o nome com o qual seu MOK é identificável principalmente, então digite o que quiser lá. AO =
linha seria o local para o nome da sua organização, mas você pode omitir a linha inteira se desejar.Agora você pode gerar seu par de chaves:
Este comando cria um par de chaves nominalmente válido por 10 anos a partir do momento da criação; se você quiser mudar isso, mude o
-days
parâmetro.Agora você deve ter dois arquivos:
signing_key.x509
é a chave pública, que você registrará como seu MOK (Chave do Proprietário da Máquina)signing_key.priv
é a chave privada correspondente, que você precisará para assinar quaisquer módulos do kernel que você mesmo construir. Esta chave privada não é protegida por senha, portanto, mantenha-a segura.Para se inscrever
signing_key.x509
como MOK, certifique-se de que omokutil
pacote foi instalado e execute:Este comando solicitará que você defina uma senha única para o processo de registro de chave. Depois de fazer isso, a primeira fase do registro do MOK é concluída. Para concluir o registro do MOK, você precisará reiniciar.
Quando você reiniciar, o
shimx64.efi
detectará que você iniciou um processo de inscrição no MOK e exibirá uma tela azul com um menu simples baseado em texto, com opções paraEnroll MOK
ouContinue boot
.Selecione
Enroll MOK
para iniciar a segunda fase do registro do MOK. Em seguida, você terá a chance de visualizar o hash e aCN =
linha da chave que está prestes a registrar, depois uma confirmação de sim/não e, finalmente, a senha única definida na primeira fase de inscrição acima. Se a inscrição for bem-sucedida, essa senha nunca mais será necessária. Selecione "Reiniciar" no menu de tela azul para voltar ao Linux.(A segunda fase do processo de inscrição ocorre durante a reinicialização para garantir que apenas alguém com acesso físico equivalente ao sistema consiga concluir o processo, e a senha garante que a chave que você está registrando seja a que você selecionou no primeira fase, e não uma inserida por algum malware.)
Para verificar se o registro da chave foi bem-sucedido, você pode executar
sudo keyctl list %:.platform
como root: ele deve exibir todas as chaves de inicialização segura que o sistema reconhece, incluindo seu MOK, a chave de distribuição incorporada noshimx64.efi
, e as chaves do fabricante e da Microsoft do firmware.Como alternativa, você pode executar
sudo mokutil -l
uma lista mais detalhada da chave da distribuição e seu MOK.Agora você está pronto para assinar seu módulo do kernel:
Para confirmar a assinatura, execute
sudo modinfo ./npreal2.ko
: deve incluir umasigner:
linha com oCN =
nome do seu MOK e umsignature:
bloco longo com números hexadecimais.E claro, agora você deve ser capaz de carregar o módulo com
sudo insmod npreal2.ko
o Secure Boot ativado!Fonte: https://www.redhat.com/sysadmin/secure-boot-systemtap