web-dev-qa-db-ja.com

Linuxでセキュアブートを有効にする方法はありますか?

Windowsのセキュアブートがブート時に外部OSローダーコードを実行できないように、Linuxにも同様のオプションがありますか?私は周りを見回しましたが、検索すると、UEFI対応のWindowsマシンにLinuxをインストールする方法しか得られません。このオプションをLinuxマシンに導入する方法がわかりません。

8
Rohan

セキュアブートを機能させるには、ハードウェアがセキュアブートをサポートし、OSがセキュアブートをサポートする必要があります。

ハードウェアの場合、UEFI設定メニューでチェックインでき、OSによって提供される証明書/キーを追加する必要があります

OSの場合、次のコマンドでサポートを確認できます。

[root@secureboot-guest ~]# cat /sys/kernel/security/securelevel 

上記のコマンドの出力が「1」の場合、セキュアブートがサポートされており、OSによって有効になっています。

3
shubham

最初に、独自のキーを生成します

 openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509\
 -subj "/ CN = Kernel Key" -outform DER -out kernel.der\
 -keyout kernel.key 

CONFIG_EFI_STUBを使用してLinuxカーネルをコンパイルし、initramfsをそこに埋め込んで、以下の説明に従ってください。 https://prosauce.org/blog/2015/10/31/booting-linux-securely 次のスクリプトを使用:

/usr/src/linux-headers-$(uname -r)/ scripts/sign-file sha256 kernel.key kernel.der module.ko 

次に、ラップトップ\ワークステーション用のカーネルcmdlineを含むファイルを作成し、1つのイメージを作成して、次のようにefiブートディレクトリにコピーします。

#objcopy\
 --add-section .osrel =/etc/os-release --change-section-vma .osrel = 0x20000\
 --add-section。 cmdline =/tmp/cmdline --change-section-vma .cmdline = 0x30000\
 --add-section .linux =/boot/vmlinuz --change-section-vma .linux = 0x2000000\
 --add-section .initrd =/boot/initrd.img --change-section-vma .initrd = 0x3000000\
/usr/lib/systemd/boot/efi/linuxx64.efi.stub linux .efi 
 
#mkdir -p /boot/efi/EFI/BOOT

# sbsign --key /root/keys/ISK.key --cert /root/keys/ISK.pem --output /boot/efi/EFI/BOOT/BOOTX64.EFI linux.efi /boot/efi/EFI/BOOT/BOOTX64.EFI

独自のキーをMBファームウェアにインストールするには、次のようなコマンドを実行できます。

 openssl x509 -inform der -in kernel.der -outform pem -out kernel.pem 
 cert-to-efi-sig-list -g "$(uuidgen)" kernel.pem kernel。 esl 
 sign-efi-sig-list -k KEK.key -c KEK.pem kernel kernel.esl kernel.auth 
2
user1024