OpenBSD 很可能是世界上最安全的操作系統。在其之上的每一步開發過程都重點關注於構建一個安全、開放和免費的平台。UNIX® 和 Linux® 管理員請注意:您可能在日常工作中已經使用了從 OpenBSD 中移植的工具,只是您並不知道而已。或許,現在我們應該對整個操作系統進行更深入的研究。
當安全性作為最重要的考慮因素時,有必要研究產生現在安全遠程訪問方面的標准 OpenSSH (Open Secure Shell) 的操作系統。OpenSSH 只是 OpenBSD 中的一部分,而該分發版從底層開始著重強調了安全性,它實現了創建一個缺省安全 的類 UNIX® 操作系統的目標。這種立場與現在大多數的操作系統有所不同,對於這些操作系統,在實際使用之前需要耗費大量的時間和精力對其環境進行加強。事實上,OpenBSD 是如此的安全,以至於在 DEF CON 競賽中曾一度禁止使用它,在這個競賽中,破解高手們 對所有其他的系統進行攻擊。
BSD 概述
Berkeley Software Distribution (BSD) 是歷史最悠久和最流行的 UNIX 版本之一。現在,它被分為許多不同的版本,其中有三種比較常見的開放源代碼分發版:
FreeBSD
OpenBSD
NetBSD
盡管 FreeBSD 在這三種發布版中使用得最廣泛,但每個版本都有其顯著的優勢,這使得選擇正確的解決方案成為一項重要的決策。FreeBSD 是三者中最常見的系統,廣泛應用於 i386 環境。當安全性成為最重要的考慮因素時,OpenBSD 則是合適的分發版。NetBSD 提供了一種小規模的、高度可移植的選擇,它可以運行於各種各樣的體系結構中。
OpenBSD 審核處理
OpenBSD 審核處理可能是該分發版中一致安全性的最大因素。一組有經驗的開發人員重點對進入源代碼樹的每段代碼進行了審核。分析代碼中的安全缺陷和一般性錯誤(它們可能並不會影響到整體功能,但可能會作為安全缺陷而被利用)。對每個錯誤進行認真和及時的處理。這種積極主動的處理方法使得 OpenBSD 免受各種未知攻擊的影響,而其他的分發版則在發現攻擊後緊急對系統進行保護。
OpenBSD:使用地點與時間
在任何強調安全性的環境中,都可以安裝 OpenBSD。現在,大家的安全意識越來越強,計算機需要全天候連接到 Internet 上,無論是在家庭、政府或企業環境中,很少有人把安全性問題不當回事。金融巨頭依賴 OpenBSD 以確保企業網絡和客戶記錄的安全。與其他的類 UNIX 操作系統相比,OpenBSD 可能並不擁有廣泛的用戶基礎,但是在許多網絡中的最關鍵的地方通常都安裝了該操作系統。
作為 NetBSD 的近親,OpenBSD 也可以運行於各種各樣的硬件之上。下面具體來了解一下:
Alpha:基於 Digital Alpha 的系統
amd64:基於 AMD64 的系統
Cat:StrongARM 110 評估板 (Evaluation Board)
hp300:Hewlett-Packard HP 9000 系列的 300 和 400 工作站
HP/PA:Hewlett-Packard Precision Architecture (PA-RISC) 系統
i386:基於 Intel® i386 體系結構和兼容處理器的標准計算機
luna88k:Omron LUNA-88K 和 LUNA-88K2 工作站
mac68k:基於 Motorola 680x0 的帶 MMU 的 Apple Macintosh
macppc:從 iMac 開始,基於 Apple PowerPC 的計算機
mvme68k:基於 Motorola 680x0 的 VME 系統
mvme88k:基於 Motorola 881x0 的 VME 系統
SGI:基於 SGI MIPS 的工作站
SPARC:Sun sun4-、sun4c- 和 sun4m 級的 SPARC 系統
SPARC64:Sun UltraSPARC 系統
VAX:基於 Digital VAX 的系統
Zaurus:Sharp Zaurus C3x00 PDA
OpenBSD 核心包和特性
既然已經確定了 OpenBSD 是否適合於您的硬件平台,下面讓我們更仔細地了解一下 OpenBSD 中一些重要的部分。
OpenSSH
第一個值得關注的包是 OpenSSH,所有的 UNIX 和 Linux® 用戶對它都很熟悉。然而,許多人可能並不知道它來自於 OpenBSD 開發人員。OpenSSH 最初用於 OpenBSD,後來成為標准的安全 Shell (SSH) 包,並移植到幾乎所有版本的 UNIX、Linux 和 Microsoft® Windows® 操作系統。OpenSSH 包括用於安全登錄的 ssh、用於安全復制的 scp 和 sftp,後者是 ftp 的安全替代方法。所有的源代碼都符合開放源代碼 BSD 許可,必須遵守 OpenBSD 的規程以杜絕在該分發版中出現任何專用代碼和限制性許可計劃(這是創建新版本的 SSH 的原動力)。OpenBSD 中所包含的每個軟件部分都是完全免費的,並且在使用上沒有任何限制。
加密
因為 OpenBSD 項目是在加拿大進行的,所以其中應用的加密技術不受美國的出口限制,這使得該分發版可以充分利用各種現代的加密算法。幾乎可以在該操作系統的任何地方找到加密處理,從文件傳輸到文件系統,乃至網絡。OpenBSD 中還包含偽隨機數生成器,它可以確保無法根據系統狀態預測隨機數。其他的特性還包括加密哈希函數、加密轉換庫和加密硬件支持。
OpenBSD 中另一個主要的部分是 IP 安全協議 (IPSec),該操作系統中沒有依賴先天不安全的 TCP/IP Version 4 (IPV4),而使用了這個協議。(IPV4 選擇信任所有的人和所有的事物。)IPSec 對數據包進行加密和驗證以保護數據的保密性,並確保在傳輸過程中不會對數據包進行任何更改。隨著 TCP/IP Version 6 (IPV6) 的引入,IPSec 成為標准的 Internet 協議中不可或缺的部分,這使得未來的 Internet 在缺省情況下 更加安全。
OpenBSD 可以作為防火牆
因為 OpenBSD 很小並且很安全,所以 OpenBSD 實現的最常見目標之一是用作防火牆。防火牆從底層對大多數安全單元進行操作,並且 OpenBSD 的包過濾實現是非常優秀的。Packet Filter (PF),OpenBSD 開發社區設計的開放源代碼解決方案,它是 OpenBSD 所選擇的方法。與 OpenBSD 軟件的其他許多部分一樣,這種方法非常成功,以至於其他的 BSD 變種紛紛將其移植到自己的分發版中。
OpenBSD 配置為缺省安全,所以在設置堅如磐石的防火牆時,您無需關閉過多的服務。您需要啟用第二個 Ethernet 接口,並根據需要配置 PF。有關介紹如何將 OpenBSD 服務器設置為防火牆的文章鏈接,請參見參考資料部分。
加密和隨機數
大多數操作系統很少在其關鍵組成部分中包含加密處理,這使得它們先天就缺乏安全性。導致這種缺陷的一個重要原因是,大多數的操作系統來自美國,不允許開發人員出口健壯的加密軟件。OpenBSD 中的加密哈希庫包括 MD5、SHA1 和 RIPEMD160。OpenBSD 中的加密轉換庫包括 Blowfish、數據加密標准 (DES)、3DES 和 Cast。
大部分加密處理都在底層進行,這樣一來,用戶就不用為了保護系統安全而必須成為加密方面的專家。OpenBSD 開發團隊很清楚,大多數管理員並不是安全方面的專家,並且不應該指望他們煞費周折地加強他們的環境。那些認為 OpenBSD 不是用戶友好的操作系統的人,大部分是受到了誤導。如果大多數管理員願意花時間使用 OpenBSD 的缺省安全措施來替代任何其他的分發版,那麼他們很可能會改變其思維方式。
隨機數是確保安全性的重要組成部分。OpenBSD 內核使用中斷信息創建不斷變化的熵池,它可以為加密函數提供種子數據,並為事務 ID 提供數值。例如,偽隨機數可用於進程 ID 和包 ID,這使得那些想要進行攻擊的人很難進行欺騙。OpenBSD 甚至在 bind(2) 系統調用中使用了隨機端口分配。大多數源於 UNIX 的操作系統要麼創建順序的 ID,要麼使用可預測其結果的簡單算法。
OpenBSD 團隊仍在進一步廣泛地研究文件系統的加密,並且在系統中所有可能的地方都對數據進行了加密。將交換分區分為一些小的區域,每個部分使用單獨的密鑰進行加密,以便確保不會將敏感數據洩漏到系統中不安全的部分,這是傳統的基於 UNIX 或 Linux 的系統中常見的問題。如果希望對用戶數據進行加密,那麼您可以使用 OpenBSD 中的加密文件系統 (CFS)。CFS 工作於用戶級,通過網絡文件系統 (NFS) 與內核進行通信。該系統允許用戶透明地訪問經過加密的目錄,所以他們可以選擇要對哪些數據進行加密,而不用受加密/解密過程的困擾。
注意:有關 OpenBSD 中加密方面的更多信息,請參見參考資料部分。
安裝 OpenBSD
如果不能全面了解 OpenBSD 的優點,新用戶可能會傾向於使用熟悉的 Linux 分發版,因為他們對 BSD 復雜的安裝過程感到害怕。大多數用戶可能對這個安裝過程並不熟悉,本文將對其進行簡要的概述,以說明這個安裝過程是非常簡單的。花一點時間了解 OpenBSD 的安裝過程可以節省鎖定 Linux 分發版所花費的大量時間,因為 Linux 分發版不是缺省安全的,這樣做通常是很實際的選擇。
有幾種不同的安裝方法,根據平台的不同,其具體步驟也有所區別。我主要介紹通過創建您自己的一套 CD 在 i386 服務器(例如,一台運行 IBM 服務器的計算機)上基於 CD-ROM 進行安裝。在官方的 FAQ 中並沒有介紹這個過程。
第 1 步. 獲得該分發版
第 2 步. 創建安裝媒體
從 cd39.iso 創建啟動 CD,並將其標注為 Disk 1,如清單 1 所示。使用 /3.9/i386/ 目錄中所有其他的文件創建一張常規的 CD,並將其標注為 Disk 2,如清單 2 所示。其他的可選方法包括購買一套 CD、執行網絡安裝或構建自定義 .iso 文件,但我發現這種兩張 CD 的方法最簡單。
清單 1. 使用 cd39.iso 創建啟動 CD
cd39.iso 02-Mar-2006 03:10 4.6M
清單 2. 將下列文件放入到 Disk 2 上名為 /3.9/i386/ 的目錄中
base39.tgz 02-Mar-2006 03:10 38.6M
bsd 02-Mar-2006 03:10 5.2M
bsd.mp 02-Mar-2006 03:10 5.2M
bsd.rd 02-Mar-2006 03:10 4.5M
comp39.tgz 02-Mar-2006 03:10 71.8M
etc39.tgz 02-Mar-2006 03:10 1.1M
game39.tgz 02-Mar-2006 03:10 2.5M
man39.tgz 02-Mar-2006 03:10 7.1M
misc39.tgz 02-Mar-2006 03:10 2.2M
xbase39.tgz 10-Mar-2006 12:04 10.1M
xetc39.tgz 10-Mar-2006 12:04 88k
xfont39.tgz 10-Mar-2006 12:04 31.7M
xserv39.tgz 10-Mar-2006 12:04 19.0M
xshare39.tgz 10-Mar-2006 12:04 2.0M
第 3 步. 開始進行安裝
在創建了這些安裝 CD 之後,從 Disk 1 啟動新服務器。命令提示符將指導您完成相應的安裝過程。您可以在 OpenBSD FAQ(請參見參考資料部分)的第 4 部分中找到詳細的說明。
其中最復雜的部分是設置磁盤 部分,但通過選擇將所有的磁盤用於 OpenBSD(如果您不需要保留任何其他的分區),您可以跳過其中大量的信息。無論您的分區決定如何,請確保按照創建磁盤標簽 部分中的說明一步一步地進行安裝,如果需要,您只需單獨創建更大的 /usr 和 /home 分區。請注意 OpenBSD 中的兩層 分區系統。第 1 步設置了傳統的 fdisk 可視分區,而第 2 步磁盤標簽設置了 OpenBSD 的子分區。
除此之外,唯一需要進行調整的地方(對於使用兩張 CD 安裝套件的方法)是在下面的步驟中切換 CD:
Let's install the sets!
Location of sets? (cd disk ftp http or 'done') [cd]
從 Disk 1 切換到 Disk 2(包含 /3.9/i386/ 中所有文件的 CD)。
第 4 步. 開始使用該系統!
在對所有的內容進行了設置之後,您就可以開始使用該系統了。
聽起來很不錯,現在我應該如何使用它呢?
與了解如何確保系統安全相比(它已經具有了許多合理的缺省設置),在您作為一個新的 OpenBSD 用戶開始管理您的系統之前,可能希望弄清楚一些相關的步驟。
第一點,在缺省情況下,wheel 組中不包含任何用戶,這意味著嘗試使用 su 命令將會失敗。使用 adduser 命令從命令行創建新的用戶,該命令將引導您通過簡單的提問和回答過程來設置缺省值(一次性的過程),並創建您的第一個用戶。
比方說,您創建了一個名為 bsdadmin 的用戶。如果將 bsdadmin 作為主要的管理帳戶,那麼您需要能夠使用 su 命令快速地訪問 root 帳戶。要完成該任務,以 root 帳戶登錄,然後編輯 /etc/group 文件,以便在 wheel 組中包含 bsdadmin。只需將 bsdadmin 追加到第一行(這一行的內容為 wheel:*:0:root)。
盡管 OpenBSD 沒有提供基於圖形的工具以幫助用戶進行系統管理,但 OpenBSD 開發人員非常關注於為該操作系統中的每個組成部分提供大量精確的 man 頁面。當您遇到疑問或需要了解某個新工具時,我建議您隨時使用可靠的 man 命令。
我還能用它完成其他哪些任務呢?
OpenBSD 預先打包了一組第三方組件,其目的同樣是關注於安全性和穩定性,而不是用來完成各種各樣的日常工作。下面是 OpenBSD Version 3.9 中包含的包的缺省列表:
OpenSSH Version 4.3
GCC Versions 2.95.3 和 3.3.5(缺省情況下啟用了 Propolice 棧保護技術)
Perl Version 5.8.6(包含來自 OpenBSD 團隊的修補程序和改進程序)
Apache Version 1.3.29 Web 服務器(包括 mod_ssl Version 2.8.16 和動態共享對象 (DSO) 支持)
OpenSSL Version 0.9.7g(包含來自 OpenBSD 團隊的修補程序和改進程序)
Groff Version 1.15
Sendmail Version 8.13.4(包含 libmilter)
BIND Version 9.3.1(包含對 chroot 操作和其他安全相關問題的改進)
Lynx Version 2.8.5rel.4(添加了對安全套接字層 (HTTPS) 的 HTTP 支持,並包含來自 OpenBSD 團隊的修補程序)
Sudo Version 1.6.8p9
Ncurses Version 5.2
KAME IPv6
Heimdal Version 0.7(包含修補程序)
Arla Version 0.35.7
gdb Version 6.3
您還可以使用一些附加的第三方包,使用 OpenBSD 的 pkg_add 應用程序可以很容易地對其進行安裝。您可以在 OpenBSD 鏡像的 /3.9/packages/i386/ 目錄中找到完整的列表。pkg_add 應用程序接受包的名稱作為輸入,自動地確定依賴關系,並安裝所需的全部包。
#kern.emul.linux=1
# enable running Linux binaries
通過這種方法,您可以運行簡單的、靜態鏈接的 Linux 應用程序。要運行更多類型的軟件,還需要按照前面所描述的,使用 pkg_add 安裝 Redhat/base 包。
總結
OpenBSD 已經成為世界上最安全的 UNIX 派生系統,並且幾乎實現了所有相關的內容。其中的一些設計原則,如代碼審核、加密處理的廣泛使用以及仔細的配置選擇,它們組合在一起可以確保實現 OpenBSD 的缺省安全 的思想。盡管 OpenBSD 安裝一般用於安全服務器和防火牆,但 OpenBSD 廣泛的硬件和軟件支持使得該操作系統適用於各種各樣的目的。UNIX 和 Linux 專家都會發現對 OpenBSD 中的許多部分非常熟悉,並且他們很可能會重視其中一些有意偏離的領域。