Pular para o conteúdo principal

Dotmind it

Assinando Módulos de Kernel em Ambientes UEFI

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

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

  1. Durante o boot seguinte, o sistema entrará automaticamente no MOK Manager (Shim).

# 3. Passo a passo no MOK Manager

  1. Assim que a máquina reiniciar, o utilitário de gerenciamento de chaves UEFI “Shim” deve aparecer. Pressione qualquer tecla para começar.

Tela inicial do MOK Manager exibindo interface de gerenciamento de chaves.

  1. Selecione “Enroll MOK”.

A tela “Perform MOK management” é exibida.

  1. Selecione “Continue”.

uefi1

  1. Selecione “Yes”.

uefi1

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

uefi1

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

uefi1

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 nvidia pelo <module_name> para localizar o módulo desejado:

    sudo modinfo -n nvidia
    

    Descompacte o módulo para um arquivo temporário:

    sudo zstd -d /lib/modules/$(uname -r)/updates/dkms/nvidia.ko.zst -o /tmp/nvidia.ko
    

    Assine 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.ko
    

    Sobrescreva novamente o módulo assinado:

    sudo zstd -f --rm /tmp/nvidia.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia.ko.zst
    

    Reconstrua o cache de módulos:

    sudo depmod -a
    

    Se 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.

Secure Boot BIOS Screenshot

# Referências