Linux网络管理员手册(12) 2000-07-29 11:22
发布者:netbull 阅读次数:1127
翻译:赵炯 gohigh@shtdu.edu.cn
第十二章 管理Taylor UUCP
12.1 历史回顾 UUCP是AT&T贝尔实验室的Mike Lesk在七十年代末期设计的,用于在公共电话线路上提供简单的拨号上网服务。由于许多想在自己的机器上有email和Usenet News的人仍然使用modem进行通信,所以UUCP仍然很流行。尽管有运行于各种类型的硬件平台和操作系统上的许多实现版本,然而它们在很高的程度上是兼容的。 然而,尽管在过去的这些年中有许多软件以各种方式已成为“标准”,还没有一个UUCP软件被称为UUCP的。自从在1976年第一个版本实现以来,它经历了一个稳固的演变过程。目前,存在着两个主要种类,它们在硬件支持和配置上是不同的。它们都有各式各样的实现,每种实现都有一些细微的差别。 其中一类就是所谓的“版本2 UUCP”,它是Mike Lesk、David A. Novitz和Greg Chesson于1977年实现的。尽管这是一个很老的版本,但仍然被经常使用。版本2的近期实现提供了更新的UUCP种类的易用性。 第二种是于1983年开发的,并且通常被称为BNU(基本连网工具)、HoneyDanBer UUCP,或简称为HDB。这个名称产生自作者的名字,P. Honeyman、D. A. Novitz和B. E. Redman。HDB考虑到了排除版本2 UUCP的某些不足之处。例如,增加了新的传输协议并且针对每个与之有UUCP通信的站点都有一个独立的目录。 目前随同Linux发行的UUCP实现是Taylor UUCP 1.04,[1]本章即基于这个版本进行讨论。Taylor UUCP 版本1.04是于1993年2月发布的。除了传统的配置文件以外,Taylor UUCP也可被编译成使用新的样式 – a.k.a.“Taylor”—配置文件。 最近发行了1.05版,并且不久就将融入大多数Linux发行版中。这些版本的不同之处主要在于你不太会使用到的特性上,所以你可以使用本书中的信息来配置Taylor UUCP 1.05版。 对于包含在许多Linux发行中的Taylor UUCP,它通常被编译成BNU兼容的,或者是使用Taylor配置方案的,或者间而有之。由于后者更具灵活性,并且可能比经常是晦涩的BNU配置文件易于理解,所以下面我将介绍Taylor配置方案。 本章的目的不是给你一个对UUCP命令的命令行选项是什么和怎么使用的详尽描述,而是给你一个对如何设置一个可使用的UUCP站点的概要介绍。第一部分给出了有关UUCP是如何实现远程执行和文件传输的一个简要说明。如果对于UUCP,你不是一个完全的新手的话,你可以跳过这一部分而直接到UUCP的配置文件部分,该部分解释了用于设置UUCP的各种文件。 然而,我们将假设你对UUCP套件的用户程序很熟悉。这些程序是uucp和uux。有关这两个命令的介绍,请参见在线手册页。 除了通常使用的uux和uucp程序,UUCP套件还包含了仅用于管理目的的一系列命令。它们用于监视通过你的节点的UUCP通信、删除老的日志文件或者汇总统计参数。这里将不对它们进行任何说明,因为它们与UUCP的主要任务是并行的。而且,它们有很好的文档可作参考并且很容易理解。不过,还有一类,它们是由UUCP实际的“工作机器”组成。它们被称为uucico(这里cico代表copy-in copy-out)和uuxqt—用于执行远程系统发送来的作业。 12.1.1 有关UUCP的更多信息 对于不能在本章中找到所要信息的人,应该阅览随该软件包而来的文档。这是描述使用Taylor配置方案进行设置的一打texinfo文件。可以分别使用tex和makeinfo将texinfo转换成DVI和GNU信息文件。 如果你想使用BNU或者甚至是(令人战栗的)版本2配置文件的话,这里有一本很好的书,“管理UUCP和Usenet”([Oreilly89])。我发现它非常有用。其它有关Linux上UUCP的很好的信息来源是Vince Skahan的UUCP-HOWTO,它是定期地投递到comp.os.linux.announce上的。 当然还有一个专门讨论UUCP的新闻组,叫做comp.mail.uucp。如果你有针对Taylor UUCP的问题,你最好在那里去问他们,而不要在comp.os.linux组中。
12.2 概述 12.2.1 UUCP传输和远程执行的概要 对于理解UUCP至关重要的概念是作业(jobs)。用户使用uucp或uux发起的每一个传输被称作一个作业。它是由在远程系统上执行的命令,以及将要被在站点间传输的文件集构成。当然,可以省略其中一部分。 作为一个例子,假设你在你的主机上发出了下面的命令,该命令使得UUCP将文件netguide.ps拷贝到主机pablo上,并且使得它执行lpr命令来打印这个文件。
$ uux –r pablo!lpr !netguide.ps
UUCP通常不会立刻调用远程系统来执行一个作业(不过你可以使用kermit来做到)。而是临时地将该作业描述存储起来。这称为假脱机操作(spooling)。作业所存放的目录树因此也就称为假脱机目录(spool directory)并且通常位于/var/spool/uucp中。在我们的例子中,该作业描述含有将被执行的远程命令(lpr)的有关信息、要求进行该操作的命令以及其它一些项目。除了这个作业描述,UUCP也需要存储输入的文件netguide.ps。 假脱机文件所在的确切位置和命名方法是可以不同的,这依赖于一些编译时的选项。HDB兼容的UUCP通常将假脱机文件存储于命名为/var/spool/uucp/site的目录中,这里site是远端站点的名称。当以Taylor配置方式编译时,UUCP将针对不同类型的假脱机文件在指定站点的假脱机目录下再创建子目录。 在规定的时间间隔,UUCP将向远程系统拨号。当与远程系统的连接建立后,UUCP就会传输描述作业的文件,加上所有的输入文件。输入的作业不会立刻被执行的,而要到连接结束关闭之后。这是用uuxqt来执行的,如果有指定到其它站点的作业,它也处理这些作业的转发工作。 为了区分重要的和不很重要的作业,UUCP给每个作业指定了一级别(grade)。这是一单个字母,范围从0到9、A到Z以及a到z,级别从大到小。Mail通常以级别B或C进行假脱机操作,而news则以级别N进行假脱机操作。级别越高的作业传输的越早。级别可以在调用uucp或uux时用-g标志来指定。 你也可以在一定时间内禁止低于某级别的作业的传输。这称为在对话期间所允许的最大假脱机级别(maximum spool grade),缺省值是z。这里请注意术语上的含糊不清:一个文件将被传输当且仅当它的级别等于或高于最大假脱机级别。
12.2.2 uucico的内部工作机制 要理解为什么uucico需要知道某些事情,这里给出了它实际上是如何连接至远程系统的一个快速描述。 当你在命令行上执行uucico –s system时,它首先必须进行物理连接。所进行的操作起决于所打开的连接类型 – 例如,当使用电话线时,它必须找到一个modem,并且进行拨号。而在TCP上,它就必须调用gethostbyname(3)将名字转换为一个网络地址、找出要打开那一个端口,并且将该地址绑定于相应的套接字(socket)上。 在这个连接被建立起来后,接下来必须通过一个认证过程。这常常是由远程系统询问一个登录名字以及一个可能的密码组成。这通常被称为登录对话(login chat)。认证过程或者是通过通常的getty/login套件执行的,或者是由uucico自身在TCP套接字上完成的。如果认证成功的话,远端系统就会启动uucico。初始化连接的本地uucico拷贝被视作主端(master),远端的则作为从端(slave)。 接下来是握手阶段(handshake phase);主端现在发出自己的主机名,加上几个标志,从端检查这个主机名的登录许可,发送和接收文件等等。这些标志用于描述(以及在其它一些事情中)被传输的假脱机文件的最大级别。如果使能的话,这里将会进行一个对话计数,或调用序列号的检查。使用这个特性,两端站点就维持有一个成功连接的计数,可用于进行比较。如果它们不匹配的话,握手过程就失败了。这对于保护你免受冒充者是很有用的。 最后,两个uucico试着达成一个共同的传输协议。这个协议指导数据被传输的方法、检查一致性并且在出错时进行重传操作。针对所支持的不同的连接类型需要有不同的协议。例如,电话线路要求有一个对于出错保守的“安全”协议,而TCP传输天生就是可靠的因此可以使用一个更为有效的无须附加出错检查的协议。 在握手阶段完成以后,就开始进行实际的传输阶段。传输两端开启所选的协议驱动程序。驱动程序一般还要进行与该协议相关的初始化过程。 首先,主端将发送假脱机级别足够高的排于队列中的所有文件到远程系统中。当它完成传输后就会通知从端,此时从端就可以挂断了。现在从端可以或者同意挂断,或者将对话控制权接过来。这是一个规则的变化:现在远程系统变成了主端,而本地则变成了从端。新的主端现在发送它的文件。当完成后,两个uucico互相交换传输消息,并关闭连接。 我们将不再进行更为详细的描述:请参阅代码或任何针对于此的有关UUCP的好书。在网上也还流传着一篇很古老的文章,是由David A. Novitz写的,它给出了UUCP协议的详细描述。Taylor UUCP FAQ也讨论了UUCP实现方法的某些细节。它被定期地投递到comp.mail.uucp上。
12.2.3 uucico命令行选项 本节描述uucico的一些最重要的命令行选项。有关完整的命令行选项列表,请参阅uucico(1)手册页。
-s system 呼叫指定的系统(system)除非受到呼叫时间的限制。
-S system 无条件地呼叫指定的(system)。
-r1 以主端(master)模式启动uucico。这是在给出-s或-S时的缺省值。如果只有该选项,该-r1选项将致使uucico试尝呼叫sys中的所有系统(systems),除非受到呼叫限制或重试次数限制。
-r0 以从端(slave)模式启动uucico。这是在没有-s或-S给出时的缺省值。在从端模式中,或者是标准的输入/输出被假设连接至一个串行端口,或者是使用由-p指定的TCP端口。
-x type,-X type 开启指定类型的调试。可以用逗号分开的一个列表指定几种类型。以下类型是有效的:abnormal,chat,handshake,uucp-proto,proto,port,config,spooldir,execute,incoming,outgoing。为了与其它UUCP实现方式的兼容,可以用一个数字代替,该数字开启上面列表中的头n项。
调试信息将被记录在/var/spool/uucp文件Debug中。
12.3 UUCP的配置文件 与简单的文件传输程序相比,UUCP被设计成能够自动地处理所有的传输操作。一旦被正确地设置好,就无须管理员每日进行干预了。操作所需要的信息被保存在/usr/lib/uucp目录下的几个配置文件中。这些文件大多数用于拨出操作中。
12.3.1 Taylor UUCP简介 要是说UUCP的配置很难,这只是一种保守的说法。实际上它是一个错综复杂的问题,并且有时候配置文件简明的格式并没有使得问题变得更容易些。(尽管与HDB或版本2中的老式格式相比较,Taylor格式几乎是很容易阅读的)。 为了给你一个这些文件是如何相互作用的感觉,我们将向你介绍一个非常重要的文件,并对这些文件的样本进行观察。现在我们将不解释各种细节问题;更精确的描述将在下面各个独立小节中给出。如果你想在你的机器上设置UUCP,你最好是从某些样本文件开始,并逐渐地对样本文件加以调整。你可以或者采用下面示出的,或者采用那些包含在你的Linux发行版本中的样本文件。 本节描述的所有文件都存储在/usr/lib/uucp或其中的一个子目录中。有些Linux发行版含有UUCP执行文件,它们对HDB和Taylor配置都支持,并且对每种配置文件集使用不同的子目录。在/usr/lib/uucp中通常有一个README文件。 为了让UUCP能正常地工作,这些文件必须为uucp用户所有。其中某些文件含有密码和电话号码,因此应该有600的许可权限。[2] 最主要的UUCP配置文件是/usr/lib/uucp/config,并用于设置通常的参数。其中最重要的(并且到现在为止,也是仅有的),是你的主机的UUCP名字。在虚拟酿酒厂,他们使用vstout作为他们的UUCP网关:
# /usr/lib/uucp/config – UUCP main configuration file hostname vstout
另一个重要的配置文件是sys文件。它含有你将连接站点的所有系统方面的信息。这包括站点名字以及连接本身的信息,比如当使用modem连接时的电话号码。一个以modem连接的称为pablo站点的典型内容将是 图12.1: Taylor UUCP配置文件之间的相互关系。
# /usr/lib/uucp/sys – name UUCP neighbors # system: pablo system pablo time Any phone 123-456 port serial1 speed 38400 chat ogin: vstout ssword: lorca
port指定了所使用的端口,而time指出了它将被呼叫的时刻。Chat描述了登录对话脚本-必须相互交换以允许uucico登录进pablo的字符串序列。我们将稍后讨论登录脚本。port命令并不指定一个设备相关的文件比如/dev/cua1,而是指定了port文件中的一个入口。你可以随心所欲地指定分配这些名字只要这些名字在port文件中有有效的引用。 port文件掌握着与连接相关的信息。对于modem连接,它描述了所使用的设备相关文件、所支持的速度范围以及连接至端口的拨号设备的类型。下面的入口条目描述/dev/cua1(即已知的COM2),一个NakWell modem连接到它上面,该modem可以运行在最高38400bps的速度上。入口条目的命名方法是选择与sys文件中端口名匹配的名字。
# /usr/lib/uucp/port – UUCP ports # /dev/cua1 (COM2) port serial1 type modem device /dev/cua1 speed 38400 dialer nakwell
属于拨号器(dialer)本身的信息则被保存在另一个文件中,称为-你猜得到的:dial。对于每种拨号器类型,它基本上含有用于发出拨号到一个远程站点的命令序列、和给出的电话号码。再一次,这是作为一个对话脚本给出的。例如,对于上面的NakWell的入口条目看上去可以象这样:
# /usr/lib/uucp/dial – per-dialer information # NakWell modems dialer nakwell chat “” ATZ OK ATDT\T CONNECT
以chat开头的一行指出了modem对话,它是发送到modem和从modem接收的初始化modem并使它拨出所期望号码的命令串。”\T”序列将被uucico替换成电话号码。 为了给你一个uucico是如何处理这些配置文件的大概思路,假设你在命令行上发出命令
# uucico –s pablo
uucico所做的第一件事是在sys文件中查找pablo。从sys文件的pablo入口条目中它看到它应该使用serial1端口来建立连接。port文件告知它这是一个modem端口,并且有一个NakWell modem连在该端口上。 uucico现在在dial文件中查找描述NakWell modem的入口条目,并且找到一个,并打开串行端口/dev/cua1并执行拨号器对话。也即,它发送出“ATZ”,等待响应“OK”,等等。当遇到字符串“\T”时,就用从sys文件中获得的电话号码(123-456)取代之。 在modem返回CONNECT以后,连接就被建立好了,并且modem对话也就结束了。uucico现在返回到sys文件并执行登录对话。在我们的例子中,它将等待提示“login:”,然后送出它的用户名(neruda),等待“password:”提示,并送出它的密码,“lorca”。 在完成了权限认证以后,远端即会启动它自己的uucico。然后,这两个uucico将进入前节所述的握手阶段。 配置文件之间的相互关系也在图12.1中示出了。
12.3.2 UUCP需要知道些什么 在你开始编写UUCP配置文件之前,你必须收集它需要知道的一些信息。 首先,你必须知道你的modem连接在哪个串行端口上。通常,(DOS)端口COM1至COM4映射到设备文件/dev/cua0至/dev/cua3上。对于大多数发行版,比如象Slackware,创建了一个链/dev/modem作为到适当cua*设备文件的一个链,并配置kermit、seyon等等,以使用这个通用文件。在我们这个情况下,你也应该在你的UUCP配置中使用/dev/modem。 这样做的原因是所有拨号程序在串行端口被占用时使用所谓的lock文件来作出通知。这些锁定文件的名称是字符串LCK..和设备文件名的串联,例如LCK..cua1。如果程序对于同样的设备使用不同的文件名,它们将不能识别出各自的锁定文件。结果,当它们同时启动时,将毁坏对方的进程。在你使用crontab确定你的UUCP呼叫时间表时,这并非不常发生的事。 关于设置你的串行端口的详细信息,请参见第四章。 下一步,你必须找出在什么速度上你的modem将与Linux通信。你必须将它设置成你所期望获得的最大有效传输速率上。有效的传输速率可能比你的modem的原始物理传输速率高得多。例如,许多modem以2400bps(每秒比特数)发送和接收数据。如果使用了压缩协议如V.42bis,实际的传输速率可能爬升至9600bps。 当然,如果UUCP要做任何事的话,你将需要一个被呼叫的系统的电话号码。同样,对与远程系统,你还需要一个有效的登录id和一个可能的密码。[3] 你也必须明确地知道如何登录进系统。例如,在登录提示出现之前你是否需要按下BREAK键?它是显示login:还是user:?这对于编制对话脚本(chat script)是必须的,这个对话脚本告知uucico如何进行登录。如果你不知道,或者如果常用的对话脚本失败了,就尝试使用象kermit或minicom的终端程序,并明确地写下来你必须做些什么。
12.3.3 站点命名 对于基于TCP/IP的网络,使用UUCP连网时,你的主机必须有一个名字。要是你只是想简单地使用UUCP来进行你直接拨号的站点间或在在本地网上文件的传输工作,那么这个名字就不需要符合任何标准。[4] 然而,如果你将UUCP用于mail或news连接,你应该考虑把你的名字注册在UUCP映射计划项目中。UUCP映射计划将在第13章加以描述。即使你只是在一个域中,你也应该考虑为你的站点获取一个官方的UUCP名字。 人们常常选择他们的UUCP名字与他们的全资域名相匹配。假如你的站点的域名地址是swim.twobirds.com,那么你的UUCP主机名就应该是swim。考虑那些互相熟知的基于第一个名字的UUCP站点。当然,你也可以使用一个完全与你的全资域名无关的UUCP名字。 然而,请确信不要在邮件地址中使用不合格的站点名称除非你已经将其注册为你的正式UUCP名字。在最好的情况下,邮递到没有注册的UUCP主机的所有信息将只是悄无声息地消失掉了。如果你使用了一个早已属于其它站点的名字,那么邮件将会路由到那个站点去,并会给那个站点的邮件管理者带来无穷无尽的烦恼。 默认地,UUCP站点使用由hostname设置的名字作为该站点的UUCP名字。这个名字通常是在/etc/rc.local脚本中设置的。如果你的UUCP名字与你的主机名的设置不同的话,你就必须在config文件中使用hostname选项来告知uucico你的UUCP的名字。这将在下面讲解。
12.3.4 Taylor配置文件 现在我们回过来讨论配置文件。Taylor UUCP从下列文件中获取信息:
config 这是个主要的配置文件。你可以在这里定义你的站点的UUCP名字。
sys 这个文件描述了你所知道的所有站点。对于每个站点,它指定了站点的名字、呼叫时间、拨号号码(如果有的话)、所使用的设备类型以及如何登录。
port 含有描述各个存在端口的入口条目,以及线路所支持的速率和所用的拨号器。
dial 描述用于建立电话线路连接的拨号器。
call 含有呼叫一个系统时所用的登录名和密码。很少用到。
passwd 含有在登录时系统可能用到的登录名和密码。仅当uucico自己进行密码检查时才用到这个文件。
Taylor配置文件通常由含有关键字-值对的行组成。一个‘#’符号指定本行直到行尾都为注释。要使用‘#’符号本身,你就要和反斜杠一起使用它。 你可以使用很多的选项来调节这些配置文件。这里我们不能讨论所有这些参数,而将只是讨论几个很重要的参数。利用它们,你就可以配置一个基于modem的UUCP连接。其它的小节将描述当你想在TCP/IP或直接串行线上使用UUCP时所须作的必要修正。完整的参考资料已随同Taylor UUCP原代码以Texinfo文档给出。 当你认为你已经完全配置好你的UUCP系统以后,你可以使用uuchk工具(位于/usr/lib/uu[1] [2] [3] 下一页 |