Chapter 2. 背景知识

 

I issued an order and a search was made, and it was found that this city has a long history of revolt against kings and has been a place of rebellion and sedition.

 Ezra 4:19 (NIV)
Table of Contents
Unix、Linux与开放源码软件的历史
安全准则
安全程序的类型
多疑症是个优点
为什么要编写本文档?
设计和实现原则的来源
文档习语

Unix、Linux与开放源码软件的历史

Unix

1969-1970年,AT&T贝尔实验室的Kenneth Thompson、Dennis Ritchie和其他人开始在一台较老的PDP-7上开发一个小型的操作系统。不久这个操作系统被命名为Unix,是对此前一个叫做MULTICS的操作系统项目的双关语。在1972-1973年,系统被重新用C语言改写了,这是一个很有眼光的不寻常的举动:这个决定使Unix成为第一个可以脱离其原始硬件而存在的被广泛应用的操作系统。其它的新方法也不断被加入Unix,一部分原因是贝尔实验室与学术界的良好协作。1979年,Unix的“第七版”(V7)发布了,它是所有现存Unix系统的鼻祖。

从此,Unix的历史开始变得错综复杂。由Berkeley领导的学术界开发了被称为Berkeley软件发行版(BSD)的变种,而AT&T继续在“系统III”和随后的“系统V”的名义下开发Unix。在八十年代后期到九十年代早期,这两个主要分支间的“战争”激化了。经过多年开发,每个变种都采用了其它变种的许多关键特性。在商业上,系统V赢得了“标准之战”(使其绝大部分接口进入了正式标准),而且绝大多数硬件厂商都切换到AT&T的系统V。但是,系统V包含了许多BSD的革新,使该系统更像是两大分支的融合。BSD分支并未消失,而是广泛应用在研究、PC硬件和目的单一的服务器上(例如许多WEB站点都使用某个BSD变种)。

最终结果是有很多不同版本的Unix,都来源于原先的第七版。绝大多数版本的Unix都是私有的,由其相应的硬件厂商维护,例如,Sun的Solaris就是系统V的变种。Unix的BSD分支中有三个版本成为开放源码软件:FreeBSD(注重在PC类硬件上安装简便)、NetBSD(注重于很多不同的CPU结构)和NetBSD的一个变种,OpenBSD(注重于安全性)。更多有关的一般信息可以在 http://www.datametrics.com/tech/unix/uxhistry/brf-hist.htm 上找到。更多有关BSD历史的信息可以在[McKusick 1999]和 ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/share/misc/bsd-family-tree 上找到。

有兴趣阅读目前使用类Unix系统的辩护言论的读者可以看看 http://www.unix-vs-nt.org

自由软件基金会

1984年,Richard Stallman的自由软件基金会(FSF)启动了GNU计划,以创建一个UNIX操作系统的自由版本。Stallman所指自由的含义是软件可以被自由使用、阅读、修改和再次发行。FSF成功地创建了许多有用的软件,包括一个C编译器(gcc)、一个给人留下深刻印象的文本编辑器(emacs)和一大批基本的工具软件。但是在九十年代,FSF在开发操作系统内核上遇到了麻烦[FSF 1998];而没有内核,他们的其它软件就无法应用。

Linux

1991年,Linus Torvalds开始开发一个他称为“Linux”的操作系统内核[Torvalds 1999]。这个内核可以同FSF的资料和其它软件(特别是某些BSD软件和MIT的X-windows软件)结合起来构成一个可以自由修改而且非常有用的操作系统。本文把内核本身称为“Linux内核”,而把该完整的结合体称为“Linux”。注意,很多人使用术语“GNU/Linux”来称呼该结合体。

在Linux社团中,不同的组织以不同的方式结合可用软件。每一种结合被称为一个“发行版”,而开发发行版的组织就被称为“发行商”。普通的发行版包括Red Hat、Mandrake、SuSE、Caldera、Corel和Debian。各种发行版间存在差异,但所有的发行版都基于同一个基础:Linux内核与GNU的glibc库。由于这两者都是受“copyleft”类型许可证保护的,对它们的修改一般也必须提供给所有人,这是BSD和源于AT&T的Unix系统之间所不存在的统一力量,使不同Linux发行版统一在同一个基础之上。本文不针对任何特定的发行版;但在讨论时,假设使用的Linux内核版本是2.2以上,C库为glibc 2.1或更高版本,基本上这一假设对当前所有的主要Linux发行版都成立。

开放源码软件

对“自由软件”不断增长的兴趣使得定义和解释它越来越有必要。一个被广泛使用的术语“开放源码软件”在[OSI 1999]中有进一步的定义。Eric Raymond [1997, 1998]撰写过几篇考察其发展过程的重要文章。另一个被广泛使用的术语是“自由软件”,“自由”通常的解释是“言论自由,而非免费啤酒”。这两个术语都不是完美的。术语“自由软件”经常与可执行文件无偿提供但不允许浏览、修改或再次分发源码的程序相混淆。与之相反,术语“开放源码”有时被误用在那些源码可以浏览,但在使用、修改或再次分发上有限制的软件上。本文采用术语“开放源码”的通常意义,也就是软件的源码可以自由使用、浏览、修改或再次分发。有兴趣阅读开放源码软件的辩护言论的读者可以看看 http://www.opensource.org 以及 http://www.fsf.org

Linux与Unix的比较

本文使用“类Unix”一词来描述有意类似Unix的系统。特别是“类Unix”一词包含了所有主要的Unix变种和Linux发行版。

Linux不是起源于Unix的源码,但它的接口被有意设计为类似Unix的。因此,从Unix得来的教训在两者上都可以应用,包括安全方面的信息。本文中的大多数信息都可以应用在任何类Unix的系统中,但特意增加了一些Linux特定信息以使Linux用户能够利用Linux性能的优越性。

类Unix的系统共享许多安全机制,虽然其中存在细微的差异,而且不是所有系统都支持全部的机制。这里的全部机制包括每个进程的用户与群组标识(uid与gid)和具有读、写与执行许可(对于用户、群组和其他人)的文件系统。 参见Thompson [1974]和Bach [1986]以了解Unix系统的一般信息,包括它们的基本安全机制。第三章总结了Unix和Linux的关键安全机制。