オペレーティングシステム:Ubuntu 20.04
機械: Dell XPS 13 9370
Linuxカーネルをにアップグレードしてみてください5.13.0
。5.16.14
カーネルはセキュアブートなしで正常に動作することが確認されました5.16.14
。説明に従ってくださいここそしてここすべてのステップが正常に完了したようです。具体的には以下のステップを実施した。
カーネルファイルのダウンロード
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-headers-5.16.14-051614_5.16.14-051614.202203111231_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-image-unsigned-5.16.14-051614-generic_5.16.14-051614.202203111231_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-modules-5.16.14-051614-generic_5.16.14-051614.202203111231_amd64.deb
カーネルのインストール
chmod +x *.deb
sudo dpkg -i *.deb
要求ファイルの生成
vim mokconfig.cnf # filled in details as instructed in articles
キーの生成
openssl req -config ./mokconfig.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
pem形式に変換
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
登録キー
sudo mokutil --import MOK.der
この時点で再起動したところ、予想通り青いMOK画面が現れました。登録したばかりのキーが表示され、キーを追加した後でも起動できます。
キーが登録されていることを確認してください。
sudo mokutil --list-enrolled
カーネルに署名
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-5.16.14-051614-generic --output /boot/vmlinuz-5.16.14-051614-generic.signed
initramのコピー
sudo cp /boot/initrd.img-5.16.14-051614-generic{,.signed}
GRUBのアップデート
sudo update-grub
また、作成した証明書をBIOSのセキュアブートキーに接続しました。 UIに「成功」メッセージが表示され、キー数が1ずつ増加します。
この時点で再起動し、新しく署名されたカーネルを表示できます。元のカーネルに加えて、リストには次の2行が含まれています。
Ubuntu, with Linux 5.16.14-051614-generic.signed
Ubuntu, with Linux 5.16.14-051614-generic.signed (recovery mode)
結果メッセージは次のとおりです。
Loading Linux 5.16.14-051614-generic.signed ...
error: /boot/vmlinuz-5.16.14-051614-generic.signed has invalid signature.
Loading initial ramdisk ...
error: you need to load the kernel first.
Press any key to continue...
RAMディスクの問題は説明が必要ないようですが、カーネルをロードできないようです。
キーを確認する他の方法はありますか?システムが認識するには、他の場所にロードする必要がありますか?
答え1
セキュアブートのさまざまなファームウェア実装は、署名付きブートファイルの正確な形式に関してさまざまなレベルの厳格性を持っています。私はこのsbsign
コマンドが古いツールであり、生成された署名がより新しい、より厳しいファームウェアの実装を満たしていない可能性があると思います。
pesign
(パッケージ内の)コマンドを使用してカーネルに署名してみてくださいpesign
。sbsign
。ただし、まずキーと証明書をPKCS12形式に変換し、それをMozilla NSS証明書データベースに保存する必要があります。これにはpk12util
パッケージのツールが必要です。libnss3-tools
openssl pkcs12 -export -name MOK -out MOK.p12 -inkey MOK.priv -inform DER -in MOK.der
sudo pk12util -i MOK.p12 -d /etc/pki/pesign
上記のコマンドは一度だけ実行できます。これを完了したら、pesign
次のように使用できます。
sudo pesign -i /boot/vmlinuz-5.16.14-051614-generic -o /boot/vmlinuz-5.16.14-051614-generic.signed -n /etc/pki/pesign -c MOK -s