質問: Ubuntu16.04.4 LTSをMicrosoft Surface pro 3 で使用しています。 無線LANインターフェスをブリッジインタフェースに追加できません。 にある目的でカーネルを修正して.debパッケージを作成しようとしています。 まずは修正せずにパッケージをビルドしてインストール - ブートできるかを確認します ``` $ apt source linux-image-4.13.0-38-generic $ dpkg-buildpackage -B ``` これでカーネルイメージのパッケージが作成されました。 つづいてパッケージをインストールします。 ``` $ sudo dpkg -i linux-image-4.13.0-38-generic_4.13.0-38.43~16.04.1_amd64.deb ``` インストールも無事成功し、ブートしましたがセキュアブートに阻まれてブートできませんでした。 セキュアブートを無効にすればブートするでしょうが、Surfaceはセキュアブートを無効にすると 真っ赤なパワーオンロゴを出すといういじわるをするのでセキュアブートは有効なままでブートしたいです。 ビルドしたカーネルをセキュアブートでブートするためには 手順として、署名をする必要がありそうなことは想像つきます。 おそらく想像するに 1.証明書と秘密鍵を自前で生成 2.署名する(おそらく *.koも) 3.証明書をUEFIにインストールする という手順が必要かと考えています。 しかし具体的にどういう操作をすればいいのか見当もつきません。 ダウンロードしたソースのどこかに証明書と秘密鍵を置けば勝手にしてくれるのか... 想像している手順を自前でしなくてなならないのか... ちなみに、surfaceにubuntuをインストールしてVirtualBoxでゲストOS:Windows10を起動する といういびつな使い方をしています。 VirtualBoxのドライバをmodprobeする際もセキュアブートに阻まれて を参考に無事セキュアブートでもmodprobeできたという経験はあります。 質問: ビルドしたカーネルをセキュアブートでブートできるようにするにはどういう操作をすればよいのでしょうか?
回答: ↑これは archlinux 用の wiki ですが、参考になると思います。 「手動でダウンロード」の link から、署名済みの PreLoader.efi と HashTool.efi をダウンロードできます。 * PreLoader は署名されているので、これは secure boot で起動できる。 * PreLoader は boot loader (systemd-boot や grub 等) を読み込んで起動する。 * boot loader は kernel image を読み込んで起動する。 という流れで、もし途中で security error が発生した場合は、その場で署名済み HashTool が起動し、ユーザがその場でファイル名を指定して enroll することができます。enroll すればそのバイナリは起動できます。また、`*.ko` の読み込みについては、既に secure boot とは無関係の処理ですので、何もすることなく読み込んでくれます。 私はこの方法を使っていますが、 この流れでは、kernel image を作った時に署名するのでなく、boot 時に enroll していますので、kernel image を作った後 enroll するまでに改竄されることに対しては無力です。 secure boot に対応したい理由が、 > > Surfaceはセキュアブートを無効にすると真っ赤なパワーオンロゴを出すといういじわるをするので > > > なので、上記方法で問題ないと思いますが、もしそうではなく、やはり自前で署名したいということであれば、 上記のページに「自分で署名した鍵を使う」という項目があり、 この方法を使えば、作った kernel image にすぐに署名できるのだと思いますが、 私はやったことがないので詳細は知りません。