Linux网络管理员手册(1)
翻译:赵炯
第一章 网络绪论
1.1 历史
连网的主意大概与电讯事业本身一样的久远。考虑人们生活的石器时代,那时鼓可能已经用于在人们之间传递消息了。假释穴居人A想邀请穴居人B进行一场互扔石块的游戏,但是他们互相之间居住得太遥远,以至B听不见A的击鼓声。那么,A能够做些什么呢?他可以1)走到B的地方去,2)使用一个更大的鼓,或者3)询问C,C居住在他们中间的地方,来传递消息。这最后一个办法就叫做连网。
当然,我们已经比我们祖先的原始嗜好和设备有了长足的进步。现在,通过大量的线缆的集合,如光纤、微波、等等,我们用计算机进行相互间的对话来作星期六足球比赛的约会。[1] 下面,我们将涉及实现上述的手段和方法,但不考虑线缆,也不考虑足球的部分。
在本手册中,我们将讨论两种网络类型:基于UUCP的,和基于TCP/IP的。这是一些协议集和软件包,它们提供了在两台计算机之间传输数据的方法。在这一章中,我们将考虑这两种网络类型,并且讨论它们的基本原理。
我们定义网络是一个互相之间能够通信主机(hosts)的集合,这常常依赖于一些专用(指定)主机的服务,即是在参与者之间中继数据。主机通常就是计算机,但也不一定;也可以将X-终端或者智能打印机当作主机。少量的主机聚合也称为站点(sites)。
没有语言或者代码,进行通信是不可能的。在计算机网络中,这些语言共同地被称为协议(protocols)。然而,这里你不用关心协议是如何制定出来的,而是要,例如,考虑州长开会时注意到的高度形式化的行为代码。同样,用于计算机网络中的协议仅仅是两台或多台主机之间交换消息所用的非常严格的一些规则。
1.2 UUCP网络
UUCP是Unix-to-Unix Copy的缩写。刚开始它是作为一个程序包,用于在串行线路上传输文件、确定这些传输的时间、并且在远程站点上启动程序的执行。自从七十年代末它第一次实现以来,已经历了很大的变化,但其提供的服务仍然很简单。他的主要应用仍然是在基于拨号连接的广域网中。
UUCP是贝尔实验室在1977年首先开发出来的,用于在他们的Unix开发站点之间的通信。在1978年中期,这个网络已经连接了80多个站点。它应用于运行电子邮件以及远程打印。然而,这个系统主要用于分发新软件以及调试程序。[2] 现今,UUCP不再被限制于这个环境内了。在许多种类的平台上已有免费的和商业的移植版本了,包括AmigaOS、DOS、Atari的TOS等等。
UUCP网络的主要缺点之一是它的低带宽。一方面,电话设备对最高传输速率有严密的限制。另一方面,UUCP链接很少有固定的连接;而是在有规则的时间间隔上主机拨号来相互连接。因此,大多数时间,是用于在UUCP网络上传输存储于某些主机磁盘上的邮件消息、等待下次连接的建立。
尽管有这些限制,世界各地仍有许多UUCP网络在运转着,主要是由计算机业余爱好者在运行着,它以合适的价格为私人用户提供网络访问。UUCP流行的主要原因是:与将你的计算机连接到大Internet电缆上相比,它是极其便宜的。为了使你的计算机成为一个UUCP节点,你只须有个modem、一个运行着的UUCP程序,以及愿意供你邮件和新闻的其他的UUCP节点。
1.2.1 如何使用UUCP
UUCP后面的概念是非常简单的:就如同它的名字指出的一样,它基本上是将文件从一台主机上拷贝到另一台上去,但它也允许在远程主机上进行一定的操作。
假设你的机器允许访问名为swim的假想的主机,并且让它为你执行lpr打印命令。那么你可以命令行上键入下面一行在swim上打印出本书来:[3]
$ uux -r swim!lpr !netguide.dvi
这使得uux为swim调度了一个作业(job)。uux是UUCP组中的一个命令。这个作业由输入文件netguide.dvi、以及馈送该文件到lpr的请求组成。-r标志告诉uux不用立刻访问远程系统,而是将作业存储起来直到稍后时有个连接被建立起来。这叫作假脱机(打印)(spooling)。
UUCP的另一个特性是它允许通过几台主机转发作业和文件,假如它们合作的话。假定上面例子中的swim与groucho有一个UUCP链接,groucho中保存着大量的应用程序文档。为了下载文件tripwire-1.0.tar.gz到你的站点上,你可以发出
$ uucp -mr swim!groucho!~/security/tripwire-1.0.tar.gz
trip.tgz
所创建的作业将请求swim从groucho取得该文件,并将文件送到你的站点,这里UUCP将把文件存为trip.tgz并且通过文件到达的邮件来通知你。这将分三步完成。首先,你的站点将作业送至swim。当下次swim与groucho建立了连接,就会下载该文件。最后一步是从swim到你站点的实际的传输。
目前,UUCP网络所提供的最重要的服务就是电子邮件和新闻。稍后我们将会讨论这些,所以这里我们仅给出一个概要的介绍。
电子邮件 – 简称email – 允许你与远程主机上的用户交换消息而无需实际地知道如何访问这些主机。控制一个消息从你的站点到达目的站点的任务是完全由邮件处理系统完成的。在一个UUCP环境中,邮件一般是通过在比邻的主机上执行rmail命令传送的,并把接收者的地址和邮件消息传给rmail。然后rmail将会转发消息到另一台主机上等等,直到消息到达目的主机为止。我们将在第13章中详细地讨论。
News可以最恰当地描述成一类分布式的电子公告板系统。绝大多数情况下,这个术语指的是Usenet News,它是直到目前为止最著名的估计有着120,000-参与站点的新闻交换网络。Usenet的起源可追溯至1979年,那时,在新的Unix-V7版本发布以后,三个研究生有了一个在Unix团体中通用信息交换的点子。他们整理了一些脚本,这成了第一个网络新闻系统。在1980年里,这个网络连接了北卡罗林纳州的两所大学里的duke、unc和phs网络。从这衍生出来,Usenet最终成长起来了。尽管它起初是一个基于UUCP的网络,现已不再限于单种类型的网络了。
信息的基本单元是文章,它可能被投寄到专用于某个特殊主题的新闻组的层次结构中。大多数站点仅仅接收全部新闻组的一个选集,而全部新闻组每天平均传送相当于60MB的文章。
在UUCP的世界中,news通常是按照从请求的组中收集所有的文章,并且打包成几批(batches),再通过一个UUCP链接来发送的。这几批文章被发送到接收站点,并在那里被送给了rnews命令来打开这几批数据包以及更进一步的处理。
最后,对于许多拨号上网的供公共访问的文档站点来说,UUCP也同样是一种供选择的方法。你通常可以这样来使用它们:使用UUCP拨号上网、作为来客(guest)用户登录、并从公共访问文档区域下载文件。这些来客帐号的登录名/口令通常是uucp/nuucp或者是其他一些类似的。
1.3 TCP/IP网络
尽管UUCP可能是一种廉价的拨号上网链接的选择,但还存在着许多情况,在这些情况下,这种存储-与-转发的技术被证明是不灵活的,例如在局域网(LANs)的情况下。这通常是由位于同一幢建筑物、甚至是位于同一层的少数机器组成,它们互相连接以提供一个相似的工作环境。典型地来讲,你将在这些主机上共享文件,或者在不同的机器上运行分布式应用程序。
这些任务需要一种完全不同的连网途径。所有的数据被分解成更小的块(packets 包、分组),这些块被立刻转发到目的主机上,并再重新组合起来。而不是随同一个作业脚本转发整个文件。这类网络被称为包[分组]交换(packet-switched)网络。从其它方面来讲,这允许在网络上运行交互式的应用程序。当然,所付出的代价是大大地增加了软件的复杂性。
这种系统---不一定就是主机---所采用的解决方案就是著名的TCP/IP。在本节中,我们将看一下它的基本概念。
1.3.1 TCP/IP网络引言
TCP/IP的起源可以上溯到1975年美国DARPA(Defense Advanced Research Projects Agency 国防部远景规划局)支助的研究计划。那是个试验性的网络,ARPANET,在经证实成功以后,于1975年转入正常运行。
1983年,新的TCP/IP协议组被作为标准采用,并且网络中的所有主机必须使用它。当ARPANET最终成长为Internet时(ARPANET本身于1990年停止使用),TCP/IP的使用已经传播到Internet以外的网络上去了。最值得注意的是局域网络,但随着象ISDN等快速数字电话设备的出现,将来肯定也会应用于拨号上网的传输。
在贯穿以下几节的TCP/IP讨论当中,作为一个看待的具体实例,我们将考虑坐落在Fredland某地的Groucho Marx大学(GMU),绝大多数系部运行他们自己的局域网,有些系部共享一个局域网,有些有好几个局域网络。他们都是互连的,并且通过一个高速链接与Internet相连。
假设你的机器在数学系连接到局域网上,并且假设你的机器名为erdos。为了访问物理系的一个名为guark的主机,你键入以下命令:
$ rlogin quark.physics
Welcome to the Physics Department at GMU
(ttyq2) login:
在提示符下,输入你的登录名,假如说是andres,以及你的口令。这时你就进入了quark的shell,在那里你就可以象是在系统的控制台上一样键入各种命令。在你退出shell以后,就会退回到自己机器的提示符下。你刚才即使用了TCP/IP提供的即时的、交互式的应用程序:远程登录。
在你登录进quark时,你也会想要运行一个基于X11的应用程序,就象函数绘图程序,或一个PostScript预览器。为了让这个程序知道你想要把窗口显示在你的主机屏幕上,你就必须设置DISPLAY环境变量:
$ export DISPLAY=erdos.maths:0.0
如果你现在运行你的应用程序,它将联系你的X服务器而不是quark的,并在你的屏幕上显示它的所有窗口。当然,这需要X11运行在erdos上。这里的要点是TCP/IP允许quark和erdos来回传送X11分组,并给了你这样一种幻觉,好象你只在单个系统上。在这里,网络几乎是透明的。
TCP/IP网络的另一个重要的应用程序是NFS,它代表网络文件系统(Network File System)。这是另一种透明使用网络的形式,因为它基本上允许你从其他主机上直接加载目录分层结构,所以它们就好象本地的文件系统一样。例如,所有用户的登录主目录可能在一台中心服务器机器上,局域网上所有其它主机都可以从它上面加载这个目录。这样做的效果是用户可以登录到任何机器上,并且会发现自己在同一个主目录中。类似地,仅在一台机器上安装需要大量磁盘空间的应用程序(比如象TeX),并且将这些目录导出到其它机器上。我们将在第十一章中再次讨论NFS。
当然,这些仅是在TCP/IP网络上你能做些什么的例子。这种可能性几乎是无限的。
我们现在进一步讨论TCP/IP工作的原理。你需要知道这些以理解如何和为什么要配置你的机器。我们将首先从分析硬件着手,然后慢慢地深入。
1.3.2 以太网
在局域网中广泛使用的硬件类型就是众所周知的以太网(Ethernet)。它由主机通过连接器与之连接的单根电缆、三通头或收发器组成。简易以太网安装起来一点不贵,而且其网络传输速率达到每秒10M,这也基本上说明了它为什么如此普及。
以太网可分成三类,分别称为粗缆(thick)、细缆(thin)和双绞线(twisted pair)。细缆和粗缆以太网都使用同轴电缆,只是粗细不同以及与主机连接的方式不同。细缆以太网使用一个T形的“BNC”连接头,两端连电缆,一头旋到计算机背面的一个插头上。粗缆以太网需要在电缆上钻一个小孔,并且使用一个“吸血鬼式的三通头”连接收发器。这样,一个或多个主机就能连接到收发器上。以太网的细缆和粗缆使用的长度最长分别可达200米和500米,因此它们也分别称为10base-2和10base-5。双绞线使用一根由两根铜线做成的线缆,也就是在普通电话装置中用的那种,但通常还需要另外一些硬件。它也以10base-T知名。
尽管将一台主机加入粗缆以太网有些烦琐,但不会断开网络。要往细缆以太网装置中增加一台主机的话,就不得不中断网络服务几分钟,因为需要切断电缆以接入一个连接头。
许多人偏爱细缆以太网,因为它非常便宜:PC网卡售价只有50美元左右,并且电缆每米也只有几美分。然而,对于大规模的安装,粗缆以太网则更适合。例如,GMU数学系的以太网使用的是粗缆,所以每当往网上增加一台主机时就不需要中断网络。
以太网技术的缺点之一是它有限的电缆长度,这妨碍了它在除局域网以外地方的使用。然而,几个以太网段可以使用中继器、桥接器或路由器来相互连接在一起。中继器只是简单地在两个或多个网段之间拷贝信号,所以,所有用其连接在一起的网段将表现出好象是一个以太网。由于时限的要求,在网络上的任何两台主机之间都不能多于四个网段。桥接器和路由器是很复杂的。它们分析输入的数据,并且仅在接收主机不在本地以太网上时才转发数据。
以太网的运作如同一个总线系统,在该总线上,一个主机可以发送最大长度可达1500字节的分组(或帧 frames)到同一以太网上的另一台主机中。主机是通过一个六字节地址寻址的,这个地址是固化在以太网板上的固件中的。这些地址通常是使用以冒号分开的两位十六进制数的序列形式写出的,就如同格式aa:bb:cc:dd:ee:ff。
某个站点发送的帧,别的所有站点都能看到,但只有目的主机会拾取并处理该帧。如果两个站点试图同时发送,就会发生碰撞[冲突](collision)。这个问题解决的办法是两个站点都放弃发送,并在片刻以后再次尝试发送。
1.3.3 其它硬件类
在大规模的装备中,例如象Groucho Marx大学,以太网通常并不是唯一使用的设备。在Groucho Marx大学,每个系部的局域网都连接到校园主干网上,那是运行着FDDI(光纤分布式数据接口 Fiber Distributed Data Interface)的纤维光缆(fiber optics cable)。FDDI使用一种完全不同的方法来传输数据,它基本上包括向四周发送令牌,仅允许获得令牌的站点发送帧。FDDI的主要优点是有高达100Mbps传输速率、光缆最大长度可达200km。
对于长距离网络连接来讲,常常使用不同种类的设备,这些设备是基于名为X.25的标准的。许多所谓的公用数据网(Public Data Networks),如美国的Tymnet、德国的Datex-P就提供这种服务。X.25需要一种特殊的硬件,即分组组合/分拆(Packet Assembler/Disassembler)或PAD。X.25定义了一套自己的网络协议,然而它常常用于连接运行TCP/IP和其它协议的网络。由于IP分组不能简单地映射到X.25上(反之也然),所以IP分组只是简单地包装入X.25分组中在网上传输。
业余无线电爱好者常常使用他们自己的一套装置把计算机连成网;称为分组无线网(packet radio)或业余无线电报务员无线网(ham radio)。分组无线网所使用的协议称为AX.25,是从X.25派生出来的。
其它技术包括使用慢速但廉价的拨号访问串行线路。这些需要另外一些用于传输分组的协议,例如SLIP或PPP,这些将在下面讨论。
1.3.4 Internet协议
当然,你不会希望你的网络连接仅限于一个以太网络之中。理想地来说,你希望能够使用一个网络而不管它是运行在什么硬件上的,也不管它是由多少个子单元组成的。例如,象Groucho Marx大学那样的大规模网络装置,你通常有几个用某些方法连接起来的独立的以太网络。在GMU,数学系有两个以太网:一个是教授和研究生的快速机器的网络,另一个是学生用的慢速机器的网络。这两个网络都连到了FDDI校园主干网上。
这种连接是由称为网关(gateway)的专用主机来处理的,它通过在两个以太网络以及光缆之间拷贝进入和传出的分组来处理的。例如,如果你在数学系并且想从你的机子上访问物理系局域网上的quark,那么网络连接软件不能够直接将分组发送到quark,因为不在同一个以太网内。因此,必须依靠网关作为一个转发者。然后,网关(给它取名为sophus)利用主干网将这些分组转发到物理系的niels网关上,由niels将分组传递到目的机器中。Erdos与quark之间的数据流见图1.1(对Guy L. Steele致歉)。
图1.1 从erdos到quark发送一个数据报的三个步骤。
这种引导数据至远程主机的方案称为路由选择或选路(routing),并且在此时常将分组称作数据报(datagrams)。为使事情简单,数据报交换是由单独一个与所用硬件无关的协议来管理的:IP,或互连网协议(Internet Protocol)。在第二章中,我们将极详细地描述IP以及路由选择的方法。
IP的主要好处在于它将物理上不同的网络转换成一个明显同类的网络。这叫做网络互连(internetworking),其所形成的“后网络”称为一个互连网络(internet)。在这里请注意an internet和the Internet的细微差别。后者是特指全球互连网的官方名称。
当然,IP也需要一个硬件独立的寻址方案。这是通过对每个主机分配一个32位的数值来完成的,这个32位数值称为IP-地址(IP-address)。一个IP地址通常用四个十进制数来表示,每一个十进制数表示一个8位部分,用点分开。例如,guark主机可能有一个IP地址是0x954C0C04,它可以写成149.76.12.4。这种格式也称为点分四组(dotted quad)表示法。
你将注意到我们现在有三种不同的地址类型:首先有象quark这样的主机名、然后我们有IP地址、最后还有硬件地址,如6字节的以太网地址。这些类型的地址要以某种方式加以匹配,这样,当你键入rlogin quark时,网络软件能够给出quark的IP地址;并且当IP发送任何数据到物理系的以太网上时,它会以某种方式找出与指定IP地址相映的以太网地址。这有些令人混淆。
这里我们不再深入讨论下去,而将在第二章中讨论之。现在已足够记住寻址的这些步骤的含义,对于将主机名映像到IP地址的操作成为主机名解析(hostname resolution),对于将IP地址映像到硬件地址的操作称为地址解析(address resolution)。
1.3.5 串行线上的IP
在串行线路上,常常使用一个以SLIP或串行线路IP而知名的“事实上的”标准。一个对SLIP的修改被称为是CSLIP,或压缩的SLIP,用以进行IP头的压缩以充分利用串行线路提供的低带宽达到更好的性能。[4] 另一个不同的串行线路协议是PPP,或点对点协议(Point-to-Point Protocol)。PPP比SLIP有更多的特色,包括一个链接协商步骤。然而,它比SLIP出色的主要优点在于它不限于仅仅传输IP数据报,而是设计成能够传输任何类型的数据报的。
1.3.6 传输控制协议(Transmission Control Protocol)
当然,将数据报从一个主机传送到另一个主机并没有完,如果你登录进quark,你就想在你的erdos上rlogin进程和quark上的shell进程之间有一个可靠的连接。这样,发送者就必须将发送和回应信息分解成分组,并且接收者将接收到的分组再重新组合成字符流。这看上去很琐细,但其中包括许多细微的任务。
关于IP要知道的一件重要的事情是,实际上,它不是可靠的。假设在你的以太网上有十个人开始从GMU的FTP服务器上下载Xfree86的最新版本。由此而产生的通信量对于网关处理能力来说可能太多,因为它太慢,并且内存也不多。如果你现在恰巧给quark发送了一个分组,网关sophus此时正好用完了缓冲空间因此没法转发此分组。IP解决此问题的方法只是简单地丢弃了这个分组。这个分组就完全失去了。因此,检查数据的完整性,并且在遇到出错时重传数据是进行通信的主机的责任。
这是由另一个协议来完成的,即TCP,或传输控制协议(Transmission Control Protocol),该协议在IP之上建立了一个可靠的服务。TCP的基本特性是,它利用IP给你一个在你的主机进程和远端主机进程之间一个简单连接的幻觉,这样你就不用关心你的数据是如何以及通过哪个路由器传输的。一个TCP的连接操作基本上象个双向的管道,两个进程都可以对其进行读写操作。可以把它想象成一次电话对话。
TCP是通过两台相关主机的IP地址以及称为端口(port)的数值来识别一个连接的末(尾)端的。端口可以看作是网络连接的附加点。如果我们对电话的例子夸张一点讲,可以把IP地址比作地区码(对应城市的代码),把端口数值比作本地码(对应于某人的电话号码)。
在rlogin的例子中,客户应用程序(rlogin)在erdos上打开了一个端口,并且连接到quark上的端口513上,该端口是rlogind服务器一直在监听的。这样就建立了一个TCP连接。使用这个连接,rlogind执行授权程序,并且然后产生shell进程。该shell的标准输入和输出被重定向至TCP连接上,所以在你的机器上你对rlogin所键入的任何字符将通过TCP流被当作标准输入给予shell。
1.3.7 用户数据报协议(User Datagram Protocol)
当然,TCP并不是TCP/IP连网中唯一的用户协议。尽管它适合象rlogin这样的应用程序,其所用的总开销阻止了它用于象NFS这样的应用程序中。取而代之的是,NFS使用一个TCP的同属协议称为UDP,或用户数据报协议(User Datagram Protocol)。正如TCP一样,UDP也同样允许一个应用程序连接到远程机器上一个端口的服务上,但它不会为此建立一个连接。而是,你可以使用它来发送单个分组到目的服务上—正如它的名字表示的一样。
假设你将系中心的NFS服务器,galois,上的TeX目录结构加载到了你的机器上,并且你想查看描述如何使用LaTeX的文档。你启动了编辑器,该编辑器首先读入整个文件。然而,需要很长的时间与galois建立一个TCP连接、传送文件、并且再释放该连接。取而代之的是,向galois发送一个请求,galois以几个UDP分组的形式发送出该文件,这是非常快的。然而,UDP是不处理分组的丢失与坏分组的。这要依靠应用程序—在这里是指NFS—来处理的。
1.3.8 关于端口
端口可以看作是网络连接的附属件。如果一个应用程序想要提供一个服务,它就将自身附加到一个端口上并且等待客户的到来(这也称为在端口上侦听listening)。想要使用该服务的客户在自己的本地主机上分配一个端口,并且将其连接到远程主机的该服务的端口上。
端口的一个重要特性是,一旦在客户和服务器之间建立了一个连接,服务器的另一个拷贝就会附加到服务器端口上并且侦听其它的客户。这准许,例如,在同一台主机上的几个并发远程登录操作,都使用端口513。TCP能够在这些连接之中加以区别,因为它们都来自于不同的端口或主机。例如,你从erdos两次登录到quark上,那么第一个rlogin客户就会用本地端口1023,第二个会用端口1022。然而,两者将连至quark上的同一个端口513上。
这个例子示出了作为汇聚点的端口的使用,在那里,客户联络一个指定的端口以获得一给定的服务。为了让客户知道正确的端口号,双方系统管理员必须在这些端口号分配上达成一个协定。对于广泛使用的服务,例如rlogin,这些数值必须集中管理。这是由IETF(或互连网工程任务团体Internet Engineering Task Force)来管理的,它定期地发表一个标题为分配的数值(Assigned Numbers)的RFC。在其中,它描述了分配给众所周知的服务的端口号,以及其它一些事情。Linux使用一个文件来映像服务到号码,这个文件是/etc/services。它将在The services and protocols Files一节中加以叙述。
尽管TCP和UDP的连接都依赖于端口,这些数值并不会冲突。这表示,例如,TCP的端口513与UDP的端口513是不同的。实际上,这些端口是作为两个不同服务的访问点的,如rlogin(TCP)和rwho(UDP )。
1.3.9 套接字(Socket)库
在UNIX操作系统中,执行所有上述任务和协议的软件通常是内核的一部分,或是在内核里的。世界上最通用的编程接口是伯克利套接字库(Berkeley Socket Library)。[译者注:socket原意是插座、窝、孔] 这个名称得自于通俗的比喻,即将端口比作插座,并且将连接到一个端口比作插入插座。它提供(bind(2))调用来指定一个远程主机、一个传输协议、以及一个程序能够连接或侦听的服务(使用connect(2)、listen(2)、以及accept(2))。无论如何,这个套接字库还是比较通用的,因为它不仅提供了基于TCP/IP类的套接字(AF_INET套接字),而且也提供了处理本地机器内部连接的类(AF_UNIX套接字)。有些套接字库的实现同样还能处理其它的类,象XNS(Xerox Networking System)协议,或X.25。
在Linux系统中,套接字库是属于标准libc C-library中的。目前,它仅支持AF_INET和AF_UNIX套接字,但已在努力将Novell的网络协议并入,所以最终向这样的一类或几类套接字将被加进来。
1.4 Linux连网
作为全世界编程者协作努力的结果,如果没有全球网络系统要编制出Linux是不可能的。所以在开发的早期,就有几个人开始做提供网络能力的工作,这一点也不用奇怪的。几乎从一开始,一个UUCP的实现就运行于Linux上,并且在1992年的秋季开始着手基于TCP/IP的网络工作,那时,Ross Biro以及其他人创建了如今以Net-1而知名的网络实现。
1993年五月,在Ross停止了开发活动以后,Fred van Kempen开始了一个新的实现的工作,改写了代码的主要部分。这个不断进行的努力以Net-2而知名。第一个公开发行的版本,Net-2d,是于1992年夏季编制的(作为0.99.10内核的一部分),并且从那以后经有几个人的维护和扩充,值得一提的是Alan Cox,形成了Net-2Degugged。在对代码大量的调试和许多改进之后,在Linux1.0发行之后,他将其更名为Net-3。这是目前包括在官方内核发行版中的网络代码版本。
Net-3给出了大量的以太网卡的设备驱动程序、SLIP(用于在串行线路上传输网络信息)设备驱动程序、以及PLIP(用于并行线路)设备驱动程序。使用Net-3,Linux在局域网环境中有一个运行得很好的TCP/IP实现,显示出在正常运行时其性能可与一些商业PC UNIX媲美。开发的重点目前已面向在Internet主机上运行的稳定性和可靠性上。
除了这些功能外,还有一些正在进行的计划项目将增强Linux的多功能性。一个PPP(点对点协议,另一个在串行线路上进行网络传输的方法)驱动程序,目前正处于Beta测试阶段,一个ham无线电的AX.25驱动程序正处于Alpha测试阶段。Alan Cox同样还完成了Novell的IPX协议的驱动程序,但是对与Novell兼容的完整的网络套件的研究工作此刻没有开展下去,因为Novell公司不愿意提供所需的文档资料。另一个非常有希望的许诺是samba,一个免费的UNIX NetBIOS服务器,由Andrew Tridgell编制的。[5]
1.4.1 不同的发展方向
目前,Fred正继续着开发工作,正在进行Net-2e的工作,这是个具有非常精简的网络层设计特色的。在写本书的同时,Net-2e仍是个Beta的软件。最值得注意的是Net-2e并入了DDI,设备驱动程序接口(Device Driver Interface)。DDI为所有的网络设备和协议提供了统一的访问和配置方法。
还有一个TCP/IP的实现来自于Matthias Urlichs,他为Linux和FreeBSD编制了一个ISDN驱动程序。在这里,他集成了一些BSD网络代码到Linux内核中。
然而,可以预测,Net-3将会在此停滞不前了。Alan目前正在进行用于业余无线电爱好者的AX.25协议的实现的工作。毫无疑问,仍需要进行开发的内核的“模块化”将对网络代码带来新的冲击。模块化允许你在运行时刻往内核中增加驱动程序。
尽管这些不同的网络实现都努力提供同样的服务,但在内核和设备层它们之间有很大的不同。因此,你不能够使用Net-2d或Net-3的工具来配置一个运行Net-2e内核的系统,反之也不行。这仅能应用于与内核紧密相关的命令;应用程序以及通用的网络命令,如rlogin或telnet,可以在它们任何一个上面运行。
不过,你并不用担心这些不同的网络版本。除非你参加实际的开发活动,你不用担心运行那一个版本的TCP/IP代码。官方的内核发行版总是带有一套与内核中的网络代码兼容的网络工具。
1.4.2 从何处获得代码
Linux网络代码的最新版本可以通过各个站点的匿名FTP获得。Net-3的官方站点是sunacm.swan.ack.uk,其镜象在sunsite.unc.edu的system/Network/sunacm下。最新的Net-2e的补丁工具和执行代码在ftp.aris.com有。Matthias Urlichs的源自BSD的网络代码能够从ftp.ira.uka.de的/pub/system/linux/netbsd下取得。
最新的内核能够在nic.funet.fi的/pub/OS/Linux/PEOPLE/Linux;sunsite和tsx-11.mit.edu有这个目录的镜象。
1.5 维护你的系统
贯穿本书,我们将主要涉及安装与配置问题。然而,管理要做的比这多—在设置好一个服务以后,你也还需要使它运行。对于大多数这些问题来说,你仅需要很少的维护工作,而对于有一些问题,象mail和news,就需要执行例程任务以使你的系统保持最新。我们将在后面章节里讨论这些任务。
最少的维护是定期地检查系统以及每个应用程序的日志文件是否有出错情况和不正常的事件发生。通常,你需要写上几行管理用的shell脚本并且从cron中周期地运行它们。有些主要应用程序的源程序发行,如smail或C News,含有这样的脚本,你只需修改它们以适应你的需求以及偏好。
你的任何cron作业的输出应该邮递到一个管理员帐号中。缺省地,许多应用程序将送出出错报告、应用统计值、或者日志文件的概要到root帐号。这只有在你经常以root登录时才有意义;一个更好的办法是将root的邮件转发到你个人的帐号中,见第14章中设置邮件别名的描述方法。
然而,不管你已经如何仔细地配置了你的站点,墨菲法则确认有些问题最终将会暴露出来。因此,维护一个系统也意味着会有抱怨存在。通常,人们会期待系统管理员起码能够通过root的email来接触,但是,同样还有其它一些地址,这些地址常用来联系到负责维护某一方面的人。例如,有关错误的邮件配置的抱怨信息常常邮递到postmaster;news系统的问题可以报告到newsmaster或Usenet。到hostmaster的邮件应该重定向到负责主机基本网络服务以及DNS名字服务(如果运行了名字服务器)的人那里去。
1.5.1 系统安全
网络环境中系统管理的另一个非常重要的方面是保护你的系统与用户免受入侵者的干扰。粗心管理的系统给怀有恶意的人许多攻击目标:攻击的范围从猜测口令到以太网探听,导致的损害可能从伪造的邮件消息到数据的丢失或用户权限的侵犯。当讨论相关方面时我们将论及一些特殊的问题,以及针对它们的一些常用的防范措施。
本节将讨论有关系统安全的一些例子和基本技术。当然,所覆盖的主题不能详尽地涉及到你可能要面对的所有安全问题;它们仅仅举例说明可能碰到的问题。因此,阅读一本有关安全的好书是绝对必要的,尤其是在一个连网的系统中。Simon Garfinkel的“实用UNIX 安全”(见[Spaf93])是极为值得推荐的。
系统安全开始于好的系统管理。这包括检查所有重要文件和目录的所有权和权限,监视特权帐号的使用等等。例如,COPS程序将检查你的文件系统以及常用的配置文件的不寻常的权限和异常情况。它也能够聪明地使用一组口令来迫使用户的口令遵循一定规则以使得它们难以猜出。例如,影子口令集需要口令至少有五个字符,并且含有大小写字符和数字。
当使一个服务在网络上可以访问时,确信给它“最低权限”,这意味着你不允许它做在设计时对于它的工作不需要的事情。例如,仅仅在它们真的需要的情况下,你才应该使程序setuid到root或一些其他特权帐号。同样,如果你想对仅仅非常有限的应用程序使用一个服务时,不要犹豫,就你的特定应用程序所允许的条件下尽量严格地配置它。例如,如果你想要允许无盘主机从你的机器上进行引导,你必须提供TFTP(直接文件传输服务(trivial file transfer service)),这样它们就可以从/boot目录中下载基本配置文件。然而,如果不加限制地使用,TFTP就允许世界上的任何用户从你的系统中下载任何可读的文件。如果这并不是你想做的,为什么不限制TFTP服务只能访问/boot目录呢?[6]
同样的想法,你可能也想要来自某些主机的用户限制某些服务,比如说来自你的本地网络的用户。在第9章,我们将介绍tcpd,它会针对各种网络应用程序来做这个事情。
另一个重要点是避免运行“危险的”软件。当然,你所用的任何软件都可能很危险,因为软件都可能有错误,聪明的人可能会利用它来取得对你的系统的访问。这种事情发生过,而且对于此并没有完全的保护措施。这个问题同样影响自由软件以及商业软件产品。[7] 然而,需要特殊权限的程序天生就比其它程序更危险,因为任何漏洞都可能带来强烈的后果。[8] 如果你为了网络的目的而安装setuid程序,要有双倍的小心,不要遗漏文档上所说的任何事情,以便于你不会意外地建立了一个安全上的裂口。
不管你是如何地小心,决不能排除你的防范可能会失效。因此,必须尽早地察觉入侵者。检查系统日志文件是一个良好的开端,但是,入侵者也会是同样的聪明,会删除他或她留下的任何明显的痕迹。然而,有一种象tripwire一样的工具[9] ,它允许你检查重要的系统文件,以发现它们的内容或权限是否改动过。Tripwire在这些文件中计算各种强壮的检查和并且存储在一个数据库中。在以后的运行期间,会重新计算检查和并与存储的检查和比较以检测出任何改动的情况。
1.6 以下各章展望
以下几章将涉及TCP/IP网络的配置,以及一些主要程序的运行。在开始编辑文件等工作之前,我们将在第2章更进一步地讨论IP。如果你早已知道IP路由选择的工作方法,以及地址解析是如何进行的,你可以跳过这一章。
第3章讨论最基本的配置问题。比如象建立一个内核以及设置你的以太网卡。串行口的配置在一个独立的一章中讨论,因为它的讨论不仅仅适用于TCP/IP网络,同样也与UUCP相关。
第5章帮助你针对TCP/IP网络设置你的机器。它包括只有回环使能的独立的主机的安装提示,以及连接至以太网的主机的安装提示。它也将介绍一些有用的工具,用以测试和调试你的安装设置。下一章将讨论如何配置主机名解析,并解释如何安装设置一个名字服务器。
接下来的两章分别着重介绍了SLIP和PPP的配置和使用。第7章解释了如何建立SLIP连接,并给出了一个详细的工具dip的参考。这个工具允许你自动操作大多数必要的步骤。第8章涵盖PPP以及PPP所需的的后台处理程序pppd。
第9章给出了设置一些很重要的网络应用程序的简短介绍,比如rlogin、rcp等等。这一章也介绍了服务是如何通过inetd super来管理的,以及你如何可以限制与安全相关的服务到一组(受托)可信的主机上。
接下来的两章讨论NIS,即网络信息系统(Network Information System),和NFS,即网络文件系统(Network File System)。对于象在一个局域网中的用户口令等的分布管理的信息来说,NIS是一个有用的工具。NFS允许你在你的网络中的几台主机上共享文件系统。
第12章给出了对Taylor UUCP管理的更进一步的介绍,Taylor UUCP是UUCP组件的一个免费实现。
本书的剩余章节详细讨论了电子邮件和Usenet News。第13章介绍了电子邮件的基本概念,如邮件地址看上去是怎样的,以及邮件处理系统是如何管理将你的消息送至接收者的。
第14章和第15章涵盖了smail和sendmail的设置,两个你可以使用的邮件传送代理。本书对这两者都进行了介绍,因为smail对初学者来说很容易安装,而sendmail则更具有灵活性。
第16章和第17章介绍了在Usenet中news管理的方法,以及你如何安装和使用C news,一个流行的管理Usenet news的软件包。第18章简要地叙述了对于你的本地网络如何设置一个NNTP后台程序来提供新闻阅读访问。第19章最后示出了如何配置和维护各种各样的newsreaders。
注释
[1] 上面这段话的本意,仍然在欧洲时有发生。
[2] 时间并没有对此改变多少。
[3] 当使用bash时,即GNU Bourne Again Shell,你可能需要避免使用感叹号,因为bash使用它作为它的历史字符。
[4] 在RFC-1055中对SLIP进行了讨论。头部压缩CSLIP的基本原理在RFC-1144中进行了叙述。
[5] NetBIOS是一个协议,象lanmanager以及Windows for workgroups就是基于它的。
[6] 在第9章我们将再回到这里来。
[7] 曾经有个你需要花很多钱购买的商业Unix,带有一个setuid-root的shell脚本,使用一个简单标准的诡计,该脚本程序就可允许用户获得root特权
[8] 在1988年,RTM蠕虫使得觉大多数Internet停滞,部分是通过利用一些sendmail程序的裂孔。这个漏洞早已修复。
[9] 有Gene Kim和Gene Spafford编写。
发布人:netbull 来自:Linux自由鸽