开源中文网

您的位置: 首页 > Debian Linux > 正文

《Debian服务器设置入门》系列教程之第二章:FTP服务器

来源:  作者:

1 开场白

  在五年之前,我还觉得Ftp这个东西很神秘。那时候,我身边的大部分人,甚至以为http就是互联网的全部。我们从网站下载文件,用的大多也是http连接。但是,事实上,ftp(File Transfer Protocol,文件传输协议)这个服务已经存在很长时间了,如果要提供文件下载,除了使用http的方式连接外,我们完全可以提供ftp服务,这样可以节省一些服务器资源,比如连接数什么的。ftp是专门设计用来在两台电脑之间传输数据的,可以避免太多的远端执行。尤其是,当传输的文件比较大时,ftp会比http节省资源。另外, ftp可非常方便地上传文件,而http则没有那么方便快捷。

2 选择wu-ftpd

  用apt-cache search 命令看一下,都有什么ftp服务器可以选择:

# apt-cache search ftpd

  你会发现,Debian为我们制作了很多个ftpd服务器软件包,包括 atftpd、bsd-ftpd、ftpd、oftpd、muddleftpd、proftpd、twoftpd、vsftpd、wu-ftpd等等。其中应用最广泛的,应该是wu-ftpd了,这是目前最流行的一种免费FTP服务器软件,目前绝大多数的FTP站点都是由wu-ftpd来架设的,它是当初由华盛顿大学wuarchive.wustl.edu开发出来的,是一个以效率以及稳定性为考量的程序。wu-ftp如此流行,一个重要的原因是因为它强大的功能,例如: 
  ◆ 可控制不同网域的机器对 FTP服务器的存取权限和访问时段。 
  ◆ 使用者在下载文件时,可自动对文件进行压缩或解压缩工作。 
  ◆ 可以记录文件上传或下载的过程。 
  ◆ 可以限制最高访问人数,以维持系统的最佳运行效率。 
  ◆ 可显示相关的信息,以便用户了解当前的接收状态。 
  ◆ 可暂时关闭FTP服务器,以便系统维护。
  目前Debian提供的wu-ftpd版本是2.6.2。好,我们就选择这个wu-ftpd了!


3 安装

  安装很简单,用下面的命令安装:

# apt-get install wu-ftpd

  它会问你,你想设置一个匿名ftp账号吗?输入y,回车。
  接着让你输入ftp根目录,默认是/home/ftp,我们就用默认的吧。
  然后它问你,你想创建一个目录,用来让用户上传文件吗?输入y,创建一个。
  安装程序会创建一个新的用户ftp,并把这个用户加入到一个新创建的组ftp中去。
  然后它会说:

Anonymous FTP users will only see UID and GID numbers,instead of names, because the libnss_files.so library hasn't installed.

It is not installed by default, since there is no easy way to find out what version we need to install.

If you want to install it manually, it should be palced in /home/ftp/lib,owned by root, and with permissions of 444 (r--r--r--)

  (它说由于无法判断所需的版本,libnss_files.so没有安装,要手工安装的话,到/home/ftp/lib去找。这块我还没捣鼓明白,还请高手赐教)。这里需要对初学者说明一下,系统从/etc/passwd这个文件里面读取资料,得到UID和GID,来决定用户对文件的存取权限。一会儿我们会讲到,在ftpaccess这个配置文件里,可以为某些UID的用户或者某些 GID的组设置权限。

4 配置

  其实,在安装完之后,不需要做任何配置,我们的ftp服务器已经可以使用了。如果你跟我一样是个急性子,在进行配置之前你就可以尝试登录了。这时, Debian上的普通用户,还有匿名用户都可以访问它,也可以向incoming目录上传文件,只不过看不到已经上传的文件。但是我们仍然需要做一些配置,因为我们需要定制自己的安全性。

  为了确保提供FTP服务不会给我们的系统带来安全隐患,我们首先要采取以下措施:

# chmod 555 /home/ftp
chmod 111 /home/ftp/bin/*
# chmod 555 /home/ftp/lib/*
chmid 444 /home/ftp/etc/*

4.1 配置文件介绍

  wu-ftpd的配置文件放在/etc/wu-ftpd下面,主要有:

  ftpaccess —— 这个是wu-ftpd的主配置文件,控制存取权限
  ftpconvertions —— 这个文件定义了文件压缩/解压缩转换方案
  ftpservers —— 用来设置多个IP地址和域名,以对应到不同的虚拟主机
  ftpusers —— 凡是写入这个文件里面的用户,都不能连接ftp服务器
  msg.denu —— 拒绝访问时,显示给用户的信息
  msg.nodns —— 当DNS查询失败时,显示给用户的信息
  msg.toomany —— 当连接数过多时,显示给用户的信息
  pathmsg —— 当用户使用了非法路径/文件名时,显示给用户的信息
  welcome.msg —— 当用户建立连接时,显示给用户的欢迎信息

  在/usr/share/doc/wu-ftpd/examples下面,有一些配置文件的样本,大家可以参照一下。

4.2 修改/etc/wu-ftpd/ftpaccess配置

  这个文件是wu-ftpd的主配置文件,许多重要的选项都包含在这里面,比如,要想让Debian上的用户可以访问,就必须在这个文件里面的 Class段落里面做出定义。
  下面我们按照ftpaccess文件的顺序,一段一段地介绍。平常不大用的,或者我不懂的,就不介绍了:-),要不然篇幅会非常大。

4.2.1 管理员的email地址

# 这个不多说了

email ftpadmin@misconfigured.host

4.2.2 UID/GID设置

# 设置哪些UID/GID可以、不可以使用FTP服务。这里的%-99我没搞明白,请高手指教!
#deny-uid %-99
#deny-gid %-99
#allow-uid ftp ftpadmin
#allow-gid ftp ftpadmin

4.2.3 登录失败数

# 下面设置登录5次失败后,断开连接

loginfails 5

4.2.4 目录限制

# 除了用户自己的根目录,让用户看不到别的东西。这个很关键!
# 你可以在修改这项之前先登录ftp服务器看看,然后去掉了这个#之后再登录看看,大不一样哦

restricted-uid kanaka 

4.2.5 不可执行SITE GROUP/SITE GPASS

# private决定了用户是否可以执行SITE GROUP/SITE GPASS命令
# 用这两个指令切换到/etc/ftpgroup的群组。一般而言我们不会用到这个功能,以避免安全漏洞。
#private no

4.2.6 定义用户类别——class

  由class定义的用户和IP地址才能够登录进来。FTP 服务器上有三种类型的使用者,分别是“real”——表示在该FTP服务器上有合法帐号的用户;“guest”——表示另行定义的某些使用组的使用者; “anonymous”——权限最低的匿名用户。有了这三种使用者以后,在ftpaccess文件中就可以根据不同的使用者设置不同的存取权限。但是,只有三种定义一般是不够的,我们可以根据class的语法定义更多的控制命令。

  语法是:

class <class 名称> <种类> <用户地址> [<用户地址>……]

  其中:<class 名称>则可自行设定,<种类>就是上面说的三种,<用户地址>是指ftp上来的用户会用到的IP地址。
  以下是一些例子:

# 下面这一行时系统默认的,它定义了一个名为all的class,包含三种人,允许所有IP地址的连接

class all real,guest,anonymous *

# 下面这个叫做local的class说,只有real的用户可以从本机机器连上来

class local real localhost loopback

# 下面这个叫remote的class,包含了从任何地方上来的guest和anonymous用户,但是real用户不算

class remote guest,anonymous *

# 下面这个叫rmtuser的class包含了从外面来的(除了example.com)真实用户

class rmtuser real !*.example.com

4.2.7 为各个类别的用户设置最大连接数

# 可以为每一个类别定义最大连接数,并显示不同的错误信息。下面允许30个连接。

limit all 30 Any /etc/wu-ftpd/msg.toomany

4.2.8 设置readme文件

# readme命令:指定用户登录或进行其它操作(如更换目录)时FTP服务器提示用户阅读的文件。

readme README* login
readme README* cwd=*

4.2.9 是否使用压缩

# 下面定义的允许从local和remote登录的机器在传输文件时,
# 可以执行compress压缩文件或使用tar命令将多个文件打包成一个文件。

compress yes local remote all
tar yes local remote all

4.2.10 记录日志

# 如果去掉前边的注释符号,它就会记录相应的信息。
#log commands anonymous,guest,real
#log security
#log syslog
log transfers anonymous,guest,real inbound,outbound

4.2.11 超时设置

# 下面设置:如果超过30秒没有动作,就断开anonymous的连接

limit-time anonymous 30

4.2.12 一些命令的权限

rename no anonymous # rename 权限?
delete no anonymous # delete 权限?
overwrite no anonymous # overwrite 权限?
chmod no anonymous # chmod 权限?
umask no anonymous # umask 权限?

4.2.13 匿名用户上传权限

# 全给他们加上井号,不让匿名用户上传文件

#upload /home/ftp * no
#upload /home/ftp /pub/incoming yes ftp daemon 0666 nodirs

  由于ftpd是被inetd调用的,所以,我们修改了配置文件后,不需要重新启动 wu-ftpd。
  对于普通ftp应用,修改一下上面这个文件就足够了。如果你还有更高的要求,就继续往下看。

4.3 修改/etc/wu-ftpd/
ftpusers

  我们已经说过了,只要写进这个文件里面的用户,是不能登录我们的ftp服务器的。
  限制这些用户使用FTP服务器主要是基于系统安全的考虑,避免权利过大的用户(如root、ftpadm)登录FTP服务器和避免使用系统命令作为帐号(如shutdown、sync),以避免系统管理上的困惑。我们可以根据自己使用的需要,向该文件中增加或删除用户。
  注意这个文件是/etc/ftpusers的快捷方式。下面是默认的ftpusers的内容:

# /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).

root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
nobody 

4.4 修改/etc/wu-ftpd/ftpconversions文件

  ftpconversions文件主要定义用户从FTP服务器中下载文件时对文件进行格式转换的规则。例如压缩、解压缩、打包和开包等操作,这样用户就不必为.tar.gz、.tgz、.Z、.z之类的文件伤脑筋了。 ftpconversions文件的格式初看上去很复杂,不过不用担心,我们基本上不用动它,debian为我们准备的这个配置,已经能够满足我们的使用需要了。下面让我们来看看ftpconversions文件的内容:

:.Z: : :/usr/bin/compress -d -c %s :T_REG|T_ASCII:O_UNCOMPRESS:uncompress
: : :.Z:/usr/bin/compress -c %s:T_REG:O_COMPRESS:compress
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:gunzip
: : :.gz:/bin/gzip -c9 %s:T_REG:O_COMPRESS:gzip
:.bz2: : :/usr/bin/bzip2 -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:bunzip2
: : :.bz2:/usr/bin/bzip2 -c9 %s:T_REG:O_COMPRESS:bzip2
:.zip: : :/usr/bin/zip -q -r -9 - %s:T_REG|T_DIR:O_TAR|O_COMPRESS:zip
: : :.zip:/usr/bin/unzip -q -c - %s:T_REG|T_DIR:O_TAR|O_UNCOMPRESS:unzip
: : :.tar:/bin/tar -chf - %s:T_REG|T_DIR:O_TAR:tar
: : :.tar.Z:/bin/tar -chZf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+compress
: : :.tar.gz:/bin/tar -chzf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+gzip
: : :.tgz:/bin/tar -chzf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+gzip
: : :.tar.bz2:/bin/tar -chIf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+bzip2
: : :.ltar:/bin/tar -cf - %s:T_REG|T_DIR:O_TAR:tar
: : :.ltar.Z:/bin/tar -cZf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+compress
: : :.ltar.gz:/bin/tar -czf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar+gzip 

 

  你可能想我一样看花了眼,不过好在我们不用深究,
反正这个文件基本上把常用的压缩,打包命令都包括在内了,只要它存在, FTP服务程序就会根据用户的需要执行压缩或打包的命令。
  例如,用户想下载目录Howto中所有的文件,那么他不必使用mget命令,而只要使用get Howto.tar.gz,这时wu-ftpd就会将该目录打包压缩并发送到用户的机器上了。所以使用该文件可以完成压缩传递的数据量,减少传输时间等作用。
  这里有一点需要注意,这个文件中定义的可执行文件的位置/bin指的都是/home/ftp/bin而不是Linux的/目录下的bin,所以请检查 /home/ftp/bin目录中有无上述命令,如果没有还需要将这些程序复制到该目录中。我看了一下,由于我仅仅安装了Debian的基本系统,所以 bzip2这个命令是没有的,我们可以用at-get install bzip2命令来下载和安装它,然后把bzip2命令复制到/home/ftp/bin就可以了。


5 测试
  
  到这里,匿名FTP服务器的配置工作基本上就完成了,我们可以用ftp命令连接自己的服务器,检查合法用户和匿名用户的连接情况以及各个目录的权限是否正确。之后就可以准备FTP服务的开张了。


6 TODO

  在下一个版本里面,我将描述如何用ftpmirror建立ftp服务器镜像。 

7 结束语

  本文是《Debian服务器设置入门》系列教程之第二章》,建议您按照顺序阅读,有问题可以和作者kanaka联系。

 

8 参考文献

  本章参考了下面的文章:
  《用wu-ftpd架设FTP服务器》一文,地址是http://www.lslnet.com/linux/docs/linux- 3300.htm 
  《架设FTP服务器》一文,地址是http://www.linuxsir.com/bbs/showthread.php?s=& threadid=8455&highlight=wuftpd
  很抱歉我没找到这两篇文章作者的名字,但是我们仍然应该心存感激。
 

Tags:Debian 服务器 设置
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明