OpenBSD

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

該計劃以其對開放原始碼的堅持、高質量的文檔、寬鬆的軟體許可證和專注於系統安全及代碼質量而聞名。該項目的開發人員遍布世界各地，並由德·若特在加拿大阿爾伯塔省卡爾加里的家中所協調。它的標誌和吉祥物是一隻河豚，名為普菲（Puffy）。

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

與大多數基於BSD的作業系統一樣，OpenBSD的內核和使用者空間程序，如shell和cat及ps之類的通用工具，都在同一個原始碼庫共同開發。第三方軟體可從Ports中編譯，若架構受支持，亦可直接從鏡像源安裝項目組編譯的二進位軟體包。

OpenBSD 項目在歷史上有過 20 多種可運行於不同硬體平台的移植版，現今其中的一部分平台，諸如 SGI, Sharp Zaurus，32 位的 Sun SPARC，HP PA-RISC, DECstation 以及 VAX 等由於設備逐漸停產及開發人員興趣減退之故已不再被維護。當前仍在被活躍維護的平台包括 DEC Alpha、英特爾i386、x86-64，riscv64, ARM，ARM64, SPARC64, Loongson 2F 等。

OpenBSD基金會曾被接納為2014年Google編程之夏的指導組織。

## 應用

<image>

<image>

<image>

<image>

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窗口系統，適合於桌面使用。許多流行的桌面工具包可供選擇，包括桌面環境如Lumina和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，堆疊式窗口管理器
- doas，sudo 指令的替代品，使使用者可以以其他身份執行命令
- LibreSSL，自由的傳輸層安全性協定實作，2014年心臟出血漏洞被發現後自 OpenSSL 分支而出，旨在改進其代碼質量從而提高安全性

OpenBSD 的一些組件已被其他 BSD 項目納入其基本系統中，並且上述所有軟體都可在其它類Unix系統中作為軟體包獲得。一些組件甚至被移植到了 Microsoft Windows 上。

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

- LLVM/Clang 13.0.0，帶補丁
- X.org，帶計劃自己的補丁的X窗口環境。用x*.tgz安裝文件集安裝
- GCC 4.2.1 或 3.3.6（取決於平台，帶補丁），GNU C 編譯器。作為 comp*.tgz 文件集的一部分安裝
- Perl，帶OpenBSD團隊的補丁和修改
- NSD，權威DNS伺服器
- Ncurses
- Binutils，帶補丁
- gdb，帶補丁
- Awk
- Expat 2.5.0

## 開發和發布流程

<image>

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

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

項目強烈建議所有人使用由項目維護的標準通用OpenBSD內核，同時定製的內核不受項目的支持，因為「企圖通過自定義或『優化』內核來解決問題，反而會產生更多的問題。「

對於主系統外的第三方軟體，OpenBSD 項目組維護了名為 Ports 的 CVS 倉庫，其中包括了用於在 OpenBSD 上編譯第三方軟體的 Makefile 指令和針對 OpenBSD 的補丁。Ports 倉庫的維護工作由維護者（又名porter）個人承擔。包的porter負責更新軟體的當前分支，同時也要修復錯誤及為受支持的版本提供維護補丁。因為項目缺乏人手，ports不能像主系統那樣得到不間斷的嚴格審計。

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

新版本發布的同時也會發布一首歌。

## 歷史和知名度

<image>

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

1995年10月，德·若特從NetBSD 1.0復刻了一個新項目，創立OpenBSD。初始版本OpenBSD 1.2於1996年7月發布，緊接著同年十月發布了OpenBSD 2.0。從那時起，該計劃一直遵循每半年發布新版本的進度，並且為每個版本提供一年的維護和支持。

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不能接受廠商的二進位驅動，「不能相信運行在我們內核中的廠商二進位文件」，並說「當出現問題時……根本沒辦法修復他們」。

## 許可

<image>

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

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

出於對寬鬆許可證的重視，OpenBSD 團隊會選擇是從頭開發許可證更寬鬆的軟體。例如，早年間 OpenBSD 團隊由於不滿 IPFilter 防火牆所用之許可證，而獨立開發了 PF。現在這個首次出現在OpenBSD 3.0 上的防火牆已被 DragonFly BSD、NetBSD 和 FreeBSD 使用。其他類似的案例包括 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下載。這些和他們的藝術品和其他獎金一道組成了該計劃為數不多的收入來源，以負擔硬體、帶寬及支付其他費用。

對於 OpenBSD 6.0 及以前的版本，預先包裝好的 CD-ROM 集只需支付一小筆費用就可在網上購得，附帶各種各樣的貼紙和版本主題曲的拷貝，但現在 OpenBSD 計劃已不再銷售 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月發布，現已發展到2024年4月5日發布的OpenBSD 7.5。

版本｜發布日期

1.2｜1996年7月1日

2.0｜1996年10月1日

2.1｜1997年6月1日

2.2｜1997年12月1日

2.3｜1998年5月19日

2.4｜1998年12月1日

2.5｜1999年5月19日

2.6｜1999年12月1日

2.7｜2000年6月15日

2.8｜2000年12月1日

2.9｜2001年6月1日

3.0｜2001年12月1日

3.1｜2002年5月19日

3.2｜2002年11月1日

3.3｜2003年5月1日

3.4｜2003年11月1日

3.5｜2004年5月1日

3.6｜2004年11月1日

3.7｜2005年5月19日

3.8｜2005年11月1日

3.9｜2006年5月1日

4.0｜2006年11月1日

4.1｜2007年5月1日

4.2｜2007年11月1日

4.3｜2008年5月1日

4.4｜2008年11月1日

4.5｜2009年5月1日

4.6｜2009年10月18日

4.7｜2010年5月19日

4.9｜2011年5月1日

5.0｜2011年11月1日

5.1｜2012年5月2日

5.2｜2012年11月1日

5.3｜2013年5月1日

5.4｜2013年11月1日

5.5｜2014年5月1日

5.6｜2014年11月1日

5.7｜2015年5月1日

5.8｜2015年10月18日

5.9｜2016年3月29日

6.0｜2016年9月1日

6.1｜2017年4月11日

6.2｜2017年10月9日

6.3｜2018年4月15日

6.4｜2018年10月18日

6.5｜2019年5月1日

6.6｜2019年10月17日

6.7｜2020年5月19日

6.8｜2020年10月18日

7.0｜2021年10月14日

7.1｜2022年4月21日

7.2｜2022年10月20日

7.3｜2023年4月10日

7.4｜2023年10月16日

7.5｜2024年4月5日

7.6｜2024年10月8日

## 文獻

- Absolute OpenBSD, 2nd Edition by Michael W. Lucas. ISBN 978-1-59327-476-4
- The OpenBSD Command-Line Companion, 1st ed. by Jacek Artymiak. ISBN 978-83-916651-8-3.
- Building Firewalls with OpenBSD and PF: Second Edition by Jacek Artymiak. ISBN 978-83-916651-1-4.
- Mastering FreeBSD and OpenBSD Security by Yanek Korff, Paco Hope and Bruce Potter. ISBN 978-0-596-00626-6.
- Absolute OpenBSD, Unix for the Practical Paranoid by Michael W. Lucas. ISBN 978-1-886411-99-9 (online copy here)
- Secure Architectures with OpenBSD by Brandon Palmer and Jose Nazario. ISBN 978-0-321-19366-7.
- The OpenBSD PF Packet Filter Book: PF for NetBSD, FreeBSD, DragonFly and OpenBSD published by Reed Media Services. ISBN 978-0-9790342-0-6.
- Building Linux and OpenBSD Firewalls by Wes Sonnenreich and Tom Yates. ISBN 978-0-471-35366-9.
- The OpenBSD 4.0 Crash Course by Jem Matzan. ISBN 978-0-596-51015-2.
- The Book of PF A No-Nonsense Guide to the OpenBSD Firewall, 2nd edition by Peter N.M. Hansteen ISBN 978-1-59327-274-6 .

## 基本資料

- 域：「自由，實用，安全」（"Free, Functional & Secure"）
- 開發者：OpenBSD計劃
- 作業系統家族：類Unix（BSD）
- 源碼模式：開放原始碼
- 發行日期：1996年10月1日
- 內核類別：宏內核
- 使用者空間：BSD
- 默認使用者界面：修改過的pdksh，FVWM 2.2.5 for X11
- 許可證：BSD，ISC，ATU，其他自定義許可證
- 運作狀態：運作中
- 支援平台：Alpha、x86-64、IA-32、MIPS、PowerPC、SPARC 32/64及其他
- 軟體包管理系統：OpenBSD 包裝工具和 Ports 第三方軟體集