

Ubuntu16.04.4 LTSをMicrosoft Surface pro 3 で使用しています。  
[無線LANインターフェスをブリッジインタフェースに追加できません。](https://ja.stackoverflow.com/questions/43264/%E7%84%A1%E7%B7%9Alan%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%B9%E3%82%92%E3%83%96%E3%83%AA%E3%83%83%E3%82%B8%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%81%AB%E8%BF%BD%E5%8A%A0%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93)  
にある目的でカーネルを修正して.debパッケージを作成しようとしています。

まずは修正せずにパッケージをビルドしてインストール - ブートできるかを確認します

[code]

    $ apt source linux-image-4.13.0-38-generic
    $ dpkg-buildpackage -B
    
[/code]

これでカーネルイメージのパッケージが作成されました。  
つづいてパッケージをインストールします。

[code]

    $ sudo dpkg -i linux-image-4.13.0-38-generic_4.13.0-38.43~16.04.1_amd64.deb
    
[/code]

インストールも無事成功し、ブートしましたがセキュアブートに阻まれてブートできませんでした。  
セキュアブートを無効にすればブートするでしょうが、Surfaceはセキュアブートを無効にすると  
真っ赤なパワーオンロゴを出すといういじわるをするのでセキュアブートは有効なままでブートしたいです。

ビルドしたカーネルをセキュアブートでブートするためには  
手順として、署名をする必要がありそうなことは想像つきます。  
おそらく想像するに  
１．証明書と秘密鍵を自前で生成  
2.署名する(おそらく *.koも)  
3.証明書をUEFIにインストールする  
という手順が必要かと考えています。

しかし具体的にどういう操作をすればいいのか見当もつきません。  
ダウンロードしたソースのどこかに証明書と秘密鍵を置けば勝手にしてくれるのか…  
想像している手順を自前でしなくてなならないのか…

ちなみに、surfaceにubuntuをインストールしてVirtualBoxでゲストOS:Windows10を起動する  
といういびつな使い方をしています。  
VirtualBoxのドライバをmodprobeする際もセキュアブートに阻まれて  
<https://askubuntu.com/a/900121>  
を参考に無事セキュアブートでもmodprobeできたという経験はあります。

質問：  
ビルドしたカーネルをセキュアブートでブートできるようにするにはどういう操作をすればよいのでしょうか？


CC BY-SA 3.0
2018-04-18T11:42:52.157
43355
2018-04-19T02:25:03.793
2018-04-19T02:25:03.793
7844
7844
question
linux ubuntu
セキュアブート可能なlinuxカーネルイメージパッケージの作成方法


<https://wiki.archlinux.jp/index.php/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88>

↑これは 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 にすぐに署名できるのだと思いますが、  
私はやったことがないので詳細は知りません。


CC BY-SA 3.0
2018-04-18T17:39:51.137
43361
2018-04-18T17:49:05.943
2018-04-18T17:49:05.943
5288
5288
43355
answer