Desejo adicionar uma chave pública do par de chaves que usei para assinar meu módulo do kernel em system_keyring. No entanto, há um problema:
Com o comando de cat /proc/keys | grep system_keyring
, obtive a entrada (ID) de system_keyring. No entanto, ao tentar adicionar minha chave pública com este comando: keyctl padd asymmetric "" 0xXXXXXXXX</test/signing_key.x509
, recebi o erro "Permissão negada".
Acho que é devido à restrição descrita no "module_signing.txt" https://01.org/linuxgraphics/gfx-docs/drm/admin-guide/module-signing.html :
Observe, no entanto, que o kernel só permitirá que as chaves sejam adicionadas ao .system_keyring se o wrapper X.509 da nova chave for validamente assinado por uma chave que já resida no .system_keyring no momento em que a chave foi adicionada.
No entanto, não consigo encontrar nenhum documento que descreva como assinar o "x.509 wrapper" com a chave já residente no .system_keyring.
Além disso, acho que as chaves nesse chaveiro são apenas chaves públicas. Então, eu nem acho que vai funcionar, mesmo que eu consiga extrair a chave pública do chaveiro e assinar o "invólucro X.509" com essa chave pública.
De qualquer forma, preciso de alguma ajuda aqui. Ou, mesmo que algo possa me dar uma dica de como enviar meu módulo do kernel para o RedHat para que ele possa ser assinado pelo RedHat e instalado na instalação do usuário sem reconstruir o kernel?
O chaveiro do sistema obtém seu conteúdo de cinco fontes:
db
- dependendo do seu firmware, você pode ou não conseguir alterar issodbx
- como a anterior, mas esta é uma lista negra, então você não gostaria de adicionar sua chave aqui de qualquer maneirashim.efi
- não alteráveis ​​sem recompilação, e você provavelmente teria que obter o shim assinado novamente depois, a menos que tenha assumido o controle de sua inicialização seguraPK
= muito incômodoMOK
(usada porshim.efi
) - esta pode ser sua melhor esperança.Para importar sua chave para o MOK, você deve primeiro garantir que
shim.efi
esteja envolvido no processo de inicialização (consulte Recursosefibootmgr -v
).Em seguida, tenha a chave/certificado com que seu módulo está assinado no formato DER e inicie o processo de importação usando o
mokutil
comando:O comando exigirá que você defina uma nova senha de importação: essa senha será usada na próxima etapa e não é nenhuma senha existente antes. Como de costume, ao definir uma nova senha,
mokutil
será necessário digitar essa senha duas vezes.Então, na próxima vez que você reiniciar o sistema,
shim.efi
verá que uma nova chave MOK está pronta para importação e exigirá que você digite a senha de importação definida na etapa anterior. Depois de fazer isso uma vez, a nova chave será armazenada na variável UEFI MOK persistentemente e o kernel a incluirá automaticamente no chaveiro do sistema.Se você não estiver usando UEFI, não poderá adicionar novas chaves ao chaveiro do sistema sem recompilar o kernel. Mas, por outro lado, se o Secure Boot não estiver ativado, o kernel permitirá o carregamento de módulos do kernel sem assinatura ou com uma assinatura não verificável - ele apenas define um dos flags taint do kernel para marcar que um módulo do kernel não distribuÃdo foi carregado.
Fonte: RHEL 7 Kernel Administration Guide, Chapter 2.8 "Signing Kernel Modules for Secure Boot"