安全的定義 安全是當今 IT 相關頭條新聞的一個重要話題。經常出現的系統漏洞和安全補丁以及病毒和蠕蟲是每個使用計算機的人都耳熟能詳的名詞。因為幾乎每台計算機系統都連接到另外的計算機或者連接到 Internet,因此確保這些計算機的安全,對於減少入侵、數據竊取或丟失、誤用甚至對第三方的責任而言是至關重要的。 確保安全即使對於沒有連接到網絡的獨立的計算機也是很重要的。必須自可信賴的來源安裝應用程序,比如經過驗證的並檢查過病毒的光盤。對應用程序數據也必須同樣小心。例如,對於可以執行強大的宏語言或者引入非法數據的軟件程序包(Office 套件等等),其軟件缺陷可能會被利用來執行任意的代碼。因此,應用程序數據在拷貝到計算機之前必須經過完整性檢查。可以通過將數據放置在一個安全的地方來控制對系統的訪問(當然,不考慮來自已授權人員的攻擊)。 當系統連接到網絡並向其他計算機提供服務(有意地或無意地)時,事情會變得更為棘手。在那種情況下,數據可能不只是來自系統管理員,因為客戶機程序要使用所提供的服務,而系統漏洞可能會讓入侵者控制計算機。 這就是為什麼安全是從開始計劃直到拆除系統的整個系統生命周期中最基本的問題。但是,安全的確切含義是什麼? 通常,數據安全和系統安全可以分開來考慮。 數據安全 通常被認為是確保以下方面的所有努力: 機密性(Confidentiality)。 完整性(Integrity)。 可用性(Availability)。 綜合起來,這些被稱作是存儲在計算機上的數據的“CIA”。對 /etc/passwd 等配置數據的保護可以歸類為數據安全。系統安全 指的是計算機平台本身。美國 National Information Systems Security Glossary(參閱 參考資料 以獲得鏈接)對系統安全的定義如下: 系統安全。對信息系統的保護,防止未授權的訪問及對信息(不論是存儲中的、正在處理的還是正在傳輸的)的修改,並防止對授權用戶服務的拒絕或對未授權用戶服務的允許,包括那些檢測、記錄和反擊此類威脅的措施。 重要的是要認識到系統安全強調的是一個反復的過程,這個過程包括應用安全補丁、經常審計、控制,同時最起碼要有一個安全的系統配置。就此而言,不可能保證絕對的安全,也不可能提供百分之百安全的服務。目標更應該是在安全性、系統可用性和維護這個安全層級所需要的努力這三者之間找到一個折衷點。這個折衷取決於安全對於存儲在計算機中的數據來說的重要性以及這些數據預期的使用情形(閱讀 BrUCe Schneier 的 Secrets and Lies,John Wiley & Sons,2000;參閱 參考資料 以獲得鏈接)。
完整性 具備 完整性 的數據是指合法的而且沒有經過偶然的或惡意的修改。當進行數據存儲或交換時應該考慮其完整性。目標接收到的數據必須是源數據的原樣拷貝。這就是說,一方面,物理傳輸和存儲媒介必須是可靠的,以使得數據可以正確地傳輸而不發生位錯誤。另一方面,數據必須不能被未經授權的實體不加檢測地訪問而修改。完整性的范圍是從用戶 ―― 最終的權威 ―― 將數據委托給系統後開始的。因此用戶錯誤不在完整性范圍之內。 對網絡連接而言,要尤其注意確保完整性,不管網絡是否安全(例如,通過加密傳輸)。在傳輸過程中,可以訪問傳輸媒介的第三方可能會重新路由或者修改數據。涉及網絡的物理環境和互聯的計算機的完整性的方面並不特定於 Linux,而是對所有計算機安裝來說都是如此;因而這也超出了本文的范圍。無論如何,除了其他方法之外,在物理層上采取的保護數據的措施包括,限制對計算機的訪問、保持對傳輸媒介(比如電纜和連接器)的保護,以及避免停電和靜電釋放(閱讀“Building the Ideal Web Hosting Facility: A Physical Security Perspective”,參閱 參考資料 以獲得鏈接)。 本系列文章將集中關注加密和簽名等在操作系統和應用程序環境中采取的措施,以積極地確保完整性。本文還將關注審計機制,以識別完整性的缺失並確定應對此負責的當事人。
機密性 當受保護的數據只能被授權的人或系統讀取或者修改時,要保持其 機密性。這是一個與完整性截然不同的概念:當數據在網絡上傳輸時,它可能是被毫無修改地正確傳輸,因此確保了其完整性,但是如果被第三方中途截取的話就再也不是機密的了。當未被授權的人可以訪問數據傳輸並從中獲取有價值的信息時,只有完整性是不夠的。數據的機密性引出了三個更深入的問題: 誰希望訪問數據?(認證) 哪些數據可以被訪問?(授權) 如何保護數據不受未授權的訪問? Linux 有若干方法可以確保試圖訪問數據的實體是其所宣稱的那一個。通過 Pluggable Authentication Modules(PAM),您可以實現一些認證策略,從存儲在本地機器上一個集中目錄(NIS、Kerberos、LDAP 等等)中簡單的用戶名/口令組合,到硬件標識或生物特征掃描不等。文件訪問的授權可以使用傳統的(粗糙的)UNIX 文件權限來解決:用戶、組或全體級別的讀、寫和執行權限。較新的細粒度的(fine-grained)方法 ―― 訪問控制列表(Access Control Lists)―― 讓您可以為具體的用戶授予或拒絕具體的權限。 標准 Linux 安全概念是在軟件中實現的,依賴於內核不接受沒有被授權的用戶對資源的使用。不過,內核缺陷(特權提升/自動調整、未經檢查的參數,等等)可能會使用戶可以訪問先前不能訪問的內存區域、磁盤空間、網絡或者其他資源。通過安裝擊鍵記錄器(keyloggers)、取走硬盤驅動器並在其他機器中讀取、嗅探網絡傳輸等等,對硬件物理上的訪問可以讓用戶繞過軟件檢查。這樣,必須采取更進一步的努力來保護機密的數據,比如文件系統、單個文件、網絡傳輸的加密,和/或應用程序級別的加密。此外,物理上的措施也需要考慮,比如安全區域、數據的安全刪除,以及機密信息的會計程序,不過本文並不涉及這些。
可用性 即使完整性和機密性都得到了保證,如果數據不能被訪問,那麼它是沒有用處的,即不可用的。 可用性 措施確保數據永遠不會丟失,而且當被請求時,可以以預定義的性能級別被訪問。可用性可能會受到不同方式的威脅: 破壞性攻擊 ―― 稱為拒絕服務(Denial-of-Service,DoS)攻擊 ―― 這類攻擊的目標是可用性。它們通過消耗所有可用的網絡、CPU、存儲或操作系統資源(比如文件句柄),使得一台計算機或一個服務不可用或不能用。 目標是數據本身的攻擊,試圖刪除或覆蓋數據。 數據的意外破壞。在大部分情況下,不可能避免對數據的意外破壞,因為擁有適當權限的用戶被認為是最終的權威。您只能通過在適當的位置使用一個備份/轉儲基礎設施來預先做好准備。 最後,但不是最不重要的,缺陷、配置錯誤、物理環境、硬件失敗、停電、不必要的系統重新引導等等,也都可能影響可用性。這個列表中的軟件相關話題更應該歸入 系統安全,稍後將更深入討論。如上所述,硬件相關的話題在本文中不做討論,但是,如果您對這些話題感興趣,請參閱 參考資料 部分以獲得更多讀物的鏈接。 解決上面列表中的前兩個問題的特定 Linux 措施包括,網絡數據包的防御(firewalling)/過濾(filtering ),對文件系統完整性的保護,以及計劃可根據需要進行添加的額外的資源(例如,使用 Tivoli® Intelligent Orchestrator;參閱 參考資料 以獲得鏈接)。
Linux 系統安全 Linux 是一個現代的、開放源代碼的操作系統,可以自由地發行和拷貝。每個用戶都有權限修改它的源代碼,易於為您自己的環境定制 Linux、向操作系統添加新部件、發現缺陷和提供補丁,以及檢查源代碼中的安全漏洞。 盡管數據安全和系統安全是分開來考慮的,但是系統安全會對數據安全產生主要的影響。這就是為什麼 Linux 具有很多解決機密性、完整性、可用性以及系統安全本身的問題的集成部件的原因。其中有 IP 防御、認證機制、系統日志和審計、加密協議和 API、內核級 VPN 支持,等等。另外,系統安全可以由(開放源代碼)軟件應用程序來支持,這些應用程序提供安全服務、加固和/或控制 Linux 系統、防止並檢測入侵、檢查系統和數據的完整性,並提供防止不同攻擊的屏障。 安全的一個值得關注的主要因素是,Linux 與不開放源代碼的操作系統之間的區別在於開放源代碼開發過程本身。由於軟件的每個用戶和開發都可以訪問其源代碼,因而有很多人都在控制和審視源代碼中可能的安全漏洞。軟件缺陷很快會被發現。一方面,這會導致這些缺陷更早被利用;另一方面,很快就會有可用的安全補丁。
結束語 考慮其可靠性、穩定性、可擴展性、可管理性、性能,以及最後但不是最不重要的一點,它的安全部件, Linux 已經證明適合專業的企業應用程序。由於它的開放源代碼哲學讓用戶可以為滿足具體的需要而定制和擴展系統,Linux 變得越來越流行。因此,Linux 系統管理員需要理解加固 Linux 並保護它不受可能攻擊的安全機制。本系列的下一篇文章將討論獲得安全的 Linux 系統的第一個步驟:計劃和執行安裝。