この問題は、セキュアブートが有効になっているUEFIシステムでのみ発生します。
VirtualBox、Nvidia、BroadcomドライバーなどのDKMSモジュールをインストールしようとすると、インストールされず、modprobe
にしようとするとRequired key not available
が表示されます。
VirtualBoxは、vboxdrv
がロードされていないことを訴えます。
Broadcom wl
ドライバーは、カーネルモジュールとしてlspci -k
に表示されますが、使用されていません。 Sudo modprobe wl
はRequired key not available
をスローします。
また、gitソースからいくつかのカーネルモジュールをインストールすると、この問題が発生する場合があります。
この問題は、カーネルの更新後、ワイヤレスアダプタが無効になった、再起動後の黒い画面などとして表示される場合があります。
どうすれば修正できますか?
Ubuntuカーネル4.4.0-20以降、EFI_SECURE_BOOT_SIG_ENFORCE
カーネル設定が有効になっています。これにより、UEFIセキュアブートが有効になっている場合、署名されていないサードパーティのモジュールをロードできなくなります。
この問題を修正する最も簡単な方法は、UEFI(BIOS)設定でセキュアブートを無効にするです。
ほとんどの場合、grubメニューを使用してUEFI設定にアクセスできます。押す ESC 起動時にボタンを押して、grubメニューに入り、System Setupを選択します。セキュアブートオプションは、UEFIの[セキュリティ]または[ブート]セクションにある必要があります。
UEFIに直接アクセスできますが、ハードウェアによって異なります。コンピュータのマニュアルを読んで、そこに到達する方法を確認してください。そうかも知れない Del、 または F2 起動時、または他の何か。
別の方法は、mokutil
を使用してセキュアブートを無効にすることです。
Ubuntuカーネルビルド4.4.0-21.37以降では、これを実行することで修正できます
Sudo apt install mokutil
Sudo mokutil --disable-validation
パスワードを作成する必要があります。パスワードは少なくとも8文字の長さが必要です。再起動後、UEFIはセキュリティ設定を変更するかどうかを尋ねます。 「はい」を選択します。
次に、以前に作成したパスワードの入力を求められます。一部のUEFIファームウェアは、完全なパスワードではなく、1文字目、3文字目などの一部の文字を入力するよう要求します。注意してください。これを理解していない人もいます。私も最初の試みからそれを得なかった;-)
更新:このカーネル構成は、サポートされているすべてのUbuntuカーネルで有効になりました。 Ubuntu 16.04、15.10、および14.04が影響を受けます。
推奨 ユーザー@zwetsによると、(編集を加えて)コピーしています 回答 ここ:
カーネルバージョン4.4.0-20以降、unsignedカーネルモジュールはセキュアブートを有効にした状態での実行が許可されなくなりました。セキュアブートおよびもこれらのモジュールを実行したい場合は、次の論理ステップはsign それらのモジュール。
それでは試してみましょう。
署名キーを作成する
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
モジュールに署名する
Sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /path/to/module
注1:単一のドライバー/モジュールに署名するファイルが複数存在する可能性があるため、/path/to/module
を$(modinfo -n <modulename>)
に置き換える必要がある場合があります。例えば$(modinfo -n vboxdrv)
注2:Sudo kmodsign sha512 ./MOK.priv ./MOK.der /path/to/module
が利用できない場合、sign-file
は代替です。
キーをセキュアブートに登録する
Sudo mokutil --import MOK.der
再起動後に後で使用するためにパスワードを入力します
Reboot
そして指示に従ってMOK(マシン所有者キー)を登録します。これが sample の写真です。システムがもう一度再起動します。
キーが適切に登録されている場合、Sudo mokutil --list-enrolled
の下に表示されます。
あなたのモジュールがUbuntu 16.04(カーネル4.4.0-21で)でこのように動作するかどうかを教えてください。
リソース:詳細なWebサイト Fedoraの記事 および buntu実装 モジュール署名。 (彼らはそれに取り組んできました);-)
追加リソース:virtualbox-dkms
がアップグレードするたびに自分用にbashスクリプトを作成し、署名されたモジュールを上書きします。 vboxsign
元はGitHubにありました を確認してください。
セキュリティ(追加)意識のための追加の注意:;-)
作成した秘密キー(この例ではMOK.priv
)はアクセスできる人なら誰でも使用できるため、安全に保管することをお勧めします。 chmod
it、暗号化(gpg
)、または別の安全な場所に保存することができます(r)。または、 このコメントに記載 のように、ステップ番号1のオプション-nodes
を削除します。これにより、パスフレーズでキーが暗号化されます。
次の手順でBIOSでセキュアブート(UEFI)を無効にできます。
マシンを再起動してBIOSメニューに入ります(私の場合はF2を押します)
セキュアブートを検索し、レガシーに変更します
ASUSマザーボードの場合:
シム署名付き実行Sudo update-secureboot-policy
でセキュアブートを無効にすることもできます。この wikiページ はこの方法を説明しています:
- ターミナルを開き(Ctrl + Alt + T)、Sudo update-secureboot-policyを実行し、[はい]を選択します。
- 8〜16桁の仮パスワードを入力します。 (たとえば、12345678、このパスワードは後で使用します
- 同じパスワードをもう一度入力して確認します。
- システムを再起動し、ブルースクリーンが表示されたら(MOK管理
- [セキュアブート状態の変更]を選択します
- ステップ2で選択したパスワードを入力し、Enterを押します。
- [はい]を選択して、シム署名のセキュアブートを無効にします。
- Enterキーを押して、手順全体を完了します。
再度シム署名でセキュアブートを有効にできます。実行するだけ
Sudo update-secureboot-policy --enableを実行し、上記の手順に従います