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