歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> centos內核編譯與其簽名機制

centos內核編譯與其簽名機制

日期:2017/3/6 9:49:33   编辑:學習Linux

centos內核編譯與其簽名機制


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,生成的內核或者驅動可以替換之前的模塊直接使用。

  • 內核已經使用內核簽名校驗,那麼需要參考下面的步驟來制作可以啟動的內核或驅動:

  1. 運行make menuconfig,務必去掉force module sign checking選項,否則生成的內核只會加載和當前公鑰相匹配的驅動,而我們很難保證內核二進制的公鑰、initramfs模塊裡的公鑰和文件系統裡面/lib/modules下面驅動模塊裡的公鑰完全一致。

  2. 運行make

  3. 指定kernel install 路徑 INSTALL_MOD_PATH

  4. make modules_install

  5. 利用dracut -k kernel.img $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) 來生成和內核匹配的initramfs

  6. 把對應arch下面的bzImage和initramfs拷貝到/boot/

  7. 往/etc/grub.cfg裡添加引導bzImage和initramfs的啟動項,然後運行grub2-mkconfig

  8. 重啟,然後在grub裡選擇自己剛添加的kernel entry,進入操作系統,使用並驗證新的內核和驅動。

http://xxxxxx/Linuxjc/1134141.html TechArticle

Copyright © Linux教程網 All Rights Reserved