深度探索 OpenBSD

安全的重要意义

OpenBSD 很可能是世界上最安全的操作系统。在其之上的每一步开发过程都重点关注于构建一个安全、开放和免费的平台。UNIX® 和 Linux® 管理员请注意:您可能在日常工作中已经使用了从 OpenBSD 中移植的工具,只是您并不知道而已。或许,现在我们应该对整个操作系统进行更深入的研究。

Tim McIntire (tm@timmcintire.net), 咨询师, 自由撰稿人

Tim McIntire 的照片Tim McIntire 是 Cluster Corporation 的咨询师和创始人之一,该公司是 HPCC 软件、支持和咨询的市场领跑者。他还定期向 IBM developerWorks 和 Apple Developer Connection 投稿。Tim 领导 Oceanography 的 Digital Image Analysis Lab 的 Scripps Institution 进行了计算机科学方面的研究工作,在各种期刊上发表了相关研究成果,包括 Concurrency and ComputationIEEE Transactions on Geoscience and Remote Sensing。您可以访问 TimMcIntire.net 以了解更多关于 Tim 的信息。



2006 年 9 月 05 日

当安全性作为最重要的考虑因素时,有必要研究产生现在安全远程访问方面的标准 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、用于安全复制的 scpsftp,后者是 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 步. 获得该分发版

首先,请访问 OpenBSD.org 下载页面(请参见参考资料部分),选择列表中的任何镜像,然后转到 /3.9/i386/。如果您习惯于安装 Linux 分发版,那么从这里开始您将发现一些不同之处。唯一的 .iso 文件是一个 5MB 的、名为 cd39.iso 的文件。是这个文件吗?不用担心:在 OpenBSD 的安装过程中,这个启动 CD 只是基本核心,您可以下载相关文件并将其刻录到附加 CD(或从 OpenBSD.org 购买一套 CD 以帮助支持该项目)中,其余的内容将从这些文件中提取。请确保您下载了 cd39.iso 以及所有的 .tgz 文件、bsd、bsd.rd 和 bsd.mp。(或者,要简化这个过程,只需下载该目录中的所有内容。)

第 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)。

第二点,检查 /etc/ 目录中系统的缺省设置。在这里进行小心地处理,因为出于某种原因,在缺省情况下关闭了大多数服务。OpenBSD 使用 rc.conf 来启动大多数的启动守护进程。您将看到在缺省情况下关闭了一些服务,如 httpd 和 nfs,甚至关闭了 PF。作为示例,您可以通过在 /etc/rc.conf 中添加 httpd=YES 这行代码,以便打开 Apache (httpd)。

尽管 OpenBSD 没有提供基于图形的工具以帮助用户进行系统管理,但 OpenBSD 开发人员非常关注于为该操作系统中的每个组成部分提供大量精确的 man 页面。当您遇到疑问或需要了解某个新工具时,我建议您随时使用可靠的 man 命令。


我还能用它完成其他哪些任务呢?

OpenBSD 预先打包了一组第三方组件,其目的同样是关注于安全性和稳定性,而不是用来完成各种各样的日常工作。下面是 OpenBSD Version 3.9 中包含的包的缺省列表:

  • OpenSSH Version 4.3
  • X.org Version 6.9.0(i386 分发版中包含了 V3.3 XFree86 服务器)
  • 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 应用程序接受包的名称作为输入,自动地确定依赖关系,并安装所需的全部包。

尽管上面列出的这些包是专门为 OpenBSD 进行移植的,但该平台的另一条原则是二进制兼容性。OpenBSD 支持通过二进制模拟的方式来运行大多数为 Linux、Solaris、HP-UX 和其他格式的 BSD 编译的软件。这个功能在缺省情况下是关闭的。要打开该功能,只需在 /etc/sysctl.conf 的下面一行中删除前面的注释 (#) 字符,然后重新启动您的系统:

#kern.emul.linux=1      # enable running Linux binaries

通过这种方法,您可以运行简单的、静态链接的 Linux 应用程序。要运行更多类型的软件,还需要按照前面所描述的,使用 pkg_add 安装 Redhat/base 包。


总结

OpenBSD 已经成为世界上最安全的 UNIX 派生系统,并且几乎实现了所有相关的内容。其中的一些设计原则,如代码审核、加密处理的广泛使用以及仔细的配置选择,它们组合在一起可以确保实现 OpenBSD 的缺省安全 的思想。尽管 OpenBSD 安装一般用于安全服务器和防火墙,但 OpenBSD 广泛的硬件和软件支持使得该操作系统适用于各种各样的目的。UNIX 和 Linux 专家都会发现对 OpenBSD 中的许多部分非常熟悉,并且他们很可能会重视其中一些有意偏离的领域。

参考资料

学习

获得产品和技术

  • OpenBSD 镜像:现在就下载 OpenBSD。
  • 在线订购 OpenBSD :购买 OpenBSD CD 和其他商品,或者直接为这项事业作出贡献。
  • IBM 试用软件:使用 IBM 软件开发您的下一个项目,可直接从 developerWorks 下载这些试用软件。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=157542
ArticleTitle=深度探索 OpenBSD
publish-date=09052006