補丁管理:不要以持續運行時間為自豪
就在之前幾篇文章,我開始了「系統管理 101」系列文章,用來記錄現今許多初級系統管理員、DevOps 工程師或者「全棧」開發者可能不曾接觸過的一些系統管理方面的基本知識。按照我原本的設想,該系列文章已經是完結了的。然而後來 WannaCry 惡意軟體出現,並在補丁管理不善的 Windows 主機網路間爆發。我能想像到那些仍然深陷 2000 年代 Linux 與 Windows 爭論的讀者聽到這個消息可能已經面露優越的微笑。
我之所以這麼快就決定再次繼續「系統管理 101」文章系列,是因為我意識到在補丁管理方面一些 Linux 系統管理員和 Windows 系統管理員沒有差別。實話說,在一些方面甚至做的更差(特別是以持續運行時間為自豪)。所以,這篇文章會涉及 Linux 下補丁管理的基礎概念,包括良好的補丁管理該是怎樣的,你可能會用到的一些相關工具,以及整個補丁安裝過程是如何進行的。
什麼是補丁管理?
我所說的補丁管理,是指你部署用於升級伺服器上軟體的系統,不僅僅是把軟體更新到最新最好的前沿版本。即使是像 Debian 這樣為了「穩定性」持續保持某一特定版本軟體的保守派發行版,也會時常發布升級補丁用於修補錯誤和安全漏洞。
當然,如果你的組織決定自己維護特定軟體的版本,要麼是因為開發者有最新最好版本的需求,需要派生軟體源碼並做出修改,要麼是因為你喜歡給自己額外的工作量,這時你就會遇到問題。理想情況下,你應該已經配置好你的系統,讓它在自動構建和打包定製版本軟體時使用其它軟體所用的同一套持續集成系統。然而,許多系統管理員仍舊在自己的本地主機上按照維基上的文檔(但願是最新的文檔)使用過時的方法打包軟體。不論使用哪種方法,你都需要明確你所使用的版本有沒有安全缺陷,如果有,那必須確保新補丁安裝到你定製版本的軟體上了。
良好的補丁管理是怎樣的
補丁管理首先要做的是檢查軟體的升級。首先,對於核心軟體,你應該訂閱相應 Linux 發行版的安全郵件列表,這樣才能第一時間得知軟體的安全升級情況。如果你使用的軟體有些不是來自發行版的倉庫,那麼你也必須設法跟蹤它們的安全更新。一旦接收到新的安全通知,你必須查閱通知細節,以此明確安全漏洞的嚴重程度,確定你的系統是否受影響,以及安全補丁的緊急性。
一些組織仍在使用手動方式管理補丁。在這種方式下,當出現一個安全補丁,系統管理員就要憑藉記憶,登錄到各個伺服器上進行檢查。在確定了哪些伺服器需要升級後,再使用伺服器內建的包管理工具從發行版倉庫升級這些軟體。最後以相同的方式升級剩餘的所有伺服器。
手動管理補丁的方式存在很多問題。首先,這麼做會使補丁安裝成為一個苦力活,安裝補丁越多就需要越多人力成本,系統管理員就越可能推遲甚至完全忽略它。其次,手動管理方式依賴系統管理員憑藉記憶去跟蹤他或她所負責的伺服器的升級情況。這非常容易導致有些伺服器被遺漏而未能及時升級。
補丁管理越快速簡便,你就越可能把它做好。你應該構建一個系統,用來快速查詢哪些伺服器運行著特定的軟體,以及這些軟體的版本號,而且它最好還能夠推送各種升級補丁。就個人而言,我傾向於使用 MCollective 這樣的編排工具來完成這個任務,但是紅帽提供的 Satellite 以及 Canonical 提供的 Landscape 也可以讓你在統一的管理界面上查看伺服器的軟體版本信息,並且安裝補丁。
補丁安裝還應該具有容錯能力。你應該具備在不下線的情況下為服務安裝補丁的能力。這同樣適用於需要重啟系統的內核補丁。我採用的方法是把我的伺服器劃分為不同的高可用組,lb1、app1、rabbitmq1 和 db1 在一個組,而lb2、app2、rabbitmq2 和 db2 在另一個組。這樣,我就能一次升級一個組,而無須下線服務。
所以,多快才能算快呢?對於少數沒有附帶服務的軟體,你的系統最快應該能夠在幾分鐘到一小時內安裝好補丁(例如 bash 的 ShellShock 漏洞)。對於像 OpenSSL 這樣需要重啟服務的軟體,以容錯的方式安裝補丁並重啟服務的過程可能會花費稍多的時間,但這就是編排工具派上用場的時候。我在最近的關於 MCollective 的文章中(查看 2016 年 12 月和 2017 年 1 月的工單)給了幾個使用 MCollective 實現補丁管理的例子。你最好能夠部署一個系統,以具備容錯性的自動化方式簡化補丁安裝和服務重啟的過程。
如果補丁要求重啟系統,像內核補丁,那它會花費更多的時間。再次強調,自動化和編排工具能夠讓這個過程比你想像的還要快。我能夠在一到兩個小時內在生產環境中以容錯方式升級並重啟伺服器,如果重啟之間無須等待集群同步備份,這個過程還能更快。
不幸的是,許多系統管理員仍堅信過時的觀點,把持續運行時間(uptime)作為一種驕傲的象徵——鑒於緊急內核補丁大約每年一次。對於我來說,這隻能說明你沒有認真對待系統的安全性!
很多組織仍然使用無法暫時下線的單點故障的伺服器,也因為這個原因,它無法升級或者重啟。如果你想讓系統更加安全,你需要去除過時的包袱,搭建一個至少能在深夜維護時段重啟的系統。
基本上,快速便捷的補丁管理也是一個成熟專業的系統管理團隊所具備的標誌。升級軟體是所有系統管理員的必要工作之一,花費時間去讓這個過程簡潔快速,帶來的好處遠遠不止是系統安全性。例如,它能幫助我們找到架構設計中的單點故障。另外,它還幫助鑒定出環境中過時的系統,給我們替換這些部分提供了動機。最後,當補丁管理做得足夠好,它會節省系統管理員的時間,讓他們把精力放在真正需要專業知識的地方。
Kyle Rankin 是高級安全與基礎設施架構師,其著作包括: Linux Hardening in Hostile Networks,DevOps Troubleshooting 以及 The Official Ubuntu Server Book。同時,他還是 Linux Journal 的專欄作家。
via: https://www.linuxjournal.com/content/sysadmin-101-patch-management
作者:Kyle Rankin 譯者:haoqixu 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive