荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: georgehill (New Century New Dream), 信区: Linux
标  题: 第六章 Intranet(上)(转寄)
发信站: BBS 荔园晨风站 (Sat Jan  6 14:45:19 2001), 站内信件

【 以下文字转载自 georgehill 的信箱 】
【 原文由 georgehill.bbs@smth.org 所发表 】
发信人: ruster (尘埃*星辰*领悟), 信区: Linux
标  题: 第六章 Intranet(上)(转寄)
发信站: BBS 水木清华站 (Thu Dec 21 13:42:02 2000)

第6章 Intranet

  本章要点:

  本章介绍如何将Linux配置为Intranet/Internet服务器,如ftp,www服务器等等。

      本章具体包括以下内容。

    Internet名字服务器的配置

    ftp服务器的配置

    WWW服务器的配置

  6.1 域名系统

  域名服务即DNS系统,它可以让你在访问确定的机器的时候,无需给出IP地址而是利用
容易记忆的名字来处理问题。实际上,它有两种任务,将用户提出的名字翻译成IP地址
,或者从IP地址查出域名。

  6.1.1 DNS的工作模式

  DNS是一个庞大的分布式数据库系统,它使用树状结构来处理各种查询。首先,我们会
注意到,DNS名字是一些用点号分开的字符串,例如www.microsoft.com,这种名字通常
用一种虽不太准确却很容易的方式来理解,例如microsoft.com是.com下的一个“子域”
,而www.microsoft.com是microsoft.com的一个成员。所有DNS的共同祖先是".",称为
根域。

  每个子域都应该有自己的名字服务器,或DNS服务器,例如,我们有一个.mydomain.c
om域,为了实现对域内的机器以及下层子域能够提供DNS服务,我们至少应该有一台域名
服务器来处理DNS请求。

  下面我们看看DNS是如何工作的,假设我们的域名服务器是ns.mydomain.com,它用来
处理所有域内机器发出的DNS请求,这种DNS请求可以分成三种,一种是在mydomain.com
内部的名字,名字形式是(比如说)host1.mydomain.com;第二种是在mydomain.com之外
,比如说bbs.edu.cn;第三种是在mydomain.com下的一个子域内的一台机器,例如host
2.subdomain.mydomain.com。

  ns.mydomain.com中应该包含所有名字为*.mydomain.com的机器的名字到IP地址的对照
关系,但是不包含*.subdomain.com的对照关系。所以,当DNS客户机器向它提出一个查
找host1.mydomain.com的请求的时候,它直接从本地数据库得到host1.mydomain.com的
IP地址信息并且送回。

  当接收到一个类似于bbs.edu.cn的DNS查询请求的时候,DNS服务器将首先判断出它不
在本地域内部,为了得出一个结果,它有两个选择,一个是回答客户“我不知道,但是
你可以去问XXX服务器”;另外一个选择是自己去查询其他的DNS服务器,得到结果后再
传送给客户。第二种方式称为递归检索。

  为了能够找到bbs.edu.cn的地址,ns.mydomain.com必须知道世界上其他服务器的地址
,这有两种方案,第一种是ns.mydomain.com一开始就知道一个更庞大的DNS服务器,所
有不懂的名字都交给它去查询,这种方式称为转发;另外一个方法更专业一点,首先,
ns.mydomain.com知道世界上某些最重要的名字服务器的地址,然后再从这些服务器开始
按照DNS的树状顺序查询。

  举例来说,ns.mydomain.com发现自己不知道bbs.edu.cn的地址,但是它知道世界上有
一些“根”服务器,例如,a.root.net就是这样的一个服务器,其地址是198.41.0.4。
所以,它向198.41.0.4提出一个请求。

  a.root.net在接受到这个请求之后,它也不知道这个名字到底在那里,但是由于bbs.
edu.cn看起来在.cn中,而它知道.cn的域名应该由ns.cnc.ac.cn负责,其IP地址是159.
226.1.1。于是它回答:“去问159.226.1.1,以后凡是.cn的请求你可以问它”。

  接下来,ns.mydomain.com将会去询问ns.cnc.ac.cn,ns.cnc.ac.cn也不知道bbs.edu
.cn在那里,但是它知道edu.cn应该由dns.edu.cn负责,所以它回应:“edu.cn应该去问
dns.edu.cn,IP是202.112.0.35”。

  当ns.mydomain.com询问dns.edu.cn时,终于得到了这个域名的正确地址:202.112.5
8.200。但是接下来,在返回信息之前,ns.mydomain将首先记忆自己所学到的知识:

  凡是.cn的名字,去问159.226.1.1

  凡是.edu.cn的名字,去问202.112.0.35

  bbs.edu.cn的名字是202.112.58.200

  它将这些信息记录在自己的文件中,以后当再有客户询问bbs.edu.cn时,它直接回答
:“我记得那是202.112.58.200”。

  最后,返回查询结果。

  当提问的是host2.subdomain.mydomain.com时,ns.mydomain.com将会首先看到subdo
main.mydomain.com应该由ns.subdomain.mydomain.com处理,所以去询问ns.domain.my
domain.com,其他和上面说的流程基本相同。

  显然,由于ns.mydomain.com存储了查询到的知识,所以它也可以回答许多不应该由它
回答的信息,但是这些信息可能是错误的(因为名字到IP的对照关系可以更改)。这种
信息称为“非权威信息”。相反,有关host1.mydomain.com的信息它的知识肯定是正确
的。

  为了提高域名服务的效率,通常一个子域内可以有多个域名服务器,这些服务器可以
分成三类,一类是确实记录了域内机器的名字信息的服务器,称为主(primary)域名服
务器;另一类也包含记录,但是它的信息是定期从主服务器来的,这种服务器的名字信
息也是权威信息,这种服务器称为从(secondary)域名服务器;还有一类简单地缓冲各种
查询信息,自己并不发布任何权威信息,这称为cache-only服务器。

  6.1.2 bind 8 服务器配置

  DNS服务器通常用named守护进程提供,不过它有一个怪异的名字,称为bind。由于历
史的原因,named有两个规范,分别称为bind 4和bind 8。我们研究的是bind 8,这是目
前的Linux发行版本中的named程序的标准。

  要使用named程序,你需要安装bind软件包,我这里使用的是bind-8.2.1-7。

  配置bind8首先需要处理/etc/named.conf文件,通常它由一串段落构成,我们这里只
能介绍最重要的部分。

  让我们来看一个范例性的named.conf文件,在这个例子中,我们配置的是asnc.edu.c
n域的主域名服务器:

  [root@openlab /etc]# cat named.conf

  options {

          directory "/var/named";

  };


  zone "." in {

          type hint;

          file "named.ca";

  };


  zone "0.0.127.in-addr.arpa" in {

          type master;

          file "named.local";

  };

  zone "asnc.edu.cn" in {

  type master;

  file "asnc.hosts";

  };

  zone "248.199.202.in-addr.arpa" in {

  type master;

  file "asnc.rev";

  };

  首先是options段落,它用于建立一些全局信息,这里的directory 信息告诉named程
序到哪里去找后面指出的那些文件。

  每个zone段落定义一组查询信息,zone "."定义的是根信息,即DNS根服务器的信息,
接下来file "named.ca"给出了根文件的名字。

  zone "0.0.127.in-addr.arpa"段落给出反向的域名解析信息,注意0.0.127.in-addr
.arpa"实际是定义的127.0.0.*的信息,也就是IP地址是反写的。type master表示这是
个主域名服务器。同样,这个定义文件在named.local。

  zone "asnc.edu.cn" 给出*.asnc.edu.cn的信息,按照这里的定义显然相应的信息在
asnc.hosts文件中。相应地,zone "248.199.202.in-arpa"给出的是202.199.248.*的名
字信息,文件在asnc.rev。

  上面提到的四个文件按照options段落应该位于/var/named,那么我们看一下这几个文
件:

  [root@openlab named]# cat named.ca

  .                        3600000  IN  NS    A.ROOT-SERVERS.NET.

  A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4

  .                        3600000      NS    B.ROOT-SERVERS.NET.

  B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107

  .                        3600000      NS    C.ROOT-SERVERS.NET.

  C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12

  .                        3600000      NS    D.ROOT-SERVERS.NET.

  D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90

  .                        3600000      NS    E.ROOT-SERVERS.NET.

  E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10

  .                        3600000      NS    F.ROOT-SERVERS.NET.

  F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241

  显然,现在这个文件定义的是一些根服务器的地址。这个文件是在安装bind的时候自
动生成的,你也可以按照bind的文档自己去下载。由于根服务器可能会改变,你需要定
期下在这个文件。

  接下来,我们可以注意named.local文件:

  [root@openlab named]# cat named.local

  @       IN      SOA     localhost. root.localhost.  (

                                        1997022700 ; Serial

                                        28800      ; Refresh

                                        14400      ; Retry

                                        3600000    ; Expire

                                        86400 )    ; Minimum

                IN      NS      localhost.


  1       IN      PTR     localhost.

  这个文件由两个部分构成:SOA段落和名字记录。每个信息文件必须以一个SOA段落开
始。它定义了下面的名字记录应该如何理解和使用,一个@ IN SOA代表了SOA记录的开始
,现在的形式是:

  @       IN      SOA     localhost. root.localhost.  (

  第一个localhost.表示这个SOA段落使用的是localhost机器,接下来的root.localho
st应该理解为root@localhost,表示DNS管理员的邮件地址。注意这些地址后面都必须加
上一个点号。加上结束点号的名字代表完整的主机名,而没有结束点号的名字将自动加
上zone里面定义的后缀。

  括号内定义了一组信息,其中,最主要的是序列号信息,例如这里的1997022700,实
际上,其数值无关紧要,问题是次域名服务器需要根据这个数值判断文件的版本信息,
所以每次更改内容,你都应该将这个数值加大一点。

  另外的几个信息是缺省的刷新时间,这个缺省值已经可以使用,通常你无需更改它们
,只有到最后的负载均衡部分我们才需要真正关心这个信息。

  下面就是记录信息了,这里只有两个信息:

  IN   NS localhost

  这是个NS记录,表示本域的域名服务器是localhost。

  IN PTR localhost.

  我们指出过named.local是一个反向查询用的信息文件,现在就是一个信息记录,PTR
表示这是一个反向解析记录,这里的PTR记录指出127.0.0.1的名字是localhost。注意这
里用的是1,因为后面没有点号,所以named会自动给它加上来自named.conf的后缀,在
这里就是.0.0.127,也就是组成1.0.0.127,反序之后就成为127.0.0.1。

  下一个文件是asnc.hosts,它是:

  [root@openlab named]# cat asnc.hosts

  @       IN      SOA     openlab.asnc.edu.cn. wanghy.openlab.asnc.edu.cn.
(

                                        1997022700 ; Serial

                                        28800      ; Refresh

                                        14400      ; Retry

                                        3600000    ; Expire

                                        86400 )    ; Minimum

                IN      NS      openlab.asnc.edu.cn.

  openlab       IN      A     202.199.248.6

  mail          IN      A     202.199.248.11

  www           IN      A     202.199.248.2

  同样使用SOA段落开始,内容和刚才说的差不多。

  NS之后就是A记录,A记录和PTR记录正好相反,是从域名解析IP地址用的记录。注意到
按照/etc/named.conf这个文件负责的是asnc.edu.cn域,而且openlab后面没有点号,所
以解释为openlab.asnc.edu.cn = 202.199.248.6。相应地,下面的两个记录也如此解释


  最后是asnc.rev,它的内容对于我们现在很清楚了:

  [root@openlab named]# cat asnc.rev

  @       IN      SOA     openlab.asnc.edu.cn. wanghy.openlab.asnc.edu.cn.
(

                                        1997022700 ; Serial

                                        28800      ; Refresh

                                        14400      ; Retry

                                        3600000    ; Expire

                                        86400 )    ; Minimum

                IN      NS      openlab.asnc.edu.cn.

  2             IN      PTR     www.asnc.edu.cn.

  11            IN      PTR     mail.asnc.edu.cn.

  6             IN      PTR     openlab.asnc.edu.cn.

  177           IN      PTR     physics.asnc.edu.cn.

  确认上述文件无误之后,可以启动named了。通常我们用/usr/sbin/ndc程序来启动na
med:

  $ ndc start

  new pid is 1289

  出现这个信息说明named程序已经开始工作了。

  要确认named的工作是否正确,使用nslookup程序:

  $nslookup

  Default Server:  openlab.asnc.edu.cn

  Address:  202.199.248.6


>

  >是nslookup程序的提示符,在这里可以输入nslookup命令,比如,在刚才我们定义了
一个mail.asnc.edu.cn,其地址是202.199.248.11,那么,我们可以实验一下是否正确


  > mail.asnc.edu.cn

  Server:  openlab.asnc.edu.cn

  Address:  202.199.248.6


  Name:    mail.asnc.edu.cn

  Address:  202.199.248.11

  > 202.199.248.11

  Server:  openlab.asnc.edu.cn

  Address:  202.199.248.6


  Name:    mail.asnc.edu.cn

  Address:  202.199.248.11

  显然,这个地址信息的添加是正确的,然后我们要测试一下对非本域的地址验证是否
正确,例如:

  > www.gov.tw

  Server:  openlab.asnc.edu.cn

  Address:  202.199.248.6


  Name:    service.gov.tw

  Address:  210.69.2.1

  Alias:  www.gov.tw

  这个操作要花费比较长的时间,因为要去查询非本地的名字服务器,但是如果你再次
查询这个信息,就会发生这样的情况:

  > www.gov.tw

  Server:  openlab.asnc.edu.cn

  Address:  202.199.248.6


  Non-authoritative answer:

  Name:    service.gov.tw

  Address:  210.69.2.1

  Aliases:  www.gov.tw

  Non-auth.....这样的提示表示信息不是真正从对方的服务器来的,而是来自某个缓冲
服务的结果(在现在就是本地缓冲的结果)。

  测试完毕后,输入exit退出。

  一般情况下,DNS的工作信息可以在/var/log/messages中看到。

  上面我们定义了一个主域名服务器,其实次要域名服务器的配置也差不多,不过,因
为次要域名服务是从主域名服务器得到数据,所以不需要配置asnc.rev和asnc.hosts文
件,相反,我们需要把zone中相应的部分改成:

  zone "asnc.edu.cn" in {

  type slave;

  masters {202.199.248.2};

  };


  zone "248.199.202.in-addr.arpa" in {

  type slave;

  masters {202.199.248.2};

  };

  type slave说明这是个从域名控制器,masters子句给出了本域的主域名控制器的地址
,注意必须用花括号括起来,这是个非常容易犯的错误。

  还可以定义cache-only控制器,这可以用type forward方式实现,如

  zone "asnc.edu.cn" in {

  type forward;

  forwarders {202.199.248.2};

  };

  由于named的实现,每次修改名字解析文件(如asnc.hosts,asnc.rev等等)之后,需
要重新启动named,这可以用ndc restart命令实现。

  前面我们曾经指出过,DNS是一种分级检索系统,那么,上级DNS如何知道下级DNS的信
息呢?举个例子来说,如果你申请了一个mydomain.com的域名,那么.com的服务器应该
如何注册它呢?

  为了解释这个问题,我们看一个例子,这个例子的配置就是上面说的asnc.edu.cn域的
主DNS服务器,现在我需要建立一个子域lab.asnc.edu.cn,那么,注意新的asnc.hosts
文件(加粗体的是增加的部分):

  [root@openlab named]# cat asnc.hosts

  @       IN      SOA     openlab.asnc.edu.cn. wanghy.openlab.asnc.edu.cn.
(

                                        1997022700 ; Serial

                                        28800      ; Refresh

                                        14400      ; Retry

                                        3600000    ; Expire

                                        86400 )    ; Minimum

                     NS      openlab.asnc.edu.cn.

  openlab       IN      A     202.199.248.6

  mail          IN      A     202.199.248.11

  www           IN      A     202.199.248.2

  physics       IN      A     202.199.248.177

  lab   134000  IN      NS    ns.lab.asnc.edu.cn.

  ns.lab 134000  IN      A     202.199.248.149

  第一个加粗的行定义了一个子域,因为lab后面没有点,所以自动解释为lab.asnc.ed
u.cn。NS是名字服务器记录,这一行说明lab.asnc.edu.cn域的内容应该去ns.lab.asnc
.edu.cn域询问,134000是生存期,即这个名字在多长时间内不会改变,这个栏目是可选
的,缺省就使用前面的定义。注意如果在IN NS前面没有子域说明的话,就表示相应的名
字服务记录是对于本域的。例如IN NS 202.199.248.254将定义另一个对于asnc.edu.cn
域的域名服务器。

  接着的一行定义了ns.lab机器的地址,这样,以后再有询问host.lab.asnc.edu.cn.的
时候,我们的DNS服务器将去查询202.199.248.149服务器。

  显然,如果你做的是一个很大的公司的主域名控制器,那么你的名字服务器会缓冲许
多的信息,而且会忙于处理愚蠢的检索。为了解决这个问题,你可以将你的服务器设置
成为非递归的,这可以通过在named.conf中加入参数 recursion no子句来实现,通常r
ecursion是置为yes的。

  在一般情况下,PTR和A记录是域名系统的主要数据,另外两种常见的记录类型是MX和
CNAME,MX记录我们放到电子邮件那一章去描述,而CNAME是某个A记录的别名,例如在a
snc.hosts中加入

  www2   CNAME   mail

  表示www2.asnc.edu.cn是mail.asnc.edu.cn的另外一个名字。

  注意有两种给一个地址赋以多个名字的办法,一种是用两个地址栏相同的A记录,另一
种是用CNAME,但是只有CNAME才能产生别名关系。这会在http server的设置中产生一些
影响,详细内容见WWW server那一节。

  6.2 文件传输服务

  文件传输即ftp服务,在各种intranet的服务中它应该是最容易配置的。一般来说,它
也非常容易管理。我们这里使用的是wu-ftpd和一些派生的ftp软件。实际上,如果要做
ftp站点,Linux是非常合适的,因为它的磁盘操作性能很高。

  6.2.1 wu-ftpd的配置和管理

  wu-ftpd是Linux缺省的ftp服务器,几乎每个Linux发行版本都会包含这个产品。通常
安装系统的时候就会安装这个软件,你可以用rpm –q wu-ftpd来检查是否安装了这个程
序。如果没有,你仍然可以自己安装这个产品。

  wu-ftpd程序是通过inetd程序启动的,要使用它,你应该首先确定/etc/services文件
中包含这样一行:

  ftp                 21/tcp


  然后确定/etc/inetd.conf包括这样的行:

  ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a


  重新启动inetd就可以提供服务了。

  因为in.ftpd程序是通过/usr/sbin/tcpd程序启动,所以以前介绍的身份控制文件hos
ts.allow和hosts.deny程序对它仍然起作用。另外,ftp程序还有一些额外的身份检查。

  前面我们指出过,/etc/passwd文件的最后一个栏目是用户的登录shell,即用户登录
完成后执行的第一个程序,在ftp服务器启动的时候,它检查用户的shell程序,并且和
/etc/shells文件列出的程序比较,只有在shell包含在/etc/shells里面的用户才能成功
登录ftp,否则将被弹回。

  登录时的另外一个检查是用户名是否是anonymous或者ftp,如果是,那么in.ftpd程序
将认为这是一个匿名用户,这种情况下,它检查/etc/passwd中是否有名叫ftp用户,如
果存在,in.ftpd程序将用户放到ftp用户的宿主目录中,并且执行一个chroot命令,将
这个目录变成用户的根目录;如果不是匿名用户,那就把用户放到他的正确宿主目录中
,也不执行chroot命令。显然,由于chroot的作用,匿名用户无法越出ftp用户的宿主目
录,即使用连接也不行。但是这带来了一个问题,就是ftp用户无法访问/bin和/usr/bi
n,/lib,/usr/lib目录,因此无法使用UNIX命令。解决的办法是在匿名用户的根目录(
比如/ftp)下建立bin和lib目录,然后把最常用的一些命令拷贝到里面去,通常安装系
统的时候,安装程序会替你作这件事情,不过它是自动建立在/home/ftp下面,如果你更
改了ftp用户的目录,请把/home/ftp下面的bin和lib目录移动过去。

  理解了wu-ftpd的工作方式之后,配置它就并不复杂了。wu-ftpd程序有一组配置文件
,最重要的是/etc/ftpaccess,这个文件决定了大部分的ftp服务器行为,另外,/etc/
ftpconversions,/etc/ftphosts,/etc/ftpusers,/etc/ftpgroups也很重要。

  让我们先看一下/etc/ftpaccess的语法,通常ftpaccess支持下列的句子(注意,这里
只列出了绝对必须理解的句子,其他的你可以简单地使用缺省值。Linux的一大好处就是
配置可以在原来的文件上改来改去):

  class

  定义可以访问服务器的一类用户。格式是class [类名] [用户类型] [地址组]

  类名是任意的字符串,用它来标志一个类,用户类型是用逗号分开一个列表,表中的
项目可以是anonymous,guest和real。anonymous就是匿名用户,real表示一切在服务器
上有实际账户的用户,而guest用户比较奇怪,它是用guestgroup限制的真实用户,一般
我们并不需要这个功能,如果你对此感兴趣,参考ftpd的文档。地址组是个通配符,表
示用户可以登录的地点。

  例如,class myclass real * 将允许真实用户从任何地方登录服务器,而class hos
t anonymous 192.168.42.* 意味着允许匿名用户从192.168.42.0-255来登录;当然cla
ss all guest,real,anonymous * 意味着所有人可以从任何地方登录。

  可以有任意多个class子句。

  deny

  禁止用户从某些主机登录。语法是deny [地址组] [信息文件名字],其中信息文件名
字是拒绝服务时显示的内容。例如,deny host1.edu.cn /ftp/message_deny将在有人试
图从host1.edu.cn启用本机的ftp服务时拒绝并显示/ftp/message_deny文件的名字。

  如果想拒绝没有域名的机器登录,在地址组中使用 ! nameserved。

  limit

  限制某个类中的ftp连接数。例如,想限制myclass类中的连接不能超过10个,使用

  limit myclass 10

  注意limit还有两个可选的参数,时间参数用于设定限制生效的时间,其形式比较古怪
,你可以自己参考文档,不过我不认为这个有太大用处;另外一个参数是达到限制之后
拒绝连接所显示的文件,如上面的行可以改成

  limit myclass 10 /ftp/toomanyopen

  然后在/ftp/toomanyopen中写上“由于连接数已满,请稍候再连接”。

  loginfails

  设置用户可以重试密码的次数,语法是loginfails [次数]

  banner

  显示欢迎信息,这个信息将在登录提示之前显示。语法是banner [文件名]

  email

  如果系统出错,给谁发信,语法是email [邮件地址]。

  message

  设定一些条件,当发生这些条件的时候,向用户传递信息。语法是 message [信息文
件名] [条件] [适用的类]。其中条件可以是LOGIN或者CWD=[路径名],LOGIN表示登录成
功,CWD则是进入到某个目录。不过要注意当对匿名用户使用时,信息文件的路径名要相
对于ftp用户的宿主目录。

  例如,定义匿名用户的类是ftp,然后希望匿名用户登录时显示/ftp/welcome,进入/
ftp/download目录时显示/ftp/help,而且ftp用户的宿主目录是/ftp,那么welcome和h
elp文件的相对路径名应该是/help和/welcome,所以可以写成:

  message /welcome LOGIN ftp

  message /help CWD=/download ftp

  log commands

  记录用户的命令,用法是log commands [用户类型]。例如,要记录所有用户输入的命
令,用log commands anonymous,real,guest

  log transfers

  记录用户进行的文件传输,语法是log transfers [用户类型] [传输类型],用户类型
就是anonymous,guest和real,而传输类型可以是inbound和outbound,表示两个传输方
向。例如

  log transfers anonymous,guest,real inbound,outbound

  记录文件在/var/log/xferlog。

  chmod,delete,overwrite,rename

  是否允许用户执行上述操作,语法类似于chmod [yes/no] [用户类型]。例如,想禁止
匿名用户和guest用户更改服务器上的文件,可以使用:

  chmod           no              guest,anonymous

  delete          no              guest,anonymous

  overwrite       no              guest,anonymous

  rename          no              guest,anonymous

  compress,tar

  这是两个古怪的功能,它可以允许一个文件在被下载之前先解压或者先压缩,语法有
点类似于compress [yes/no] [用户类型]。这样可以让没有tar或者gzip程序的用户也能
够展开这些文件,但是这需要配置/etc/ftpconversions文件。实际上现在这两个功能几
乎没有任何意义,你就自己看个乐子吧。man ftpconversions得到更多的信息。

  passwd-check

  对匿名用户的口令检验的方式,格式是passwd-check [规则] [处理方式]。规则可以
是三个选项之一,即none,trial或者rfc822。如同你知道的那样,匿名ftp登录的时候
需要输入一个email地址作为口令,none表示根本不进行检验,trial表示这个地址中至
少要有一个@符号,rfc822要求最严,要求必须看上去是一个正确的email账号(然而,
反正任何人都可以编造一个假的,不是吗?)。处理方式可以是warn或者enforce。在w
arn的情况下,输入不合法信息的匿名用户仍然可以登录,但是会显示一条错误信息,而
enforce将强迫你输入一个合乎规则的字符串。

  upload

  指定匿名用户上传文件的方式,语法是upload [目录] [上载位置] [yes/no] [uid]
[gid] [mode] [dirs/nodirs]

  目录是这个upload子句影响的目录,通常我们直接把它设置成匿名用户的宿主目录;
上载目录是相对于前面定义的那个目录的上载目录的位置,yes或no这个开关设定[上载
位置]目录是否可以上载,uid/gid/mode表示上载后文件的属主,组名和属性,dirs/no
dirs则确定用户是否可以在这个目录里建立子目录。

  例如,匿名用户的宿主目录为/ftp,要把/ftp/incoming当成上载目录,而且可以建立
子目录,上传的文件属于ftp,组为ftp,属性0644,允许创建目录,那么可以设置

  upload /ftp /incoming* yes ftp ftp 0644 dirs

  注意/incoming*,这表示incoming各个子目录也可以上载。

  为了使上载成功,需要将/ftp/incoming的属性设置为0777。

  下面是一个范例性的ftpaccess文件:

  class   all   real,guest,anonymous  *

  email root@localhost

  loginfails 5

  message /welcome.msg            login

  message .message                cwd=*

  compress        yes             all

  tar             yes             all

  chmod  no  guest,anonymous

  delete  no  guest,anonymous

  overwrite no  guest,anonymous

  rename  no  guest,anonymous

  log transfers anonymous,real inbound,outbound

  passwd-check rfc822 warn

  upload  /ftp  /incoming*       yes  ftp  ftp  0644 dirs


  下一个比较重要的配置文件是/etc/ftphosts,它用来定义一些地址可以或者不能使用
ftp,语法是allow [用户名] [地址表] 或者 deny [用户名] [地址表],例如allow us
er1 10.0.0.0/8。

  /etc/ftpusers用来定义禁止使用ftp服务的用户,例如,在/etc/ftpusers中写上roo
t一行将禁止root用户使用ftp。

  6.2.2 其他的服务器

  wu-ftpd是最常用的ftp服务器程序,但是,也存在许多其他的ftp服务程序,例如pro
ftpd和beroftpd。

  BeroFTPD实际是wu-ftpd的一个衍生程序,实际上,它和wu-ftpd几乎是一样的,但是
支持一些新的功能。例如限制用户每次下载的字节数等等,组管理,虚拟服务器等等。
要使用BeroFTPD,必须先安装这个产品,我们不想详细地介绍这个产品,你应该下载它
的源代码并且自己编译这个程序,与wu-ftpd的主要差别在于你必须谨慎地配置它的各个
目录。特别地,我们总是建议自己编译源代码:

  ./configure

  make

  make install

  BeroFTPD的配置文件和wu-ftp兼容,如果你愿意,可以直接把原来的/etc/ftpaccess
文件拷贝到/etc下面,然后更改/etc/inetd.conf文件,将有关ftp的行改成:

  ftp     stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/BeroFTPD

  BeroFTPD是编译出的服务程序的名字。然后重新启动inetd就可以工作了。不过必须注
意,BeroFTPD不使用/etc/ftpusers文件!

  BeroFTPD有一些非常详细的手册页面,如man ftpd,man ftpaccess等等,如果需要进
一步了解它的功能,可以参考联机手册。

  另外一个非常常用的服务器程序是proftpd,详细的资料请自己参考其文档。




--
当我越过无尽虚空的时候,我看见星辰的欲望,光荣和毁灭,这是光辉世界的宿命,
一切的一切,最终必将落入黑暗和虚无。
所以,我随着星光飞翔,去逃脱必然的终结,也许有一天,我将回到世界的原初,
等待新的星辰的诞生。
尘埃是星的起源,星的终结。


※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.112.90.20]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.115]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店