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 第三方软件集