标题:
架设FTP服务器
[打印本页]
作者:
caopengly
时间:
2007-7-6 22:01
标题:
架设FTP服务器
在Internet上FTP(File Transfer Protocol,文件传输协议)扮演着十分重要的角色。我们可以通过FTP与远程机器传输交换文件数据,下载或上传最新的软件。基本的FTP服务器根据服务的对象可以分为两种,一种是Unix(当然也包括Linux)系统基本的FTP服务器,使用者是服务器上合法的用户;而另一种是匿名FTP服务器(Anonmous FTP Service),任何人只要使用anonmous或ftp帐号并提供电子邮件地址作为口令就可以使用FTP服务。
对于系统中合法的用户,其登录目录为他们的home目录;如果是匿名用户登录的话,登录后会到/home/ftp这个目录中,该除非我们在该目录中存放下载文件,否则匿名FTP使用者将不能做任何事情。在本章,我们将详细地介绍FTP服务器的安装、配置以及服务器的维护。
安装FTP服务器
在Linux的发行套件中都有FTP服务器的软件包wu-ftpd(Washington University FTP server),这是目前最流行的一种免费FTP服务器软件,目前绝大多数的FTP站点都是由wu-ftpd来架设的,而wu-ftp如此流行的原因是因为它强大的功能,例如:
·可控制不同网域的机器对 FTP服务器的存取权限和访问时段。
·使用者在下载文件时,可自动对文件进行压缩或解压缩工作。
·可以记录文件上传或下载的过程。
·可以限制最高访问人数,以维持系统的最佳运行效率。
·可显示相关的信息,以便用户了解当前的接收状态。
·可暂时关闭FTP服务器,以便系统维护。
在安装系统时如果选择了wu-ftpd软件包,就会自动安装。但如果我们想要使用最新的FTP软件包的话,可以到全世界各大FTP站点下载。目前最新的版本是wu-ftpd-2.5.0,得到了wu-ftpd-2.5.0.tar.gz后,请按照我们下面的步骤进行安装。
1.将wu-ftpd-2.5.0.tar.gz复制到临时目录中并解压缩:
# tar zxvf wu-ftpd-2.5.0.tar.gz
进入解压缩产生的目录wu-ftpd-2.5.0中,在开始安装之前请仔细阅读里面的README、INSTALL等文件,以便了解安装需要注意的事项。
2.执行命令“bulid lnx”,编译wu-ftpd-2.5.0的源程序。
# ./bulid lnx
这条命令将编译Linux系统使用wu-ftpd所需的服务程序,如果一切正常的话,将产生如下几个可执行文件:
ftpd FTP服务程序
ftpshut 关闭FTP服务的程序
ftpcount 显示FTP 服务器目前连接的人数的程序
ftpwho 查看目前使用者
3.执行安装命令“make install”,将编译生成的可执行文件和man pages安装到系统中。
# make install
4. 修改/etc/inetd.conf文件,加入如下一行:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l –a
如果系统中以前安装有wu-ftpd的话,这一步可以略去不做,安装安装程序会自动更新/etc/inetd.conf文件有关ftp的记录项。
5.如果想为FTP用户提供压缩解压缩的功能,我们还需要将tar、gzip、compress、cpio、sh等可执行文件复制到/home/ftp/bin目录下。此外,还需要将ls命令复制到/home/ftp/bin中,以便使用者查看目录。
因为我们复制到/home/ftp/bin目录下的程序有可能是动态链接的,所以它们运行时还需要共享函数库,我们要将他们运行时需要用到的共享库复制到/home/frp/lib目录中。检查这些命令所需要的共享库可以使用“ldd”命令。例如对于“ls”命令,我们使用“ldd /usr/bin/ls”命令就可以得到如下的输出:
# ldd /usr/bin/ls
libc.so.6 = > /lib/libc.so.6 ( 0x40003000 )
/lib/ld-linux.so.2 = > /lib/ld-linux.so.2 ( 0x00000000 )
这样,我们就需要将/lib/libc.so.6和/lib/ld-linux.so.2复制到/home/ftp/lib目录中。其它命令所需的共享库您也可以参照上面的方法找出并复制到/home/etc/lib目录中。
接下来复制/etc/passwd和/etc/group文件到/home/ftp/etc,并删除其中任何个人用户和个人用户组的信息。基本上应该按照下面的例子修改:
#/home/ftp/etc/passwd文件
root:*:0:0:::
bin:*:1:1:::
operator:*:11:0:::
nobody:*:99:99:::
ftp:*:1000:1000:::
# /home/ftp/etc/group文件
root::0:
bin::1:
daemon::2:
sys::3:
adm::4:
ftp::1000:
6.为了确保提供FTP服务不会给我们的系统带来安全隐患,我们还需要采取以下措施:
# chmod 0555 /home/ftp
# chmod 0111 /home/ftp/bin/*
# chmod 0555 /home/ftp/lib/*
# chmid 0444 /home/ftp/etc/*
配置FTP服务器
在安装好wu-ftpd之后,我们还需要定制FTP服务器,使之实现我们上一节中提到的各种功能。为了使我们的FTP服务器实现这些功能,我们需要修改ftpusers、ftpaccess、ftpconversions、xferlog、ftpgroups、ftphosts等系统配置文件。下面我们就来看一看这些文件的功能以及配置它们的方法。
各配置文件的功能
在开始配置FTP服务器的配置文件之前,我们先来简要地介绍一下各个文件的功能。在开包后的wu-ftpd-2.5.0目录中的doc/examples目录下,我们可以找到以下这些文件的示例。
/etc/ftpaccess 一般情况下,我们最为重视的配置文件应该是“ftpaccess”,因为该文件决定着我们FTP服务器是否能够正常工作。此外,我们还可以在这个系统参数文件中设置多项有关使用权限记录,以及与信息有关的文件名称及路径。
/etc/ftpusers 决定哪些人不可以执行ftp命令来传输文件,这些帐号通常是root、bin、news以及guest等有特殊用途的帐户。
/etc/ftpconversions 配置该文件可以实现用户在通过FTP传输文件的同时,对文件进行压缩打包等处理。
/etc/ftphosts 决定哪些网络中的主机或某些用户不能访问FTP服务器的文件。
/etc/ftpgroups 该文件不是决定哪些用户组不能够访问FTP服务器,它只有在使用SITE GROUP功能时才有用。
/var/log/xferlog FTP日志文件。该文件将记录使用匿名帐户的用户所上传或下载的过的文件,该文件只是记录FTP信息,我们不需要对它进行配置。
大致了解了各个设置文件的功能以后,我们就来为您介绍这些文件中的内容以及学习如何配置。
配置/etc/ftpaccess文件
我们前面介绍的wu-ftpd的大多数功能都是在ftpaccess文件中设置的。我们无须自己编写该文件,doc/examples/ftpaccess.heavy是一个稍微修改一下就能适用于大多数FTP服务器的例子,所以下面我们将以这个示例文件为例为您介绍ftpaccess文件的配置。
# wu-ftpd-2.5.0的/etc/ftpaccess示例文件ftpaccess.heavy
#
# 设置用户登录FTP服务器时,允许输错密码的次数。
# loginfails 2表示允许用户输错两次密码,如果两次都输入
# 错误的话,FTP服务器打印“repeated login failures”的信息
# 并退出FTP会话过程。如不设置,则缺省值是5。
#
loginfails 2
#
# class是用来定义用户级别的命令,它的格式为
# class <class> <typelist> <addrglob> [ <addrglob>….]
# FTP服务器上有三种类型的使用者,分别是“real”——表示
# 在该FTP服务器上有合法帐号的用户;“guest”——表示另行
# 定义的某些使用组的使用者;“anonymous”——权限最低的匿名
# 用户。有了这三种使用者以后,在ftpaccess文件中就可以根据不
# 同的使用者设置不同的存取权限。但是,只有三种定义一般是不够
# 的,我们可以根据class的语法定义更多的控制命令。例如:
# class remote real,guest,anonymous *
# 这条class语句定义了remote中有三种不同的使用者,“*”表示网络
# 上所有的计算机,也就是说任何人都可以访问FTP服务器,一般的匿名
# FTP站点都应该有这一项。如果我们希望某台主机或网域中的机器具有
# 特殊的权限,那么我们可以设置如下的class:
# class local real,guest,anonymous localhost
# 这表示本地主机的类别被定义为local,当我们从主机连上FTP服务器上
# 时,就可以用较为特别的权限。
# 下面是ftpaccess.heavy文件指定的两个class,它们的意思是来自*.domain
# 和本地主机被归为local组,而其它的主机则是remote组。
#
class local real,guest,anonymous *.domain 0.0.0.0
class remote real,guest,anonymous *
作者:
caopengly
时间:
2007-7-6 22:01
#
# 我们可以使用limit命令设置某个时间段的FTP用户数量,如果超出了
# 规定的人数,则打印/etc/msgs/msgs.toomany文件并拒绝用户登录。例如:
# limit local 20 Any /etc/msgs/msgs.roomany
# 就是限制local这个组的机器同时间内最多允许20人连接FTP服务器,如果
# 超员,则打印/etc/msgs/msgs.toomany文件,显示当前在线人数太多。ftp的
# 说明文件都可以包含变量,在说明文件中可以使用“变量替换(magic
# sookies)”以指定的字符串代替某个变量:
# %T 本地时间
# %F CWD所在分区的剩余空间
# %C 当前工作目录
# %E 定义在ftpaccess文件中维护者的电子邮件地址
# %R 远端主机名称
# %L 本地主机名称
# %U 登录时所给的用户名称
# %M 该class允许的最大使用者数目
# %N 该class目前的使用者数目
#
# 我们可以利用这些变量编辑一个显示信息非常完善的说明文件。下面的
# 例子是设置当local用户在任何时候不能超过20人,remote用户在周六
# 周日的18:00到6:00不能超过100人,否则将显示/etc/msgs目录下的
# msg.toomany文件的内容。
#
limit local 20 Any /etc/msgs/msg.toomany
limit remote 100 SaSu|Any1800-0600 /etc/msgs/msg.toomany
limit remote 60 Any /etc/msgs/msg.toomany
#
# readme命令的作用是指定用户登录或进行其它操作(如更换目录)时
# FTP服务器提示用户阅读的文件。
#
readme README* login
readme README* cwd=*
#
# messages命令主要是设置一些FTP的显示信息,如下面的“message
# /welcome.msg login”就是代表用户登录时,将显示/home/ftp目录下的
# welcome.msg作为进站画面。我们要提醒您的是FTP服务器都是以
# /home/ftp这个目录作为根目录的,所以要写成/welcome.msg。而
# “message .message cwd=*”则是定义用户在更换目录时将显示在目录
# 下的文件。
#
message /welcome.msg login
message .message cwd=*
#
# 下面定义的允许从local和remote登录的机器在传输文件时,可执行compress
# 压缩文件或使用tar命令将多个文件打包成一个文件。
#
compress yes local remote
tar yes local remote
#
# 是否允许通过SITE GROUP和SITE GPASS命令适用秘密文件
# allow use of private file for SITE GROUP and SITE GPASS?
#
private yes
#
# 设置密码检查的规则。FTP服务器将要求匿名用户使用其电子邮件
# 地址作为密码,可是有人还是会胡乱输入,所以我们可以使用passwd-check
# 来查看用户是否输入一个类似于user@hostname的E-mail地址:none表
# 示不进行密码检查; trivial表示密码必须含有“@”;而使用rfc822时,
# 表示密码必须满足rfc822规定的地址。当密码不合要求时,warn将给予
# 警告,但依然允许他们登录,而enforce则表示警告并使用户退出。
#
# passwd-check <none|trivial|rfc822> [<enforce|warn>]
passwd-check rfc822 warn
#
# log commands <typelist>记录<typelist>类型(可以是anonymous、
# guest和real)用户使用的命令。Log transfer <typelist> <directions>
# 记录<typelist>类型的用户做的<directions>(可以为inbound传进服务器、
# outbound传出服务器)方向的文件传输。
#
log commands real
log transfers anonymous,real inbound,outbound
#
# 如果shutdown<path>指定的文件存在,FTP服务器将定期检查<path>文件
# 以查看服务器是否预定关闭。<path>文件的格式为:
# <year> <month> <day> <hour> <minute> <deny_offset> <disc_offset> <text>
# <deny_offset>和<disc_offset>的意思是在服务器关闭前多长时间新的登录
# 请求和现存的连接将被拒绝和终止。<text>是对拒绝连接的用户的一段信息。
# 如:
# 1999 10 25 00:00 0010 0005
# System shutdown at %s
# 表示1999年10月25日00:00关闭FTP服务器,10分钟以前拒绝连接,5分钟
# 以前中断正在连接的FTP服务。外部程序ftpshut可以用来产生<path>文件,
# 例如上面的文件可以通过如下的命令来产生:
# ftpshut 0000
#
shutdown /etc/shutmsg
#
# 设置用户在FTP服务器上可以使用的命令,我们可以看到下面所有的
# 命令后面都是“no”,也就是说guest用户不能使用delete、overwrite、
# rename命令,而anonymous则都不能使用。只有real用户可以使用这些命令。
# all the following default to "yes" for everybody
#
delete no guest,anonymous # delete permission?
overwrite no guest,anonymous # overwrite permission?
rename no guest,anonymous # rename permission?
chmod no anonymous # chmod permission?
umask no anonymous # umask permission?
#
# 设置用户上传文件的目录。下面例子中/var/ftp目录下的/incoming目录可以
# 用来上传文件,上传文件的属主是root,组别是daemon,读取权限是0600,
# dirs表示在/incoming目录中可以创建子目录。
# specify the upload directory information
#
upload /var/ftp * no nobody nogroup 0000 nodirs
upload /var/ftp /bin no
upload /var/ftp /etc no
upload /var/ftp /incoming yes root daemon 0600 dirs
#
# 为/incoming目录设置路径别名为inc:,用户在任何时候只要使用命令
# “cd inc:”就可以到达/incoming目录。
# directory aliases... [note, the ":" is not required]
#
alias inc: /incoming
# cdpath主要定义在改变目录时使用的搜索路径。如果我们定义:
# cdpath /incoming/test、cdpath /pub、cdpath /,那么用户在任意路径
# 随便cd到一个目录,比如cd test,那么将依次搜寻:
# /incoming/test
# /pub/test
# /test
# 以寻找一个符合test目录的路径。
#
cdpath /incoming
cdpath /pub
cdpath /
#
# path-filter的功能是检查用户上传文件的文件名是否合法,如下面
# 第一条命令就是指定所有的匿名用户上传文件的文件名只能是以
# A-Z、a-z、0-9以及“._-”组成,而不能以一个“.”或是一个“-”开始。
# 如果文件名不合法,将显示/etc/pathmsg给该用户。
#
path-filter anonymous /etc/pathmsg ^[-A-Za-z0-9_.]*$ ^. ^-
path-filter guest /etc/pathmsg ^[-A-Za-z0-9_.]*$ ^. ^-
#
# 设置guest用户
# specify which group of users will be treated as "guests".
#
guestgroup ftponly
#
# FTP服务器管理员的邮件地址
#
email user@hostname
以上是一些ftpaccess常用的设置,您也可以参考ftpaccess的man pagse来获得更详细的配置信息。
配置/etc/ftpusers和/etc/ftphosts文件
通过ftpusers文件,我们可以限制系统中有哪些用户不能使用ftp服务,ftphosts文件与之类似,所不同的是该文件中记录的是不能访问FTP服务器的主机。通常这样做的目的都是出于系统安全的考虑。Wu-ftpd为我们准备有这两个文件的示例,我们可以在examples 目录中找到它们。下面是ftpusers文件设置的例子:
# 禁止使用FTP服务的用户
root
bin
boot
daemon
digital
field
gateway
guest
nobody
operator
ris
sccs
sys
uucp
作者:
caopengly
时间:
2007-7-6 22:02
#
# 我们可以使用limit命令设置某个时间段的FTP用户数量,如果超出了
# 规定的人数,则打印/etc/msgs/msgs.toomany文件并拒绝用户登录。例如:
# limit local 20 Any /etc/msgs/msgs.roomany
# 就是限制local这个组的机器同时间内最多允许20人连接FTP服务器,如果
# 超员,则打印/etc/msgs/msgs.toomany文件,显示当前在线人数太多。ftp的
# 说明文件都可以包含变量,在说明文件中可以使用“变量替换(magic
# sookies)”以指定的字符串代替某个变量:
# %T 本地时间
# %F CWD所在分区的剩余空间
# %C 当前工作目录
# %E 定义在ftpaccess文件中维护者的电子邮件地址
# %R 远端主机名称
# %L 本地主机名称
# %U 登录时所给的用户名称
# %M 该class允许的最大使用者数目
# %N 该class目前的使用者数目
#
# 我们可以利用这些变量编辑一个显示信息非常完善的说明文件。下面的
# 例子是设置当local用户在任何时候不能超过20人,remote用户在周六
# 周日的18:00到6:00不能超过100人,否则将显示/etc/msgs目录下的
# msg.toomany文件的内容。
#
limit local 20 Any /etc/msgs/msg.toomany
limit remote 100 SaSu|Any1800-0600 /etc/msgs/msg.toomany
limit remote 60 Any /etc/msgs/msg.toomany
#
# readme命令的作用是指定用户登录或进行其它操作(如更换目录)时
# FTP服务器提示用户阅读的文件。
#
readme README* login
readme README* cwd=*
#
# messages命令主要是设置一些FTP的显示信息,如下面的“message
# /welcome.msg login”就是代表用户登录时,将显示/home/ftp目录下的
# welcome.msg作为进站画面。我们要提醒您的是FTP服务器都是以
# /home/ftp这个目录作为根目录的,所以要写成/welcome.msg。而
# “message .message cwd=*”则是定义用户在更换目录时将显示在目录
# 下的文件。
#
message /welcome.msg login
message .message cwd=*
#
# 下面定义的允许从local和remote登录的机器在传输文件时,可执行compress
# 压缩文件或使用tar命令将多个文件打包成一个文件。
#
compress yes local remote
tar yes local remote
#
# 是否允许通过SITE GROUP和SITE GPASS命令适用秘密文件
# allow use of private file for SITE GROUP and SITE GPASS?
#
private yes
#
# 设置密码检查的规则。FTP服务器将要求匿名用户使用其电子邮件
# 地址作为密码,可是有人还是会胡乱输入,所以我们可以使用passwd-check
# 来查看用户是否输入一个类似于user@hostname的E-mail地址:none表
# 示不进行密码检查; trivial表示密码必须含有“@”;而使用rfc822时,
# 表示密码必须满足rfc822规定的地址。当密码不合要求时,warn将给予
# 警告,但依然允许他们登录,而enforce则表示警告并使用户退出。
#
# passwd-check <none|trivial|rfc822> [<enforce|warn>]
passwd-check rfc822 warn
#
# log commands <typelist>记录<typelist>类型(可以是anonymous、
# guest和real)用户使用的命令。Log transfer <typelist> <directions>
# 记录<typelist>类型的用户做的<directions>(可以为inbound传进服务器、
# outbound传出服务器)方向的文件传输。
#
log commands real
log transfers anonymous,real inbound,outbound
#
# 如果shutdown<path>指定的文件存在,FTP服务器将定期检查<path>文件
# 以查看服务器是否预定关闭。<path>文件的格式为:
# <year> <month> <day> <hour> <minute> <deny_offset> <disc_offset> <text>
# <deny_offset>和<disc_offset>的意思是在服务器关闭前多长时间新的登录
# 请求和现存的连接将被拒绝和终止。<text>是对拒绝连接的用户的一段信息。
# 如:
# 1999 10 25 00:00 0010 0005
# System shutdown at %s
# 表示1999年10月25日00:00关闭FTP服务器,10分钟以前拒绝连接,5分钟
# 以前中断正在连接的FTP服务。外部程序ftpshut可以用来产生<path>文件,
# 例如上面的文件可以通过如下的命令来产生:
# ftpshut 0000
#
shutdown /etc/shutmsg
#
# 设置用户在FTP服务器上可以使用的命令,我们可以看到下面所有的
# 命令后面都是“no”,也就是说guest用户不能使用delete、overwrite、
# rename命令,而anonymous则都不能使用。只有real用户可以使用这些命令。
# all the following default to "yes" for everybody
#
delete no guest,anonymous # delete permission?
overwrite no guest,anonymous # overwrite permission?
rename no guest,anonymous # rename permission?
chmod no anonymous # chmod permission?
umask no anonymous # umask permission?
#
# 设置用户上传文件的目录。下面例子中/var/ftp目录下的/incoming目录可以
# 用来上传文件,上传文件的属主是root,组别是daemon,读取权限是0600,
# dirs表示在/incoming目录中可以创建子目录。
# specify the upload directory information
#
upload /var/ftp * no nobody nogroup 0000 nodirs
upload /var/ftp /bin no
upload /var/ftp /etc no
upload /var/ftp /incoming yes root daemon 0600 dirs
#
# 为/incoming目录设置路径别名为inc:,用户在任何时候只要使用命令
# “cd inc:”就可以到达/incoming目录。
# directory aliases... [note, the ":" is not required]
#
alias inc: /incoming
# cdpath主要定义在改变目录时使用的搜索路径。如果我们定义:
# cdpath /incoming/test、cdpath /pub、cdpath /,那么用户在任意路径
# 随便cd到一个目录,比如cd test,那么将依次搜寻:
# /incoming/test
# /pub/test
# /test
# 以寻找一个符合test目录的路径。
#
cdpath /incoming
cdpath /pub
cdpath /
#
# path-filter的功能是检查用户上传文件的文件名是否合法,如下面
# 第一条命令就是指定所有的匿名用户上传文件的文件名只能是以
# A-Z、a-z、0-9以及“._-”组成,而不能以一个“.”或是一个“-”开始。
# 如果文件名不合法,将显示/etc/pathmsg给该用户。
#
path-filter anonymous /etc/pathmsg ^[-A-Za-z0-9_.]*$ ^. ^-
path-filter guest /etc/pathmsg ^[-A-Za-z0-9_.]*$ ^. ^-
#
# 设置guest用户
# specify which group of users will be treated as "guests".
#
guestgroup ftponly
#
# FTP服务器管理员的邮件地址
#
email user@hostname
以上是一些ftpaccess常用的设置,您也可以参考ftpaccess的man pagse来获得更详细的配置信息。
配置/etc/ftpusers和/etc/ftphosts文件
通过ftpusers文件,我们可以限制系统中有哪些用户不能使用ftp服务,ftphosts文件与之类似,所不同的是该文件中记录的是不能访问FTP服务器的主机。通常这样做的目的都是出于系统安全的考虑。Wu-ftpd为我们准备有这两个文件的示例,我们可以在examples 目录中找到它们。下面是ftpusers文件设置的例子:
# 禁止使用FTP服务的用户
root
bin
boot
daemon
digital
field
gateway
guest
nobody
operator
ris
sccs
sys
uucp
作者:
caopengly
时间:
2007-7-6 22:02
限制这些用户使用FTP服务器主要是基于系统安全的考虑,避免权利过大的用户(如root、ftpadm)登录FTP服务器和避免使用系统命令作为帐号(如shutdown、sync),以避免系统管理上的困惑。我们可以根据自己使用的需要,向该文件中增加或删除用户并将它复制到/etc目录中。
如果我们要架设的是匿名FTP服务器,那么通常不需要设置ftphosts文件,对于其它类型的FTP服务器可以参考examples/ftphosts文件的格式结合自己的情况加以修改,然后复制到/etc目录中即可。下面是examples/ftphosts文件,该文件允许网络somehost.domain中的用户ftp访问FTP服务器(somehost.domain可以是IP地址或域名)而禁止网络otherhost.domain和网络131.211.32.*中的用户fred使用FTP服务。
#
# ftphosts文件配置示例,allow和deny的格式分别为:
# allow <username> <hostname or domain>
# deny <username> <hostname or domain>
#
# 以“#”开头的均为注释,空行将被忽略
#
allow ftp somehost.domain
deny fred otherhost.domain 131.211.32.*
配置/etc/ftpconversions文件
ftpconversions文件主要定义用户从FTP服务器中下载文件时对文件进行格式转换的规则。例如压缩、解压缩、打包和开包等操作,这样用户就不必为.tar.gz、.tgz、.Z、.z之类的文件伤脑筋了。Ftpconversions文件的格式初看上去很复杂,不过不用担心,/examples目录中也有该文件的例子,我们只要原封不动的将它复制到/etc目录中就能满足我们的使用需要了。下面让我们来看看ftpconversions文件中各个记录项,有关各项的说明我们罗列在表14-1中:
#
# ftpconversions文件示例
#
#
:.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
: : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
: : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
: : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
: : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
: : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
: : :.crc:/bin/cksum %s:T_REG::CKSUM
: : :.md5:/bin/md5sum %s:T_REG::MD5SUM
表1 ftpconversions文件各项说明对照表
真实文件名
目标文件名
命令操作
<filename>.Z
<filename>
传递前使用comprss –d命令压缩
<filename>.gz
<filename>
传递前使用gzip –d命令压缩
<filename>
<filename>.Z
传递前使用compress 命令压缩
<filename>
<filename>.gz
传递前使用gzip –9命令压缩
<filename>
<filename>.tar
传递前使用tar –cf命令打包
<filename>
<filename>.tar.Z
传递前使用tar –cZf命令打包并压缩
<filename>
<filename>tar.gz
传递前使用tar –czf命令打包并压缩
<directory>
<directory>.tar.Z
传递前使用tar –cZf命令对目录打包并压缩
<directory>
<directory>.tar.gz
传递前使用tar –czf命令对目录打包并压缩
Ftpconversions文件基本上把常用的压缩,打包命令都包括在内了,我们只要将它复制到/etc目录中,以后只要有人访问我们的FTP服务器,FTP服务程序就会根据用户的需要执行压缩或打包的命令。例如,用户想下载目录Howto中所有的文件,那么他不必使用mget命令,而只要使用get Howto.tar.gz,这时wu-ftpd就会将该目录打包压缩并发送到用户的机器上了。所以使用该文件可以完成压缩传递的数据量,减少传输时间等作用。此外ftpconversions文件中定义的可执行文件的位置/bin指的都是/home/ftp/bin而不是Lnux /目录下的bin,所以请检查/home/ftp/bin目录中有无上述命令,如果没有还需要将这些程序复制到该目录中。
截止到这里,匿名FTP服务器的架设工作基本上就完成了,我们可以用ftp命令连接自己的服务器,检查合法用户和匿名用户的连接情况以及各个目录的权限是否正确。之后就可以准备FTP服务的开张了。
FTP镜像站点的维护
架设FTP服务器的目的是要在服务器上存放一些共享或自由软件让用户下载,然而各式各样的软件总是处在不断升级换代的过程中,为了能让用户经常光临我们的服务器,我们应该经常维护FTP服务器,使我们拥有最新版本的软件。
获得软件的方法之一是自己动手在各大FTP站点上搜寻下载,这种方法在我们所关注的软件数目不多、软件更新速度不太快的情况下还可以应付。但是当要维护一个具有软件种类繁多,数量庞大的大型FTP服务器时,这样做就不但费时费力,而且容易出错,因而也就不适合了。另一种投机的办法是使用一些镜像软件,如mirror、ftpmirror等等。有了它们,我们可以在对存放某些常用软件的FTP站点的相应目录在本地建立镜像目录,这些软件可以运行在后台并定期对远程FTP站点进行定期检查,如果发现远程目录下的文件有所更新,则立即对本地目录中相应的文件进行更新,而对远程目录中未作更新的文件在本地则不做任何处理,这样就避免了不必要的重复传输。
Mirror最早是由Lee McLoughlin用Perl语言编写的一种perl脚本。最初,mirror只能运行在Unix系统上,但是从2.9版本以后,该软件也可以运行于Windows95和Windows NT系统上。mirror的功能主要是在本地端主机与远程主机之间使用FTP通信协议,并复制远程主机上的整个目录结构以及其中的内容。所以mirror在传输文件之前,会比较文件建立的时间和文件的大小,以避免拷贝不必要的文件。如果本地和远程主机的目录中有相同文件名的文件则不读取,或指定读取文件名含有特殊字符串的文件等功能。除此之外,mirror还可以选择性的压缩以及分割文件,所以mirror非常适合任何想通过FTP站传输大量文件的人使用。下面我们将介绍mirror的安装和使用。
mirror的安装
因为mirror是用perl脚本编写的脚本文件,所以在安装mirror之前,我们必须确保系统中已经安装有perl(perl命令通常位于/usr/bin目录下)。目前各种发行版本的Linux都随盘附有perl程序的软件包,如果系统中没有安装的话,可以从光盘中安装,或直接去
www.perl.com
下载最新的perl软件。
安装好perl之后,就可以开始安装mirror了。目前最新的mirror的版本是mirror-2.9(需要4或更高版本的perl程序),我们可以去下列站点下载:
ftp://sunsite.org.uk/packages/mirror/mirror.tar.gz
; (http方式)
ftp://sunsite.org.uk/packages/mirror/mirror.zip
(http方式,for Windows的mirror)
我们可以到下面的站点查看是否有更新的版本出现:
http://sunsite.org.uk/packages/mirror/
下面是我们列出的一些mirror的镜像站点,您可以根据您的情况选择离您内较近,下载速度较快的站点来下载:
USA
ftp://ftp.cs.columbia.edu/archives/perl/mirror/
Poland
ftp://giswitch.sggw.waw.pl/pub/unix/mirror/
Japan
ftp://SunSITE.sut.ac.jp/pub/archives/packages/mirror/
(http方式)
将下载的mirror-2.9.tar.gz复制到一个合适的目录,如/usr/local/lib然后解压缩:
# cp mirror-2.9.tar.gz /usr/local/lib
# cd /usr/local/lib
# tar zxvf mirror-2.9.tar.gz
开包以后,就会生成mirror/这个目录。因为mirror是一个脚本,所以不需要编译,我们直接就可以拿来使用。Mirror其实是一个链接文件,它link到文件mirror.pl,在使用mirror之前,我们建议您最好将mirror.pl文件中的“$extra_path”和“$big_temp”这两个变量所指定的路径该成符合您的系统需要,如:
$extra_path=/usr/local/bin:/usr/bin:/bin;/usr/ucb:/etc:/usr/etc/:/usr/local/etc’;
$big_temp=’/var/tmp’;
之后使用“ln”命令将mirror.pl这个perl脚本链接到/usr/local/bin目录中:
# ln –s /usr/local/lib/mirror/mirror.pl /usr/local/bin/mirror
这样mirror就安装完毕了。
mirror的使用
调用mirror有两种方式:
# mirror [参数] -gsite:pathname
# mirror [参数] [package-files]
第一种方法是复制远程主机上的一个目录到本地主机用户当前所在目录。第二中方式是由mirror读取我们编辑的配置文件(package-files),根据我们在该文件中的设置复制远程主机的目录文件到我们设定的目录中。在我们下达mirror命令的目录中如果有mirror的配置文件mirror.defailt存在的话,则执行mirror时会首先载入该文件中的内容为所有其它的配置文件提供初始化设置,所以我们需要修改mirror.defaults文件的内容,一般需要修改以下几个地方:
hostname 本地主机名
local_dir 本地下载文件存放目录
remote_password 设置登录用的密码,通常使用完整的E-mail地址
虽然mirror有很多的命令行参数,但是它们中的大多数可能只会用到一两次。如果我们打算维护一个镜像站点,那么最好的做法是将所有的细节问题都记录在配置文件package file中,然后再运行mirror读取该文件中的内容。我们最常用的参数可能是-n和-d。下面就来看看mirror的各种参数:
-d 允许以调试方式运行mirror。如果使用该参数超过一次,那么调试的等级就会递增(例如:-d –d )。目前支持的最大调试等级是四级。
-n 只是比较本地目录与远程目录的不同,不会进行任何文件传输。请将调试等级设为2级,这样我们就可以看到mirror工作的过程。
-g site:path 节点:路径。取得给定节点上path中的所有文件。在path的后面需要加上“/”,否则我们得到的只是该mirror目录的一份目录列表,而不是整个目录中的所有文件。
-p package 当使用多个package文件时。只选用给定的package。我们可以多次使用该选项,以使我们选定的packages都可以被mirrored,如果不使用该参数,那么将mirror载入所有的packages文件。
-R package 与-p参数类似,但将跳过所有的packages文件,直到它找到给定的package为止。如果我们启动mirror后,中途失败时,该选项就会非常有用,它将使mirror 从断点处继续开始mirror。
-F 使用临时dbm(数据库)文件以存放有关信息。如果我们要mirror一个很大的文件时,就需要使用这个参数。
-r 相当于-k recursive=false
-v 显示mirror的版本信息并退出。
-T 强制将本地镜像目录中所有文件的时间复位成与远程主机相同。一般只用于初始化以其它方式(如CD-ROM)获得文件的目录。
-Ufilename 将所有传输的文件记录到我们给定的文件名中。
-k key=value 覆盖任何默认的参数。
-m 相当于-k mode_copy=true。
-t 相当于-k text_mode=true。
-f 相当于-k force=true。
-s site 相当于-k site=site。
-u user 相当于-k remote_user=user,我们这时就可以提供一个进入远主机的密码。
-L 仅仅是打印一个精致的输入译本然后退出。
如果我们使用命令行的方式来mirror的话,则所有mirror回来的文件都将存放在我们当前所在的目录中。所以在执行mirror命令之前,我们一定要选择好合适的目录,再进行传输。举例来说,如果想将
ftp://ftp.openunix.org/
这个站点的 /pub/bluepoint/starpreview/这个目录中的文件全部mirror回来,那么我们可以先在/home/ftp/pub目录下建造一个bluepoint/starpreview/目录,然后进入该目录并执行:
# mirror –d –d –g ftp.openunix.org:/pub/bluepoint/starpreview/&
这样就可以将ftp.openunix.org/pub/bluepoint/starpreview/目录中所有的文件都mirror回来了。要注意的是,在上面这条命令中的starpreview后一定要有“/”,否则我们将得到ftp.openunix.org上的一个完整目录列表。
在多数情况下,我们都是使用package文件来执行mirror的。这样我们可以为我们要mirror的每一个FTP站点编辑一个package文件,然后根据需要使用不同的文件来mirror各个FTP站点,编辑package的方法如下:
1.在合适的位置,如/usr/local/lib/mirror建立一个专门用来存放package文件的目录:
# mkdir /usr/local/lib/mirror/pack(目录名可任选)
2.如果要mirror ftp.openunix.org这个FTP站点下的/pub/linux/,那么我们可以在pack目录下创建一个open_linux的文件,而具体的内容可以参考下面的例子:
#
# 使用package指定mirror使用的配置文件为open_linux
package = open_linux
# 指定我们要mirror的FTP站点,用主机名或IP地址均可
site = ftp.openunix.org
# 指定登录身份,通常都是匿名登录,所以我们可以使用ftp或
# anonymous
remote_account = ftp
# 指定登录需要的密码,因为是匿名登录所以我们需要使用电子
# 邮件地址作为登录FTP服务器的密码
remote_password = user@somewhere.com
# 指定我们要mirroe的目录
remote_dir = /pub/linux
# 指定存放文件的目录
local_dir = /home/ftp/pub/linux/
# 指定文件传输的方式,以递归方式mirror该目录中的所有子目录
recursive = true
# 在文件传回本地之前,将文件压缩
compress_patt = true
以上就是一般的package文件的设置,如果想了解更多的内容的话,可以参考mirror的doc/ 下的各种文档资料。设置好package文件之后,我们可以在/usr/local/lib/mirror目录中执行:
# mirror –d –d pack/open_linux &
这样mirror就可以在后台执行它的工作了。在我们首次执行mirror的时候,可能会花很长的时间才能将FTP站点的各种文件都mirror到我们自己的服务器上来,但是完成之后之后,mirror以后只是读取两个站点之间不同的文件而已,这样会节省我们很多的时间。在mirror可以正常运作之后,我们可以将它放到crontab中,然后由时钟守护进程自动定时为我们执行mirror操作:
# crontab –e
15 3 * * 2,6 mirror –d –d /usr/local/lib/pack/open_linux
这表示“每星期二和星期六的03:15 执行mirror –d –d open_linux。这样就能保证我们的FTP服务器上始终都能有最新的软件了。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0