web-dev-qa-db-ja.com

カーネルモジュールUbuntu 18.04に署名する方法

私はUbuntuを初めて使用します。 AndroidエミュレータにアクセスできるようにGenymotionをインストールしようとしています。Genymotionを使用するには、VirtualBoxが必要です。VirtualBoxがインストールされていますが、必要なようですカーネルモジュールに署名します...そして、それを行う方法が本当にわかりません。これは、/sbin/vboxconfigを実行した後に表示されるエラーメッセージです。

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.  If your system is using EFI Secure Boot you may need to sign the
kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load
them. Please see your Linux system's documentation for more information.

私はこれをグーグルで試しましたが、一連のステップで明確かつ簡潔な答えを見つけることができないようです。繰り返しますが、私はLinuxにかなり慣れていないので、どんな助けでも大歓迎です。返信してくださったすべての方に事前に感謝します。

20
aty0

UEFIセキュアブートを無効にするだけでVirtualBoxを機能させるには、次の手順を実行する必要があります。

  1. カーネルモジュールに署名するための個人の公開/秘密RSAキーペアを作成します。以下のリンクで推奨されているように、キー/ペアを/ root/module-signing /ディレクトリに保存することを選択しました。
    Sudo -i
    mkdir /root/module-signing
    cd /root/module-signing
    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=YOUR_NAME/"
    chmod 600 MOK.priv 
  1. マシン所有者キー(MOK)をインポートまたは削除するツールであるmokutilを使用して公開鍵をインポートし、マシンの再起動時に登録します。このステップのパスワードは、数分だけ覚えておく必要がある一時的な使用パスワードです。
    mokutil --import /root/module-signing/MOK.der
    input password:
    input password again:
  1. マシンを再起動します。ブートローダーが起動すると、ボタンを押してMOKマネージャのEFIユーティリティに入るように求める画面が表示されます。このステップでは、外付けの外付けキーボードは機能しません。最初のメニューで[MOKの登録]を選択してから続行し、[はい]を選択してキーを登録し、手順2で確立したパスワードを再入力します。次に[OK]を選択してシステムの起動を続行します。

  2. 将来のカーネルアップデートでは、アップデートされたカーネルに再度署名する必要があるため、必要に応じて後日実行できるスクリプトに署名コマンドを含めることは理にかなっています。サンプルスクリプト/ root/module-signing/sign-vbox-modulesを以下に示します。

#!/bin/bash

for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
  echo "Signing $modfile"
  /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
                                /root/module-signing/MOK.priv \
                                /root/module-signing/MOK.der "$modfile"
done
  1. 実行権限を追加し、/ root/module-signing /ディレクトリからrootとして上記のスクリプトを実行します。
    Sudo -i
    cd /root/module-signing
    chmod 700 /root/module-signing/sign-vbox-modules
    ./sign-vbox-modules
  1. Vboxdrvモジュールをロードし、VirtualBoxを起動します。
    modprobe vboxdrv 

この情報のほとんどは次のリンクから得られたものであり、追加情報について参照することができます https://stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail/

25
balast

私はこの問題を抱えていました。セキュアブートを無効にする: https://wiki.ubuntu.com/UEFI/SecureBoot/DKMS

3
ejaenv

私はこの質問が古いことを知っていますが、受け入れられた回答がなく、これらの回答のどれも私のために問題を解決しなかったので、私はこれを今日どのように解決したかを書いています:

このコマンドを実行すると、次のエラーが発生します。

$ Sudo modprobe vboxdrv
modprobe: ERROR: could not insert 'vboxdrv': Required key not available

問題は、モジュールが署名されていないため、カーネルが読み込まれていないことです。これは、コンピューターでSecureBootモードがアクティブになっている場合に発生します。これは、最近の機器では非常に一般的です。

そのため、仮想ボックス内のマシンを開くときにこのエラーが発生します

カーネルドライバーがインストールされていません(rc = -1908)

ドライバーに署名するには、次の手順を実行します。ドライバーはカーネルモジュールとして、UbuntuシステムとDebian 9に読み込まれます。

  1. 署名を行うには、mkutilパッケージをインストールしてください。

    Sudo apt-get update
    Sudo apt-get upgrade
    Sudo apt-get install mokutil
    
  2. 署名ファイルを生成します。

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
    
  3. 次に、それをカーネルに追加します。

    Sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
    
  4. セキュアブートに登録します。

    重要!パスワードを要求されますので、必要なパスワードを入力してください。次回の再起動時に1回だけ使用する必要があります。

    Sudo mokutil --import MOK.der
    
  5. 最後に、コンピューターを再起動します。ブルースクリーンが表示され、キーボードが待機します。起動を中断するように求めるキーを押します。

    enter image description here

ブルースクリーンの中にいるときに、

MOKを登録->続行->パスワードを要求します

以前に入力したものを入力すると、操作が正常に完了したことが通知されます。

これでオペレーティングシステムが起動し、VirtualBoxを問題なく使用できます。

これが誰かを助けることを願っています。

3

これは非常に役に立ち、正しかったです。 VirtualBOXをラップトップにインストールする場合は、まず、デフォルトのBIOSがVirtualBoxまたはVM用に設定されていることを確認することから始めます。 BIOSに入り、プロセッサセクションで仮想化のアクセス許可をALLOWまたはENABLEDに変更し、保存して終了してから、再起動する必要があります。私はこれを逃して、イライラする数時間を無駄にしました。

0
user1128819