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:
- Você assina o kernel você mesmo.
- Você usa um kernel assinado e genérico da sua distribuição.
- 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.
- 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.
- 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"
- 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
- 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.
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.
Verifique se sua chave está registrada via:
sudo mokutil --list-enrolled
- 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
- 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}
- Atualize seu grub-config
sudo update-grub
- 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).