Linux內核模塊在安全啓動模式下的簽名和安裝

在安全啓動模式下,是不能加載未簽名或由未註冊的密鑰簽名的內核模塊的,因此本文介紹瞭如何簽名內核模塊,並安裝到Linux內核中。node

本文參考了itpropmn07的回答的第一步和第二步。linux

以RTL8821CE驅動爲例,在獲得8821ce.ko後,按照下面的命令生成私鑰和公鑰。wifi.key是私鑰文件的名稱,wifi.der是公鑰文件的名稱,wifi drivers是證書通常名稱(CN)。shell

openssl req -new -x509 -newkey rsa:2048 -keyout wifi.key -outform DER -out wifi.der -nodes -days 36500 -subj "/CN=wifi drivers"

使用如下命令把公鑰導入到MOK證書列表內,命令執行時會要求你輸入兩次密碼(重啓後要驗證這個密碼),以後重啓電腦。在進入系統前會出現藍色界面,按照這個連接裏圖片所示步驟操做。ubuntu

sudo mokutil --import ./wifi.der

成功導入公鑰後,執行如下命令,檢查證書是否成功導入。若導入成功,則會在輸出結果中找到Issuer: CN=wifi drivers字樣。安全

mokutil --list-enrolled

給模塊簽名,參數列表中,私鑰在前,公鑰在後。app

/usr/src/linux-headers-5.0.0-20-generic/scripts/sign-file sha256 wifi.key wifi.der 8821ce.ko

用如下命令檢查簽名是否成功。輸出結果中出現這樣的字符 Moudle signature appended,表示簽名成功。code

hexdump -C 8821ce.o | tail
#......
003c14d0  00 02 00 00 00 00 00 00  00 01 87 7e 4d 6f 64 75  |...........~Modu|
003c14e0  6c 65 20 73 69 67 6e 61  74 75 72 65 20 61 70 70  |le signature app|
003c14f0  65 6e 64 65 64 7e 0a                              |ended~.|
003c14f7

最後就是安裝和加載模塊了。orm

sudo make install
sudo modprobe -a 8821ce

有輸出表示加載成功。圖片

lsmod | grep 8821ce

參考連接:ip

https://askubuntu.com/questions/1023036/how-to-install-nvidia-driver-with-secure-boot-enabled/1049479#1049479

https://sourceware.org/systemtap/wiki/SecureBoot

https://www.jianshu.com/p/215eee5dbb05

相關文章
相關標籤/搜索