一、Vsftpd的基本信息:
官方网站:http://vsftpd.beasts.org/
作者:Chris Evans
最新版本:vsftpd-2.0.3(FC3自带的版本:vsftpd-2.0.1-5,还蛮新的嘛:P)
FAQ:
ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.2.2/FAQ
ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-2.0.3/FAQ
在线文档/源代码:
ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-2.0.3/
vsftpd是一个符合GPL协议的FTP服务器软件,适合在类UNIX系统中运行,包括Linux,较其他FTP服务器而言,vsftpd在安全性、可靠性以及速度上技胜一筹。采用vsftpd的典型网站有:
ftp.redhat.com 主要出于速度要求而采用vsftpd
ftp.openbsd.org 主要出于安全性而采用vsftpd
ftp.suse.com
vsftpd的典型特点有:
·支持虚拟IP配置
·支持虚拟用户
·standalone或inetd两种模式(区别见后)
·强大的针对单个用户的设置功能
·支持带宽控制
·支持针对单个IP的设置
·支持针对单个IP的限制
·支持IPv6
·集成SSL加密功能
·等等
如果你要配置的FTP服务器追求以下要求:
→安全性
→高性能
→可靠性
那么vsftpd就是你的正确选择。实际上vsftpd适合于大部分的应用,即使有时它可能会缺少某一个你所需要的特性,这也往往可以通过外部如组件PAM或xinetd/tcp_wrappers来提供。在这点上,vsftp很好的符合了UNIX的模块化思想,它自己就是一个模块化的组件。最后,移植到vsftpd上可能会意味着失去某些现有服务器提供的诡异而多余的功能,但是这应该是完全值得的。SAC小组、IBM公司及RedHat公司都推荐vsftpd,就算不信我的话,那么他们的话总该信吧?还有,你知道为什么它叫vsftpd吗?它的真名是Very Secure FTP Daemon,从名字就可以看出它的特点,当然信不信就由你了。
二、vsftpd的下载安装:
好,假设你已经相信了我前面的话并且从它的官方网站上下了一个vsftpd的RPM安装包。。。哎,其实在Fedora Core release 3的安装盘中就有vsftpd的RPM安装包的,不过下了也没关系,并不比找安装盘也更费时。当然如果你机器上在装系统的时候就已经装了vsftpd的话,那就有点冤了,很简单,用下面的命令来看有没有安装vsftpd:
[root@mmpire ~] # rpm –qa | grep vsftpd
如果已经安装上vsftpd了,则会返回其版本信息,否则没有任何信息返回。
推荐一个比较全的关于vsftpd安装及配置的网站:http://www.vsftpdrocks.org/ 英文不太差的兄弟都可以直接去那里,不用浪费时间再往下看了。还有一个台湾人写的网页,虽然稍早了点,但还是很有参考价值的:http://linux.vbird.org/linux_server/0410vsftpd.php
剩下来的兄弟,废话不多说,开始安装。Vsftpd有三种安装方式:
√源代码安装
√通过FreeBSD包安装
√通过RPM安装
由于FC3安装盘中自带的是RPM包,从官方网站上也可以方便的下到RPM包,最重要的是RPM包非常容易安装,所以我选择第三种安装方法。
1、 下载vsftpd,提供RPM安装包的网站有:
官方网站:ftp://vsftpd.beasts.org/users/cevans/
Redhat's rpm collection (http://rhn.redhat.com/ )
Rpmfind.net (http://www.rpmfind.net/ )
2、 安装vsftpd
[root@mmpire ~] # rpm -ivh vsftpd-2.0.1-5.i386.rpm
3、 附我的安装步骤,你可以略过:
本次安装使用的是FC3安装盘里的RPM包,并且为了节省从服务器端下载RPM包这个步骤,使用本地文件夹直接映射到服务器上ISO文件的方式,使用FTP方式安装(呵呵,有意思的是,这个服务器端使用的FTP服务器也是vsftpd)。
在我的root目录下新建两个文件夹,文件名任意,设为tmp和isotmp,用来映射ftp服务器上的文件夹:
[root@mmpire ~] #mount -t nfs 202.118.239.46:/ftp tmp/
然后进入tmp目录,进到其中的ISO/FC3目录下,
[root@mmpire ~] #mount -o loop FC3-i386-DVD.iso /root/isotmp
进入/root/isotmp文件夹中,找到其中的vsftpd安装rpm包,开始安装:
[root@mmpire ~] #rpm -ivh vsftpd-2.0.1-5.i386.rpm
三、vsftpd的运行:
上面已经安装好了vsftpd,现在要使它运行起来。其实这很简单,配置FTP服务器的真正有技术含量的工作在于怎么修改好它的配置文件,以使你的服务器的运行效率、安全性及稳定性最高。
运行之前需要先了解守护进程的两种运行模式:standalone 及xinetd,vsftpd也提供了standalone和inetd(inetd或xinetd)两种运行模式。简单解释一下,standalone模式是指服务器一次性启动,运行期间一直驻留在内存中,优点是对接入信号反应快,缺点是损耗了一定的系统资源,因此经常应用于对实时反应要求较高的专业FTP服务器。inetd恰恰相反,由于只在外部连接发送请求时才调用FTP进程,因此不适合应用在同时连接数量较多的系统。在最初的vsftpd版本中,为了便于大型服务器限制来自同一个IP的访问数,软件作者推荐使用xinetd模式,但由于下面的两个原因,作者在V1.1.3版本之后推荐standalone模式:
→xinetd模式不够稳定,据许多网站报告,它有时会统计错误并拒绝合法连接。
→standalone模式的功能得到增强,可以自己统计每个IP的连接数,还可以通过集成tcp_wrappers来控制连接,乃至可以进行针对单个IP的配置。
1、在这里,我使用standalone模式运行vsftpd,步骤如下:
① 打开配置文件vsftpd.conf,设置成standalone模式:
[root@mmpire ~]# vi /etc/vsftpd/vsftpd.conf
找到里面的这句话:listen=YES,默认状态是被注释掉的,把注释取消;如果没找到这句
话,那就把它加进去。
② 运行FTP服务器:
[root@mmpire ~]# /usr/sbin/vsftpd &
然后试试登录:
[root@mmpire ~]# ftp localhost
Connected to mmpire.
220 Welcome to mmpire FTP service.:P:P:P
530 Please login with USER and PASS
530 Please login with USER and PASS
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,220,137)
150 Here comes the directory listing
drwxr-xr-x 2 0 0 4096
Oct 04 2004 pub
drwxr-xr-x 2 0 0 4096 Apr 02 10:43 sadf
226 Directory send OK.
ftp> quit
221 Goodbye.
[root@mmpire ~] #
如果你收到了类似的返回信息,那么说明你的vsftpd安装成功了。
2、如果你要使用xinetd模式,为节省篇幅,此处仅给出一个连接:
http://www.vsftpdrocks.org/rpm/
在里面你也许应该注意到这句话,然后作出选择:
I recommend running vsftpd out of either inetd or xinetd.
四、vsftpd的配置:
到了关键时候了,服务器配置能力的高下在这里见分晓。不敢乱写,在这里仅给出配置文件的基本信息以及软件作者推荐的几个配置单。在进入配置文件之前,先说一下本地用户的概念。其实本地用户就是除匿名用户之外的用户,即在服务器里保存着信息(用户名和密码)的用户。在/etc/下有两个文件:vsftpd.ftpusers和vsftpd.user_list,里面有很多用户名,是用来干什么的呢?
→vsftpd.ftpusers:FTP黑名单,在这个名单上的用户都无法登录FTP服务器。
→vsftpd.user_list:这个名单的功能根据配置文件vsftpd.conf里的userlist_deny的值不同而不同,如果userlist_deny=YES,则此名单仍为黑名单,即列在其中的用户不能登录;如果userlist_deny=NO或者userlist_deny被注释掉,则这个名单为合法用户名单,在此名单之外的用户名(除anonymous外)都是无效用户名,将不能登录。注意:当第二个名单为合法名单时,考虑这样的情况:有一个用户名同时在两个名单上,结果会怎样?很简单,类似于bbs里被封了权限的账号一样,将无法登录FTP服务器。
1、配置文件vsftpd.conf
一般在/etc/vsftpd目录下,也有可能在/etc下面,自己找找。里面的条目不少,不过都有详细的英文注解,英文不好的可以去网上找译得好的,这里给出我的理解:
# Example config file /etc/vsftpd/vsftpd.conf 示例配置文件 /etc/vsftpd/vsftpd.conf # The default compiled in settings are fairly paranoid. This sample file 这些默认设置是相当宽松的,目的只是让FTP能跑起来,这意味着你需要自己来加一些 # READ THIS: This example file is NOT an exhaustive list of vsftpd options. 注意:本示例文件并未包含所有vsftpd的设置选项,如有需要,可以参考vsftpd.conf.5
# Allow anonymous FTP? (Beware - allowed by default if you comment this out). 允许匿名用户访问则设为YES(注意:如果你仅仅注释掉了这句话,那也等效于允许匿名访问)
允许本地用户访问则设为YES,不允许则设为NO或注释掉这句话。
允许写权限则设为YES,注意这是针对所有用户的,即如果设为NO或注释掉这句话,那么
# Default umask for local users is 077. You may wish to change this to 022, 本地用户的默认umask值是077,你可以在这里把它设为022,大多数ftp使用此umask值。 注:umask大概是user mask的意思,登录到服务器的每个用户都有自己的mask,umask # Uncomment this to allow the anonymous FTP user to upload files. This only 允许匿名用户上传则设为YES,不允许则设为NO或注释掉这句话。 # Uncomment this if you want the anonymous FTP user to be able to create 允许匿名用户新建目录则设为YES,不允许则设为NO或注释掉这句话。 # Activate directory messages - messages given to remote users when they 意思是激活目录消息,当用户访问特定文件时给出提示消息。具体使用方法是:
# Activate logging of uploads/downloads.
# Make sure PORT transfer connections originate from port 20 (ftp-data).
# If you want, you can arrange for uploaded anonymous files to be owned by
# You may override where the log file goes if you like. The default is shown
# If you want, you can have your log file in standard ftpd xferlog format # You may change the default value for timing out an idle session. # You may change the default value for timing out a data connection. # It is recommended that you define on your system a unique user which the
# Enable this and the server will recognise asynchronous ABOR requests. Not
# By default the server will pretend to allow ASCII mode but in fact ignore # You may fully customise the login banner string: # You may specify a file of disallowed anonymous e-mail addresses. Apparently
# (default follows)
# You may specify an explicit list of local users to chroot() to their home 注:匿名用户只能在“/var/ftp/”目录下,不受上面的设定影响。
# You may activate the "-R" option to the builtin ls. This is disabled by
pam_service_name=vsftpd
#userlist_enable=YES
#tcp_wrappers=YES |
2、推荐配置实例
①standalone运行模式下的针对InternetSite应用的配置文件vsftpd.conf:
# Standalone mode
listen=YES
max_clients=200
max_per_ip=4
# Access rights
anonymous_enable=YES
local_enable=NO
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
# Security
anon_world_readable_only=YES
connect_from_port_20=YES
hide_ids=YES
pasv_min_port=50000
pasv_max_port=60000
# Features
xferlog_enable=YES
ls_recurse_enable=NO
ascii_download_enable=NO
async_abor_enable=YES
# Performance
one_process_model=YES
idle_session_timeout=120
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
anon_max_rate=50000
②针对单个IP的配置:
设置过程:
1, 在配置文件vsftpd.conf中加入:
tcp_wrappers=YES
2, 重启FTP服务器,单IP配置功能其实已经启动,试一试?
3, 在/etc/hosts.allow文件中加入这么一句:
vsftpd: 173.26.100.36: DENY
这是msmouse的IP地址,呵呵,他就登不上FTP服务器了。
4, 这还没完全发挥单IP配置的强大功能,再加上下面这条:
vsftpd: 173.26.100.31: setenv VSFTPD_LOAD_CONF /etc/vsftpd_mmpire.conf
这里的意思是:对于从173.26.100.31这个IP发过来的连接请求,使用特定的配置文件,这里指定是/etc/vsftpd_mmpire.conf文件,你预见到它的强大用处了吗?
注:这里使用了tcp_wrappers数字过滤工具。当用户试图登录FTP服务器时,服务器先调用tcp_wrappers,tcp_wrappers可以根据用户的IP进行特定配置,配置文件在/etc/hosts.allow中,注意这是tcp_wrappers的配置文件而不是vsftpd的。由于新版本vsftpd在standalone模式下也支持此工具,xinetd模式就更没有什么优势了。
还有几个配置实例,这里不一一详述,可以到这里下载:
ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-2.0.3/EXAMPLE/
五、没实际配过有用的FTP服务器,错误遗漏之处还请指教!