OpenBSD

**OpenBSD** 是一個類 Unix 電腦作業系統，是加州大學伯克利分校所開發的 Unix 衍生系統柏克萊軟體套件（BSD）的一個後繼者。它是在 1995 年尾由荷裔加拿大籍專案領導者西奧・德・若特（Theo de Raadt）從 NetBSD 分支而出。除了作業系統，OpenBSD 專案已為眾多子系統編寫了可移植版本，其中最值得注意的是 PF 防火牆、OpenSSH 和 OpenNTPD，作為軟體套件，它們在其他作業系統中隨處可見。

該計劃以其對開放原始碼的堅持、高品質的文件、堅定的軟體授權條款和專注於系統安全及代碼品質而聞名。該專案由德・若特在加拿大阿爾伯塔省卡爾加里的家中所協調。它的標誌和吉祥物是一隻河豚，名為普菲（Puffy）。

OpenBSD 包含了一些在其他作業系統缺少或是列為選擇性的安全特性，至今開發者仍然保有審計原始碼以發現程式錯誤和安全問題的傳統。該專案對軟體授權條款有嚴格限制，並傾向於使用開源的 BSD 授權條款或其變種 —— 過去還曾對授權條款進行了全面的審計，並移除或替換掉以難以接受的授權條款釋出的代碼。

與大多數基於 BSD 的作業系統一樣，OpenBSD 的核心和使用者空間程式，如 shell 和 cat 及 ps 之類的通用工具，都在同一個原始碼庫共同開發。第三方軟體可從 port 樹中以二進位包的形式得到，或自原始碼中編譯。亦像大多數的現代 BSD 作業系統，在相容的電腦架構中，它能以相容模式完美執行為 Linux 編譯的二進位代碼。

OpenBSD 計劃維護著 20 種不同硬體平台的移植版，包括 DEC Alpha、英特爾 i386、惠普 PA-RISC、x86-64 及摩托羅拉 68000 處理器、蘋果 PowerPC、Sun SPARC 和 SPARC64 電腦和 Sharp Zaurus。OpenBSD 基金會被接納為 2014 年 Google 編程之夏的指導組織。

## 應用

OpenBSD 的安全增強功能，內建的加密功能和 pf 包過濾器使它在安全領域應用廣泛，例如作為防火牆、入侵檢測系統和虛擬私人網路閘道器。

幾個廠家的專有系統都基於 OpenBSD 開發，包括 Armorlogic 的裝置（Profense 網路應用防火牆）、Calyptix Security、GeNUA mbH、RTMX Inc 和.vantronix GmbH。較新版本的微軟 Services for UNIX 可延伸 Windows 作業系統的類 Unix 功能，其中由 Softway 系統公司開發的 Interix 互動套件使用了許多 OpenBSD 的代碼，該公司於 1999 年被微軟收購。Windows 的安全類產品 Core Force 則基於 OpenBSD 的 PF 防火牆。

OpenBSD 內建 X 視窗系統，適合於桌面使用。許多流行的桌面工具包可供選擇，包括桌面環境如 GNOME、KDE 及 Xfce，網路瀏覽器如 Konqueror、Firefox 及 Chromium，和多媒體程式 MPlayer、VLC 多媒體播放器及 xine。該計劃奉行極簡窗口管理理念，其在主要發行版中為 cwm 堆疊式視窗管理員提供了支援。

開源軟體諮詢公司的「M:tier」為許多財富 500 強公司在他們的企業環境中部署了 OpenBSD 的伺服器、桌上型電腦和防火牆。

OpenBSD 帶有全套伺服器套件，很容易組態為郵件伺服器、網路伺服器、FTP 伺服器、DNS 伺服器、路由器、防火牆或 NFS 檔案伺服器。此外軟體套件系統也含有提供其他服務協定的軟體，如 SMB（Samba）。

## OpenBSD 組件計劃

儘管團隊規模小，及 OpenBSD 使用率偏低，該計劃已成功地將基本系統的許多組件分拆，單獨成為有廣泛用途的可移植版本，其中包括：

* OpenBGPD，自由的邊界閘道器協定第 4 版（BGP-4）實現
* OpenOSPFD，自由的開放式最短路徑優先路由協定實現
* OpenNTPD，ntp.org 的網路時間協定守護行程的簡單替代
* OpenSMTPD，自由的簡單郵件傳輸協定（SMTP）守護行程，支援 IPv4/IPv6、PAM，Maildir 和虛擬域
* OpenSSH，自由的 Secure Shell 協定實現
* OpenIKED，自由的網際網路金鑰交換協定實現 (僅支援 ikev2)
* 通用位址冗餘協定（CARP），自由的思科專利 HSRP/ VRRP 伺服器冗餘協定替代
* PF，IPv4/IPv6 雙協定有狀態防火牆，支援 NAT、PAT、QoS、流量整形
* pfsync，PF 防火牆的防火牆狀態同步協定，支援通過 CARP 提供高可靠性
* spamd，支援灰名單的垃圾郵件過濾器，設計與 PF 防火牆協同工作
* tmux，自由、安全、可維護的 GNU Screen 終端復用器替代
* sndio，緊湊的音訊和 MIDI 框架
* Xenocara，客製化的 X.Org 編譯基礎
* cwm，堆疊式視窗管理員
* LibreSSL 自由的傳輸層安全性協定實作，2014 年原自 OpenSSL 的分支專案，主要目的是提高 SSL 組件的安全性

有些子系統已被其他 BSD 專案納入其核心中，並且上述所有軟體都可在其它類 Unix 系統中作為軟體套件獲得，甚至是 Microsoft Windows。

## 基本系統中的第三方組件

* X.org，帶計劃自己的修補程式的 X 窗口環境。用 x\*.tgz 安裝檔案集安裝。
* GCC 4.2、3.3 或 2.95（取決於平台），GNU C 編譯器。作為 comp54.tgz 檔案集的一部分安裝。
* Perl，帶 OpenBSD 團隊的修補程式和修改。
* Nginx，網路伺服器，帶修補程式。
* SQLite，帶 OpenBSD 團隊的修補程式和修改。
* Sendmail，郵件伺服器，帶 libmilter。
* BIND，DNS 伺服器（帶修補程式）。OpenBSD 改進了 chroot 和其他安全相關的操作。
* NSD，權威 DNS 伺服器。
* Doas，使使用者可以以其他身分執行單條命令。（OpenBSD 從 5.8 起）
* Ncurses。
* Heimdal，Kerberos 身分驗證協定的實現，帶修補程式。
* Binutils，帶修補程式。
* gdb，帶修補程式。
* Less 444，帶修補程式。
* Awk。

## 開發和釋出流程

專案採用連續開發模式，和開放、分層的團隊管理。只要有合適的技術，任何人都有可能被擇優授予提交權利，其中德・若特擔任協調員。團隊每年釋出兩個官方版本，版本號每次遞增 0.1，且為每個版本提供十二個月的支援。快照（snapshot）版的更新非常頻繁。受支援版本的維護修補程式可以手動應用到系統上，或定期以 CVS 倉庫的修補程式分支來更新系統。

另外，如果系統管理員希望儘快使用新添加的功能，則可以選擇升級到快照版，再用 CVS 倉庫的「當前」分支對系統更新。

專案強烈建議所有人使用由專案維護的標準通用 OpenBSD 核心，同時客製化的核心不受專案的支援，因為「企圖通過自訂或『最佳化』核心來解決問題，反而會產生更多的問題。「

主系統外的軟體通過 port 樹由 CVS 編譯，維護工作由維護者（又名 porter）個人承擔。包的 porter 負責更新軟體的當前分支，同時也要修復錯誤及為受支援的版本提供維護修補程式。因為專案缺乏人手，ports 不能像主系統那樣得到不間斷的嚴格審計。

每種架構的二進位包由 ports 樹集中編譯。目前版本、受支援版本、快照版本都採用這種方式。專案建議系統管理員使用包管理器，而不是從 ports 樹中編譯軟體，除非需要執行自己修改過的原始碼。

新版本釋出的同時也會釋出一首歌。

## 歷史和知名度

1994 年 12 月，NetBSD 聯合創始人西奧・德・若特被要求從 NetBSD 進階開發人員和核心團隊成員的位置上辭職。箇中原因並不完全清楚，但據傳這是由於他在 NetBSD 專案和其郵寄清單中與他人性格不合。

1995 年 10 月，德・若特從 NetBSD 1.0 復刻了一個新專案，創立 OpenBSD。初始版本 OpenBSD 1.2 於 1996 年 7 月釋出，緊接著同年十月釋出了 OpenBSD 2.0。從那時起，該計劃一直遵循每半年釋出新版本的進度，並且為每個版本提供一年的維護和支援。最新版本 OpenBSD 7.2 於 2022 年 10 月 20 日釋出。

2007 年 7 月 25 日，OpenBSD 開發者鮑勃・貝克宣布成立 OpenBSD 基金會，它是一個加拿大非營利組織，目的是「當有個人和組織想要支援 OpenBSD 時，可以有一個法律實體作為聯絡點來處理相關事務」。

很難確定究竟 OpenBSD 的使用有多廣泛：它的開發者既不公布、也不收集使用情況的統計資訊，且少有其他的資料來源。2005 年 9 月，新成立的 BSD 認證小組進行了一項調查，其中顯示 32.8％的 BSD 使用者（4330 位受訪者中的 1420 位）使用 OpenBSD，占有率為四大 BSD 變種的第二位，次於 FreeBSD 的 77％，優於 NetBSD 的 16.3％。

## 開放原始碼和開放文件

OpenBSD 建立之初，西奧・德・若特認為任何人在任何時間都應該可以方便地獲得原始碼，因此在查克・克拉納的協助下，他建立了一個公共、匿名的 CVS 伺服器。 這是同類軟體開發界的頭一個：當時的傳統是，只有一小隊開發人員才有機會檢視專案的原始碼庫。查克和德・若特認為，這種做法「違背了開源的哲學」，對於貢獻者也不方便。德・若特的決定使得使用者可以「更有作為」，堅定了計劃開放和公開存取原始碼的信念。

OpenBSD 的開發人員不容許原始碼樹中包含閉源的二進位驅動，不願簽署保密協定。因為在 OpenBSD 3.7 釋出前的截止時間內沒有得到說明文件，對 Adaptec AAC RAID 控制器的支援被從標準 OpenBSD 核心中移除了出去。

OpenBSD 對開放的政策延伸到了硬體文件：2006 年 12 月的幻燈片顯示，德・若特解釋道，如果沒有它「開發人員在編寫驅動程式就會經常犯錯誤」，並指出「像 [天哪，這能行] 的盲目開發很難成功，有的開發者乾脆就此放棄「。他接著說，OpenBSD 不能接受廠商的二進位驅動，「不能相信執行在我們核心中的廠商二進位檔案」，並說「當出現問題時…… 根本沒辦法修復 [他們]」。

## 授權

OpenBSD 計劃的目標是「保持原先伯克利 Unix 的著作權精神」，即「相對無擔保的 Unix 原始碼」。其中一個有名的例子是 OpenBSD 都會儘量使用 ISC 授權條款。為此，對於新寫的代碼，首選網際網路系統協會（ISC）授權條款，其為 BSD 授權條款的一種簡化版本，但去除了根據伯爾尼公約而不必要的語句，但 MIT 或 BSD 授權條款也可接受。與之相比，廣泛使用的 GNU 通用公眾授權條款被認為條款過於嚴格。

2001 年 6 月，因達倫・里德對 IPFilter 的修改引起了開發者的擔憂，OpenBSD 展開了對 ports 和原始碼樹的系統授權條款審計。在整個系統中發現了有一百多個檔案，其中的代碼沒有授權條款、授權含糊不清，或是違反了授權。為確保授權條款都能被嚴格遵守，開發者聯絡了所有與之相關的著作權持有人：一些代碼片段被刪除，許多代碼被替換，其他的如多播路由工具 mrinfo 和 map-mbone，原先全錄公司只允許研究性的使用目的，被重新授權，以使 OpenBSD 可以繼續使用它們；審計過程中還刪除了所有丹尼爾伯・恩斯坦所寫的軟體。當時，伯恩斯坦要求在再釋出他的代碼的所有修改版本前都須經過他的批准，而 OpenBSD 的開發者都不願意花時間和精力這麼做。刪除這些軟體引發了與伯恩斯坦的衝突，後者認為這種行為完全是多餘。他舉例說，網景網頁瀏覽器的授權條款更加不自由，並指責偽善的 OpenBSD 的開發者保留了網景瀏覽器，同時卻刪除了他的軟體。OpenBSD 計劃的觀點是，雖然網景瀏覽器不開源，但其授權條款的條件卻更易遵守。他們聲稱伯恩斯坦對衍生品的控制欲會浪費大量的額外精力，而符合他要求的最合適方式就是刪除。

由於對授權條款的關注，OpenBSD 團隊會選擇是從頭開發軟體，或是採用合適的現有軟體。特別是經過了 pf 包過濾器事件，這個組件包括在 IPFilter 中，首次出現在 OpenBSD 3.0，現在 DragonFly BSD、NetBSD 和 FreeBSD 上都可以看到它。OpenBSD 的開發者也用以 BSD 授權條款授權的等同專案或成立新專案，以取代用 GPL 授權條款授權的工具（如 diff、grep 及 pkg-config），其中包括 OpenBGPD 路由守護行程和 OpenNTPD 時間服務守護行程。

## 募資

雖然作業系統及其可移植的組件廣泛應用於商業產品，德・若特卻表示，商業公司幾乎沒有給予它們任何資金支援：「傳統上，我們的資金全都來自於使用者的捐贈和使用者購買的 CD（其他產品並不賺錢），顯然，這點錢並不多。」

本世紀初，該計劃得到了 DARPA 為期兩年的資助，使他們「雇了 5 名完全的全職工，花了 3 萬美元購買硬體，並舉辦了 3 場比賽。」

德・若特表示了對資金來源不平衡的擔心：「我認為，捐款首先應來源於是廠商，其次是企業使用者，再次是個人使用者。但事實幾乎完全相反，只有非常少的人捐了 15 至 1 美元。對於這些人，感謝你們！」

2014 年 1 月 14 日，鮑勃・貝克釋出了一個公告，請求人們捐款以支付電費。貝克說，如果沒有持續的資金來源，那麼 OpenBSD 就不得不關閉。計劃很快就收到了米爾恰・波佩斯庫價值兩萬美元的比特幣捐款，他是羅馬尼亞的 MPEx 比特幣交易所的建立者。 該專案希望募集到 150000 美元以支付帳單，並解除短期的資金顧慮。

## 安全與代碼審計

在 OpenBSD 創立後不久，當地的一家軟體安全公司 Secure Networks, Inc.（簡稱 SNI）與西奧・德・若特取得聯絡了。他們正在開發一個「網路安全審計工具」名為 Ballista（在被網路聯盟收購後改名為 Cybercop Scanner SNI），目的是尋找並利用可能存在的軟體安全漏洞。這與若特自己的興趣愛好不謀而合，這樣的強強聯手使得 OpenBSD2.3 計劃進展飛速，同時研究重點放在了系統安全上。

OpenBSD 的特點是極度注重系統安全。這包含了附加的 API，例如 _strlcat_ 和 _strlcpy_ 函式；工具鏈的選擇，如靜態範圍檢查器；用來防止無效存取的記憶體保護技術，如 ProPolice 和 W^X（W xor X）分頁保護特性；以及密碼和隨機技術。

為了減少漏洞和錯誤組態所導致允許權限提升的風險，在編寫新程式和覆寫原有程式時會注意權限分離、權限復原和使用 chroot。受到最小權限原則的啟發，OpenBSD 率先開發了權限分離技術，它將程式分離成兩個或者多個部分，其中一個執行需要特權的操作，其他大部分的代碼則執行那些無須特權的。權限復原與它類似，其為在程式結束需要權限的操作後就將權限復原。chroot 包括將應用程式對檔案系統的存取限制在某一部分，禁止其存取存有私人或者系統檔案的區域。開發者將這些特性應用到了通用軟體的 OpenBSD 版中，包括 tcpdump 和 Apache 網頁伺服器。

OpenBSD 開發者建立了並維護著一個 Telnet 的安全型替代品 OpenSSH。OpenSSH 基於原有的 SSH 套件，並由 OpenBSD 團隊進一步開發。它首次出現於 OpenBSD 2.6 中，現在許多作業系統都採用了 OpenSSH 這個最流行的 SSH 實現。

專案有對問題代碼的持續審計的政策，開發者馬克・埃斯皮將其描述為「永不結束的過程…… 不單單是對於某個特定問題的修復」。他接著列舉了發現問題後的幾個典型操作，包括檢查整個原始碼樹是否存在相似問題，「[力圖] 求證是否需要修訂文件」，以及研究是否「需要修改編譯器以提醒注意這個問題」。

### 調查可能的 FBI 後門

在 2010 年 10 月 11 日，格里高利・佩里給德・若特寄了一封電子郵件，稱 FBI 早在 10 年前就給了一些 OpenBSD 前開發者一筆錢，讓他們在 OpenBSD 加密框架中加入自己的後門。12 月 14 日，德・若特通過 openbsd-tech 郵寄清單將這封信公之於眾，並且建議對 IPsec 代碼庫進行審計。事實上德・若特對後門之說抱有懷疑態度，他邀請所有的開發者獨立覆審相關代碼。之後的幾周內一些程式問題得到了修復，但並未發現任何存在後門的證據。

### 標語

OpenBSD 網站一直都在強調預設安裝的安全記錄。直到 2002 年 6 月前，OpenBSD 的網站上都如此聲明：

2002 年 6 月，OpenSSH 中發現了一個遠端漏洞，可使遠端攻擊者取得 OpenBSD（和當時其他執行著 OpenSSH 的系統）的 root 權限。當然這個漏洞被迅速地修復了。與此同時網站上的聲明改成：

2007 年，OpenBSD 又被發現了一個與網路有關的遠端漏洞，同樣也被迅速修復。因此網站上的聲明又改成：

此標語沿用至今。

但這個聲明也遭到了批評，因為預設安裝下幾乎沒執行幾個系統服務，因此一些評論家認為其標語應該改成「在預設安裝下，沒有可工作的應用程式！」—— 事實上大部分使用者會開啟更多的服務，安裝更多的軟體。而專案聲明說，將預設安裝有意最小化是為了確保無經驗的使用者「不需要在一夜之間變成安全問題專家」，這也符合其將開源以及代碼審計實務作為安全系統重要組成的宗旨。

## 發行及推廣

OpenBSD 可以從多種方式自由取得：原始碼可以從匿名 CVS 中檢出，二進位檔案和開發快照可以通過 FTP、HTTP、rsync 或 AFS 下載。預先包裝好的 CD-ROM 集只需支付一小筆費用就可在網上購得，附帶各種各樣的貼紙和版本主題曲的拷貝。這些和他們的藝術品和其他獎金一道組成了該計劃為數不多的收入來源，以負擔硬體、頻寬及支付其他費用。

同其他作業系統一樣，OpenBSD 提供了易於安裝和管理程式的軟體套件管理系統，但它並不屬於基本作業系統的一部分。軟體套件工具可以用軟體套件來提取、管理和移除二進位檔案。在 OpenBSD 上，軟體套件的原始碼儲存於 port 系統中，其為一系列的 Makefile 檔案和編譯這個包所需的其他編譯基礎。OpenBSD 中 port 和基礎作業系統是一起開發和釋出的：這意味著和 4.6 一起釋出的 port 和軟體套件不適合用於 4.5，反之亦然。

OpenBSD 最初採用 Phil Foglio 所繪的 BSD 小惡魔作為他們的吉祥物守護行程，後者後來由約翰・拉塞特修改，馬歇爾・柯克・麥庫西克持有著作權。
在後續版本中吉祥物有過更改，最終選定了 Puffy，他們稱之為一條河豚。從那時起 Puffy 就出現在各種 OpenBSD 宣傳材料中，在釋出歌曲和藝術品中也能看到。早期 OpenBSD 版本的宣傳資料並沒有一個統一的主題或設計，但後來每個版本的 CD-ROM、釋出歌曲、海報和 T 恤衫都有自己的單一風格和主題，有時其是由 Plaid Tongued Devils 的 Ty Semaka 所設計。這些都是倡導使用 OpenBSD 的一部分。每個版本會從道德或政治的角度闡述專案之所以重要的一個原因，通常是以戲仿的方式。

## 版本歷史

首個 OpenBSD 官方版（OpenBSD 2.0）於 1996 年 10 月釋出，現已發展到 2022 年 10 月 20 日釋出的 OpenBSD 7.2。

## 文獻

## 參見

* BSD 作業系統比較
* 自由及開放原始碼軟體授權條款比較
* 開源作業系統比較
* Hackathon
* KAME 計劃
* OpenBSD Journal
* pfSense
* POSSE 計劃
* 注重安全的作業系統
* LibreSSL

## 參考

## 外部連結

* 官方網站
* OpenBSD Journal
* 非官方 OpenBSD ports 追蹤器（頁面存檔備份，存於網際網路檔案館）
* OpenBSD ports web-site based on the ports-readmes port
* OpenBSD 原始碼搜尋（頁面存檔備份，存於網際網路檔案館）
* freenode 上的 #openbsd，或直接通過瀏覽器存取：https://web.archive.org/web/20140305111015/https://webchat.freenode.net/?channels=openbsd

**影片**

* Video - Exploit Mitigation Techniques: an Update After 10 Years（頁面存檔備份，存於網際網路檔案館）
* Video - An OpenBSD talk by Michael Lucas（頁面存檔備份，存於網際網路檔案館）

**大型郵寄清單**

* 公告郵寄清單（頁面存檔備份，存於網際網路檔案館）
* 安全公告郵寄清單（頁面存檔備份，存於網際網路檔案館）
* 雜項郵寄清單（頁面存檔備份，存於網際網路檔案館）