centos核心編譯與其簽名機制
linux核心3.7引入的簽名機制,極大地友善了對核心子產品的安全認證,同時也為作業系統廠家提供了IP保護的技術手段。不過,凡事有利也有弊。對剛剛接觸具有簽名機制的核心的工程師而言,需要一段了解并适應新核心的過程。為此,小編結合自己的工作經曆,總結了一些要點和大家一起分享 。
1.什麼是核心簽名機制?
核心簽名就是核心利用公鑰對驅動子產品校驗的過程,對檢驗通過的子產品,準許加載,而對沒有簽名的核心驅動子產品或者簽名沒有通過檢驗的子產品,根據不同的核心選項,禁止或者允許加載。
2.如何使用核心簽名?
核心簽名可以使用的場合包括但不限定于:
1.和某個核心或者作業系統廠商緊密捆綁的驅動子產品,包括僅僅限定于特定版本核心的核心驅動子產品;
2.受限或者受控的驅動子產品,包括在作業系統或者核心無法改變的情況下,隻能在知道公鑰和私鑰的情況下生成可被加載的驅動子產品。
3.簽名校驗可能帶來哪些不便?
在使用了簽名校驗的作業系統上進行核心的重新編譯和子產品的二次開發時,如果不知道先前的私鑰和公鑰生成算法的話,就無法直接加載新編譯出的核心二進制或者驅動子產品。
4.如何規避可能的影響?
禁止核心簽名檢驗,并重新生成對應的initramfs,修改boot memu,重新開機系統從自己新加的boot entry啟動。
5.實戰舉例
下面以centos 7 (based on linux kernel 3.10)為例,介紹具體的操作步驟:
1.從官網下載下傳和目前檔案系統版本一緻的Centos .DVD或者其他檔案系統映像;
2. 把映像燒寫到啟動盤或者用UltraISO等啟動盤制作軟體打開,從其rpm倉庫中中找到對應的核心二進制、confg配置檔案(x86_64_config)、initramfs;
3.根據上面找到的核心二進制版本,去官網上下載下傳對應的核心源代碼rpm或者壓縮檔案,解壓後,把上面找到的配置檔案拷貝過來作為 .config。當然,預設的.config檔案也可以來自待更新的系統的/boot/下自帶的config檔案;
4. make menuconfig檢視預設的配置,重點檢查sign相關的選項,如果:
核心配置檔案沒有使用簽名機制,所有的sign checking option都關掉:
說明沒有使用簽名檢驗,可以直接修改核心驅動或者核心以及配置檔案,make 後生成新的核心活驅動,或者make modules_install或者make install,生成的核心或者驅動可以替換之前的子產品直接使用。
核心已經使用核心簽名校驗,那麼需要參考下面的步驟來制作可以啟動的核心或驅動:
運作make menuconfig,務必去掉force module sign checking選項,否則生成的核心隻會加載和目前公鑰相比對的驅動,而我們很難保證核心二進制的公鑰、initramfs子產品裡的公鑰和檔案系統裡面/lib/modules下面驅動子產品裡的公鑰完全一緻。
運作make
指定kernel install 路徑 INSTALL_MOD_PATH
make modules_install
利用dracut -k kernel.img $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) 來生成和核心比對的initramfs
把對應arch下面的bzImage和initramfs拷貝到/boot/
往/etc/grub.cfg裡添加引導bzImage和initramfs的啟動項,然後運作grub2-mkconfig
重新開機,然後在grub裡選擇自己剛添加的kernel entry,進入作業系統,使用并驗證新的核心和驅動。
本文轉自存儲之廚51CTO部落格,原文連結:http://blog.51cto.com/xiamachao/1763619 ,如需轉載請自行聯系原作者