Assinando Módulos de Kernel em Ambientes UEFI
- EN
- PT
Table of Contents
Com o aumento das aplicações de IA que exigem GPUs de alto desempenho, é comum a necessidade de utilizar módulos personalizados, incluindo drivers open-source, como os da NVIDIA. Esses módulos precisam ser assinados manualmente para funcionar corretamente em distribuições Linux que utilizam Secure Boot.
Este guia mostra como criar e cadastrar sua própria chave (MOK) no firmware UEFI, permitindo assinar com segurança esses módulos personalizados sem precisar desativar o Secure Boot.
#
1. Conceitos de Secure Boot e MOK
» Secure Boot é um recurso do firmware que carrega apenas binários assinados com chaves confiáveis. Em várias distribuições Linux, usa-se o binário “shim”, já assinado pela Microsoft, garantindo compatibilidade.
» Verifique o status do Secure Boot:
mokutil --sb-state
- MOK (Machine Owner Key), chave para assinar kernels/módulos (ex.: drivers NVIDIA, DKMS) no firmware, com Secure Boot ativo.
#
2. Gerando e cadastrando a MOK
- Em distribuições baseadas em Debian/Ubuntu, gere uma nova chave MOK com:
sudo mkdir -p /var/lib/shim-signed/mok/
sudo openssl req -nodes -new -x509 -newkey rsa:2048 \
-keyout /var/lib/shim-signed/mok/MOK.priv \
-outform DER -out /var/lib/shim-signed/mok/MOK.der \
-days 36500 -subj "/CN=My Secure Boot Key/"
Isso criará os arquivos MOK.der e MOK.priv em /var/lib/shim-signed/mok/, verifique com:
ls -l /var/lib/shim-signed/mok/
- Importe a chave pública (MOK.der) no firmware UEFI com o comando:
mokutil --import /var/lib/shim-signed/mok/MOK.der
Defina uma senha que será solicitada no próximo boot, e reinicie o sistema em seguida.
- Durante o boot seguinte, o sistema entrará automaticamente no MOK Manager (Shim).
#
3. Passo a passo no MOK Manager
- Assim que a máquina reiniciar, o utilitário de gerenciamento de chaves UEFI “Shim” deve aparecer. Pressione qualquer tecla para começar.

- Selecione “Enroll MOK”.

- Selecione “Continue”.

- Selecione “Yes”.

- Digite a senha que você definiu ao importar a chave.

- A tela “Perform MOK management” reaparecerá. Selecione “Reboot”.

Ao voltar para o sistema operacional, sua chave já estará inclusa no firmware.
#
4. Assinando novos Módulos (Ex.: NVIDIA/DKMS)
Se estiver usando DKMS, configure o arquivo /etc/dkms/framework.conf para apontar para sua MOK. Assim, os módulos recompilados serão assinados automaticamente.
mok_signing_key="/var/lib/shim-signed/mok/MOK.priv"
mok_certificate="/var/lib/shim-signed/mok/MOK.der"
Na maioria dos cenários comuns (módulos DKMS), você não precisará realizar, com frequência, a assinatura manual. Configure corretamente o framework do DKMS como mostrado acima.
Para assinar manualmente:
Substitua
nvidiapelo<module_name>para localizar o módulo desejado:sudo modinfo -n nvidiaDescompacte o módulo para um arquivo temporário:
sudo zstd -d /lib/modules/$(uname -r)/updates/dkms/nvidia.ko.zst -o /tmp/nvidia.koAssine o módulo recém-descompactado:
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \ /var/lib/shim-signed/mok/MOK.priv \ /var/lib/shim-signed/mok/MOK.der \ /tmp/nvidia.koSobrescreva novamente o módulo assinado:
sudo zstd -f --rm /tmp/nvidia.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia.ko.zstReconstrua o cache de módulos:
sudo depmod -aSe necessário, atualize o initramfs para refletir nos módulos iniciais carregados durante o boot:
sudo update-initramfs -u -k $(uname -r)(Opcional) Script para ver todos os módulos e confirmar suas assinaturas:
for mod in /lib/modules/$(uname -r)/updates/dkms/*.ko.zst; do
out="/tmp/$(basename "$mod" .zst)"
zstd -d "$mod" -o "$out"
echo ">>> $(basename "$out")"
modinfo "$out" | grep signer
done
#
5. Boas Práticas & Cuidados
- Importante: Proteja suas chaves privadas.
- Se você perder essa chave ou esquecer a senha, precisará gerar e importar novamente a MOK.
- Confira logs (dmesg, journalctl) para erros como “module signature verification failed”.
- Em algumas placas-mãe ou configuradores de VM (ex.: Hyper-V), é preciso configurar o Secure Boot para aceitar chaves da “Microsoft UEFI Certificate Authority” antes de gerar ou importar a MOK.
