永不停機的 Linux 解決方案 Ksplice (二)
在「永不停機的 Linux 解決方案 Ksplice (一)」介紹了Ksplice 的基本原理及取得方法,本篇將介紹實際使用的具體步驟,以及使用上的常見問題。
在 ULN 使用 Ksplice
先示範付費用戶如何使用 Ksplice。筆者使用的是 Oracle Linux 6.2 x86_64,作業系統的核心是 2.6.32-220(圖 6)。註冊 Oracle 網站帳號並獲得了 Oracle 的支援憑據 Customer Support Identifier (CSI),執行以下命令後將出現歡迎頁面(圖 7)。


uln_register [Enter]
按照要求填入 Oracle 帳號、密碼以及 CSI 號碼(圖 8)。

在下一步填入伺服器的配置資訊 (Profile Name) 包括系統所安裝的軟體和版本清單,然後該配置資訊就會被自動上傳到 ULN 去。這個概念和步驟基本上和 RHEL 系統註冊到 RHN 是一樣的,唯一的區別在於 Oracle 這裡多了一個 CSI 而已(圖 9 及圖 10)。註冊完成之後,輔助說明會告知該伺服機已經綁定了 Oracle Linux 6 以及 UEK 兩個軟體頻道(圖 11)。



用戶登入到 ULN 網站之後,就可以看到剛剛註冊上去的伺服器(圖 12)。點擊註冊上去的系統,在出現的頁面中,可以看到該伺服器所註冊的所有軟體頻道。如果沒有發現 Ksplice 相關頻道的話,可點擊 Manage Subscription(圖 13),手動加入 Ksplice for Oracle Linux 6(x86_64) 並儲存(圖 14)。



完成之後回到伺服器,手動執行以下命令後,將可以看到該系統已經註冊了 Ksplice 的軟體頻道(圖 15)。

yum repolist [Enter]
透過上述過程,我們不難看出 Oracle Linux 中套裝軟體管理方式也和 RHEL 一樣,在 ULN 中的作業思路也和 RHN Satellite 中一模一樣。現在原則上我們可以安裝和使用 Ksplice 了,不過 splice 網站還給我們提供了一個很有意思的線上檢測核心漏洞的小工具 Ksplice Inspector。為了更好地看到 Ksplice 效果,在安裝和使用相關套裝軟體之前,不妨先使用它取得當前系統更多的資訊。方法很簡單,首先存取以下頁面。
http://www.ksplice.com/inspector
按照輔助說明,在系統中輸入命令獲取核心版本,然後將輸出再粘貼到該網站的輔助說明框中。此時 Inspector 將自動檢測出當前系統有哪些漏洞、對應的勘誤號,修正檔號等相關資訊。
echo “`uname -s`//`uname -m`//`uname -r`//`uname -v`” [Enter]
我們將得到以下輸出結果。
Linux//x86_64//2.6.32-220.el6.x86_64//#1 SMP Wed Dec 7
10:41:06 EST 2011
將取得的輸出結果貼到 Ksplice Inspector 點擊 Find Updates,便可找到當前版本中所有核心的臭蟲以及相關 CVE 編 號(圖 16)。在裡以一個核心安全性方面的漏洞 CVE-2012-0056 為例說明,在 Red Hat 的 Bugzilla 上,提供了一段針對該漏洞的測試程式碼,我們借助該程式碼,便可以直接看到 Ksplice 效果。

根據 Red Hat 網站的說明,這是對 proc 權限設置不當引發的臭蟲,Red Hat 提供了相應的 RHSA (Red Hat Security Advisor(圖 17)。根據 RHSA 的建議,我們將要升級系統核心到 2.6.32-220.4.1 以上版本,方可有效修復該問題(圖 18)。


同時在 Red Hat 的 Bugzilla 中搜尋該 CVE(圖 19),可以看到剛才提到的測試程式(圖 20),現在我們將該程式碼下載下來並儲存為 test.c,然後通過編譯器編譯成一個二進位的小程式。如果該程式能夠執行成功,則確認該臭蟲對當前的系統有影響(圖21)。通過上述的作業,可以發現筆者使用的 Oracle Linux 6.2 版本以及 2.6.32-220 核心,對該臭蟲是沒有防護能力的。現在既然系統已經註冊到 Ksplice 頻道,其實線上升級核心只要兩個步驟。



yum install uptrac [Enter]
第一步是安裝 Ksplice 工具,這些工具包括升級、安裝、刪除和檢視等命令(圖 22)。第二步在 /etc/uptrack/uptrack.conf 中,指定 Ksplice 的 Access_key(圖 23)。Access_key 是使用 Ksplice 的關鍵,對於購買了 Oracle Linux Premier 服務的使用者來說,只要在 ULN 註冊,就可以在 Systems 標籤中看到該 Key(圖 24),因此需要將該 Access_key 剪貼到 /etc/uptrack/uptrack.conf 中儲存。對於未購買 Oracle Linux 服務的使用者來說,可以通過註冊 Ksplice 網站並獲得期限為 30 天的體驗 Access_key。



第三步是使用命令來安裝核心修正檔。
uptrack-upgrade [Enter]
Ksplice 會檢測系統以及當前版本,並下載符合的修正檔。執行上述命令之後,可看到所有修正檔都有對應的 ID,可以用於針對某一些 CVE 或者臭蟲安裝指定的修正檔。確認後預設所有的修正檔都會被安裝上(圖 25)。當修正檔安裝完成之後,可以看到實際上生效的核心已經是 2.6.32-431,當然這個核心版本要用命令來看。

uptrack-uname -r [Enter]
如果使用之前的「uname -r」看到的仍然是舊的版本號,因為uname 命令一般獲得的是磁碟上的核心資訊。但是不管怎麼樣,當我們再去執行那段測試程式碼,就會發現已經執行不成功了,證明這個臭蟲已經被修復,而在整個的作業過程中系統始終沒有重啟(圖26)。這個時候如果我們將之前 Ksplice Inspector 所提供的命令稍作修改,並將執行結果再粘貼回去做檢查,再次證明所有的臭蟲已經全部被修復(圖 27)。


升級的過程中,大家可能有留意到之前的 CVE-2012-0056 對應的 Ksplice 的修正檔 ID(圖 28),可以通過 uptrack-install 或者 uptrack-remove 命令來安裝或者刪除指定的修正檔。例如要刪除剛才的 CVE-2012-0056 所對應的修正檔,可執行以下命令。

uptrack-remove sqjq3rmg [Enter]
該修正檔被線上刪除時,再去執行那段測試程式碼,便會發現又能夠執行成功。顯然通過 Ksplice 來線上回退核心修正檔,就是通過這種方式來實現的。不過需要說明的是,執行 uptrackremove 命令時,刪除某些核心修正檔可能會牽涉一大堆的相依關係,一些相關與之有依賴關係的修正檔也可能同時被刪除。此外在 Ksplice 的 uptrack 工具集中,還包括了一些其他有用的命令,如使用 uptrack-show 可以檢視當前系統可安裝,以及已經安裝哪些線上修正檔。
下一篇將會介紹實際使用的具體步驟,以及使用上的常見問題。密切留意。
登記下載試用版 Ksplice,體驗免停機的解決方案
http://ksplice.oracle.com/try/trial
Pingback: 永不停機的 Linux 解決方案 Ksplice (三) - Linuxpilot