Linux 系統安全啟動

什麼是安全啟動

「安全啟動」 是 2012 年出現的 Windows 8 預裝電腦里的 UEFI 功能。目前所有的 Ubuntu 64位(非32位)版本支持此功能。簡而言之,安全啟動工作原理是在固件中啟用信任源機制,雖然其它實現方式是可能的,但在實踐中通過 x509 證書來實現信任鏈。根證書( 根證書是由受信任的證書頒發機構 CA 頒發的證書)嵌入在固件中,使得它可以驗證簽名的引導載入程序,然後,簽名的引導載入程序可以驗證已簽名內核或已簽名的第二級引導載入程序等。為了使用安全啟動,我們需要使用UEFI啟動系統,而不是舊的 BIOS。

BIOS與UEFI有什麼區別?

兩者都可初始化計算機,任務是載入操作系統。BIOS 通過讀取硬碟上的第一個扇區(主引導記錄 MBR)並執行它來啟動,相比之下,UEFI 通過從硬碟上的分區(稱為 EFI 系統分區 ESP)載入EFI程序文件(使用 .efi 文件擴展名)來啟動。

如何判斷Linux系統是使用UEFI還是BIOS啟動的?

最簡單的方法是檢查文件夾 /sys/firmware/efi 是否存在。

secureBoot:~$ ls /sys/firmware/efi/

config_table fw_platform_size runtime systab

efivars fw_vendor runtime-map vars

如果 Linux 計算機使用傳統 BIOS 啟動,則不會出現 /sys/firmware/efi 文件夾。

legacy:~$ ls /sys/firmware/efi

ls: cannot access /sys/firmware/efi: No such file or directory

如何判斷Linux系統是否使用安全啟動?

mokutil 命令用於管理機主密鑰(MOK),這些密鑰由 shim 層用於驗證 grub2和內核映像,也可用於驗證安全啟動是否啟用。

secureBoot:~$ mokutil --sb-state

SecureBoot enabled

或者也可以使用 mokutil 命令來查看當前所有已註冊的密鑰。

secureBoot:~$ mokutil --list-enrolled

未簽名模塊的特徵是什麼?

如果在啟用了安全啟動的計算機上編譯並安裝了無有效簽名的 Kvaser 驅動程序模塊,即使連上了 Kvaser 分析儀,在運行 listChannels 示例的時候也不會偵測到任何通道。

secureBoot:~$ ./listChannels

Canlib version 5.20

Found 0 channel(s).

可以使用 lsusb 命令驗證 Kvaser 分析儀實際上是由 USB 子系統連接和識別的。

secureBoot:~$ lsusb | grep Kvaser

Bus 003 Device 008: ID 0bfd:0108 Kvaser AB

通過查找系統日誌中的錯誤,並會發現類似錯誤 「所需密鑰不可用」。

apr 19 16:05:38 mypc /usr/sbin/mhydra.sh[22789]: modprobe: ERROR: could not insert 』mhydra』:

Required key not available

apr 19 16:05:38 mypc systemd-udevd[22776]: Process 』/usr/sbin/mhydra.sh start』 failed with exit code 1.

這需要簽名模塊使其在計算機上工作。在下篇文章中將介紹如何構建和簽署 Kvaser 驅動程序模塊,以便能夠在啟用了安全啟動的 Linux 計算機上使用它們。


推薦閱讀:

win10 專業版 激活教程
超級強大的系統清理工具CCleaner
深入計算機底層,從幾本靠譜的書開始
不借外部工具,對window 7用戶密碼破解與防護
操作系統精髓與設計原理讀書筆記7內存管理,虛擬內存

TAG:操作系統 | 科技 | Linux |