web-dev-qa-db-ja.com

署名ファイルを使用してカーネルモジュールに署名する方法

セキュアブートでUbuntu 16.04をインストールしたところ、同じ vmware-error が発生しました:

modprobe: ERROR: could not insert 'vmnet': Required key not available

この問題を回避する1つの方法は、セキュアブートを無効にすることですが、それはしたくありません。もう1つの方法は、カーネルモジュールに自分で署名し、これに 非常に詳細なスレッド を続けます。 RHEL および Fedora を実行する方法についてのチュートリアルがありますが、これらのソリューションはすべて、見つけることができないスクリプトに依存しています:

Sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)

Ubuntuでこのsign-fileスクリプトはどこにありますか?


関連: https://github.com/bergwolf/rhel6/blob/master/Documentation/module-signing.txt および カーネルのコンパイル後にモジュールに署名

3
Matsmath

Ubuntuでは、それは/usr/src/linux-headers-$(uname -r)/scripts/sign-fileになります。

どうやってそれを理解したのですか? sign-fileを検索しました:

dpkg -S sign-file

このファイルを提供するパッケージ(現在linux-headers-4.4.0-22-generic)とインストール場所、つまり/usr/src/linux-headers-4.4.0-22-generic/scripts/を教えてくれました。

uname -r部分は、現在インストールされているheaders-genericパッケージからコマンドを独立させるためのものです。

7
Jos

VMwareのサイトから、問題の原因は次のとおりです。

セキュアモードが有効になっているLinuxホストでは、署名されていないドライバーをロードすることはできません。このため、vmmonやvmnetなどのVMwareドライバーをロードできません。これにより、仮想マシンのパワーオンが妨げられます。

セキュアブートをオフにせずにこれを修正するには、ターミナルで次の操作を行います。

  1. Opensslを使用してvmmonおよびvmnetモジュールに署名するキーペアを生成します。

    〜$ openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/ CN = VMware /"

    (MOKをキーに使用するファイルの名前に置き換えます。)

  2. 次のコマンドを実行して、生成されたキーを使用してモジュールに署名します。

    〜$ Sudo/usr/src/linux-headers -uname -r/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)

    〜$ Sudo/usr/src/linux-headers -uname -r/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)

  3. 次のコマンドを実行して、公開キーをシステムのMOKリストにインポートします。

    〜$ Sudo mokutil --import MOK.der

  4. このMOK登録要求のパスワードを確認します。

  5. マシンを再起動します。指示に従って、UEFIコンソールから登録を完了します。

このVMWare記事から引用: https://kb.vmware.com/kb/214646

3
EriC