FTP是文件传输协议的简称,它定义了在网络上从一台计算机向另一台计算机进行文件传输的方式,几乎所有的常用系统平台都提供FTP的服务程序和客户程序,Linux使用的FTP服务器是由华盛顿大学开发的wu-ftpd服务程序。
使用自己的帐号的用户进入系统后位于自己的主目录,而匿名用户进入系统后缺省位于/home/ftp,之后FTP将执行一个系统调用(chroot),将FTP的根目录变成用户的主目录,对系统中其他目录的访问将被拒绝。但这种改变会导致服务器无法看到一些必要的文件,象/etc/passwd和/bin/ls等。为解决这一问题,anonftp包在/home/ftp目录下创建了bin、etc和lib目录,并在其中放置了必要的库和程序。
三、 配置FTP
FTP的配置文件共有六个:/etc/ftpusers; /etc/ftpgroups; /etc/ftphosts; /etc/ftpaccess; /etc/xferlog; /etc/ftpconversions。下面对这些文件做详细的介绍。
1./etc/ftpusers
此文件就是一个列表,每一行指定一个特殊的用户,缺省有14行。被列在此文件中的用户将被禁止访问FTP服务器。原因是这些用户具有的特殊权限将威胁到FTP服务器的安全。
2./etc/ftpgroups
在这个文件中可以指定一个组,这个组的成员被预先定义可以对FTP服务器进行访问。文件的格式一般为: #test : ENCRYPTED PASSWORD HERE : archive
访问组名:加密口令 :访问组名在/etc/groups中的对应组名
这里采用的加密程序是CRYPT。 字串2
3./etc/ftpaccess
/etc/ftpaccess文件是控制那些用户可以访问服务器的主要配置文件,文件中的每一行对一个属性进行定义,或者定义属性的值。下面对文件中常用的命令进行讲解。
(1) class
class [ … …]
用来定义可以访问FTP服务器的一类用户。其中classname是被定义的类名,typelist是被允许进入这一类的用户类型,addrglob是被允许进入这一类的IP地址的范围。其中的typelist是一个由逗号隔开的列表,可能的值有三个:anonymous、guest和real,其分别是anonymous意味着只访问服务器上的公共文件,guest是来宾帐号,real是在FTP服务器上有自己的帐号的用户。Addrglob如果是*,则代表所有的站点。 字串6
(2) deny
此命令可以根据主机名或IP地址来决定是否对他们提供服务。其格式为:
deny
其中addrglob表示被拒绝提供服务的地址,message_file则指定了一个文件,当一台主机被拒绝提供服务时,将向该主机显示此文件。
此命令还可以根据主机名是否能通过DNS反向解析来决定是否提供服务,用!nameserved作为addrglob的内容即可。
(3) loginfails
此命令用来决定让客户机进行多少次注册尝试,缺省是5。
(4) email
此命令用来指定一个管理员的E-mail地址,缺省时是root@localhost。
(5) message
此命令决定了当用户进入系统或某一特定目录时,发送什么消息给用户。其格式如下:
message { … …}
其中path是路径名,when是显示消息的条件,可以有两个值,一个是LOGIN(用户一注册成功就显示指定的消息),另一个是CWD=< dir>(当用户进入< dir>时显示指定的消息)。Class则是本命令所适用的类,此项是可选的。
本命令可以重复使用。
(6) readme
此命令指定了一个条件,在这一条件下,通知用户当前目录下的一指定文件被最后更改。其格式为:
readme { }
其各项的意义与message命令类似。当用户为匿名用户时,文件必须查对于用户的FTP目录。
(7) log transfers
此命令可以记录用户的所有文件传输。其格式为:
log transfers
其中typelist是一个指定哪种用户将被记录的列表(anonymous、guest或real),directions是一个指定哪种方向的传输将被记录的列表。记录的结果存放在/var/log/xferlog文件中。
(8) compress
compress是在FTP服务程序中提供的一个允许服务器对文件进行压缩或解压的工具。其格式为:
compress
其中switch的值(yes or no)决定了是否打开这一特性,classglob指定了这一压缩选项所适用的类。
(9) tar
此命令用来通知服务器是否为用户打开文件。其格式如下:
tar
其各项的意义与compress类似。
注意:以上两个特性由/etc/ftpconversions文件控制,参见/etc/ftpconversions文件。
(10) shutdown
此命令使服务器定期检查一个指定的文件以确定服务器是否被关闭,被指定的文件对于root应该是可读的。其格式为:
shutdown
*附:被指定的文件格式为
< day>
其中year必须是1970年之后;month 是用0至11代表1月到12 月;day是从0到30; hour是从0到23; minute是从0到59; deny_offset项用来指定服务器停止接受新连接的时间, 前两位是小时,后两位是分钟;disconnect_offset 指定了现存连接被断开的时间,格式同上;text指定了将显示给用户的一个系统关闭警告。
(11) chmod
此命令决定了用户可否改变服务器上的文件的权限。其格式为:
chmod
其中switch的值(yes or no)决定了是否打开这一特性,typelist指定了这一命令所影响的用户类型(anonymous、guest或real)。
(12) delete
此命令通知服务器用户是否能通过FTP删除位于服务器上的文件。其格式为:
delete
其中各项的意义同上。
(13) overwrite
此命令决定了FTP用户是否可以进行上载操作来替换服务器上现有的文件。其格式为:
overwrite
其中各项的意义同上。 字串2
(14) rename
此命令决定了FTP用户是否可以来对服务器上的文件进行改名操作。其格式为:
rename
其中各项的意义同上。
(15) passwd-check
passwd-check命令可用来确定如何要求作为匿名用户的e-mail地址被提义交的字符串。这一命令的格式是:
passwd-check
其中的值有三个:none(不检查口令) 、trivial(要求口令中至少有一个@符号)或rfc822(要求e-mail地址必须遵守RFC822报文标题标准);的值有两个:warn(如果用户没按strichness的要求提供口令,就发警告,但允许连接)和enforce((如果用户没按strichness的要求提供口令,就拒绝连接)。
4./etc/ftphosts
这个文件决定了用户可以从哪些主机进入系统,而另外的主机是不被允许进入的。其每行的格式如下:
命令名 < username> < addrglob>
其中命令名是allow或deny之一,是allow时允许username指定的FTP用户从addrglob所指定的地址处与服务器进行连接;而如果是deny,则拒绝username指定的FTP用户从addrglob所指定的地址处与服务器进行连接。这里的addrglob可以列出多个地址。
5./etc/ftpconversions
这是在传输时的转换文件。其格式为:
<1>:<2>:<3>:<4>:<5>:<6>:<7>:<8>
各项意义如下:
<1> 是当文件被获取时指定要被删除的前缀字符串;
<2> 是当文件被获取时指定要被删除的后缀字符串;
<3> 是文件被上传或下载时要指定被插入到文件名前面的前缀字符串;
<4> 是当执行在文件上的某一个操作完成之后被加到文件名后面的后缀字符串;
<5> 用来指定当某个文件上传或下载时将被自动运行的程序;
<6> 指定了一些能对本文件起作用的文件类型,每个类型由管道符分开,有三种类型:T_REG 、T _ASCII和T_DIR,分别代表了普通文件、ASCII文件和目录;
<7> 有三个值:O_COMPRESS、O_UNCOMPRESS和O_TAR,分别说明了是要压缩文件、解压文件还是利用tar命令。
<8> 说明了所执行的转换是什么类型的转换。
6./var/log/xferlog
这是FTP的记录文件,它存储了FTP服务器生成的所有记录。严格地说,它并不属于FTP的配置文件。