Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用,如ftp.redhat.com, ftp.kde.org, .等。 Vsftpd的 实现有三种方式:
1、匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问
2、本地用户形式:以/etc/passwd中的用户名为认证方式
3、虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用 户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了 对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来 说,虚拟用户是一种极好的解决方案。
一、安装
1.下载最新的稳定版vsftpd- 2.0.3.tar.gz
2.卸载原有的rpm的vsftpd
rpm -e vsftpd
tar xvzf vsftpd- 2.0.3.tar.gz
cd vsftpd- 2.0.3
# vi builddefs.h \\编辑builddefs.h 文件,文件内容如下:
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */
将以上undef的都改为define,支持tcp_wrappers,支持PAM认证方式,支持 SSL
Make
useradd -s /sbin/nologin nobody
mkdir /usr/share/empty
mkdir /var/ftp
useradd -d /var/ftp -s /sbin/nologin ftp
chown root.root /var/ftp
chmod og-w /var/ftp  说明:如果 你象我一样原来有rpm的vsftp,只是卸载了,可以省略6-11步,如果原来没有安装vsftp,请按部就班。
请记住,如果你不想让用户在本地登陆, 那么你需要把他的登陆SHELL设置成/sbin/nologin
比如以上的nobody和ftp我就设置成/sbin/nologin
make install
vi /etc/xinetd.d/vsftpd  
把 disable=yes改成no,保存退出。然后service xinetd restart,OK!新装的vsftp已经可以工作了!  
说明:默认 安装的vsftpd是以xinetd的方式启动的。你需要上述操作,一会儿,我们再来讲把它改成独立启动的服务。
ftp 127.0.0.1  
输入用户名 ftp,密码直接回车,OK!已经可以连接了!输入quit退出。然后重新ftp 127.0.0.1,输入本地用户和密码,却提示login faild!why?原来少一个本地用户认证的pam文件。
cp RedHat/vsftpd.pam /etc/pam.d/ftp
(注意,没有这一步将不能使用本地用户登录!)
cp vsftpd.conf /etc/vsftpd.conf
(现在,默认还是只能匿名用户登录)
vi /etc/vsftpd.conf  
把 anonmous_enable=YES改成NO(禁掉匿名链接,不安全)  
把 local_enable=YES前的注释去掉(打开本地用户连接的权限)  
把 write_enable=YES前的注释去掉(打开本地用户的写权限)  
把 local_umask=022前的注释去掉  
service xinetd restart18.再次测试    
ftp 127.0.0.1  
使用ftp 用户空密码登录,将出现login faild  使用本地用 户登录,OK!已经成功了!上传文件,也OK!
二、高级配置
1.使用独立服务
vi /etc/xinetd.d/vsftpd把disable=no还改成yes,不再需要它了!
vi /etc/vsftpd.conf在结尾加上listen=YES
service xinetd restart
/usr/local/sbin/vsftpd /etc/vsftpd.conf &
OK!现在vsftp已经是独立启动的服务了!
2.使用非常规的端口(2121)
vi /etc/vsftpd.conf
添加listen_port=2121,保存退出
killall -9 vsftpd
/usr/local/sbin/vsftpd /etc/vsftpd.conf &
OK!现在用ftp 127.0.0.1将提示你连接被拒绝了(ftp:connect:Connetion refuesd)!然后ftp 127.0.0.1 2121输入用户名和密码,OK!可以登录!
3.实现不同用户不同权限(虚拟用户)
现在我们就来实现三个用户的不同权限:
(a).upload用户,可以上传下载,可以新建文件夹,但不能删除文件和文件夹,不能重命名原有文件和文件夹;
(b).download用户,只能下载;
(c).admin用户,管理员,可以上传,可以下载,可以新建文件夹,可以删除和更改文件和文件夹名。这些用户都不能登录系统,并且用ftp连接时锁定 在自己的家目录中不能进入系统文件夹。
vi logins.txt
upload
******* #upload用户的密码
download
*******
admin
****************
:wq //保存退出
说明,此文本文件的格式是:单数行为用户名,偶数行为密码
db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
chmod 600 /etc/vsftpd_login.db
cd vsftpd-2.0.3/EXAMPLE
cp VIRYUAL_USERS/vsftpd.pam /etc/pam.d/ftp.vu
(进入你的解包的源码目录,把虚拟用户的认证文件拷贝到/etc/pam.d/下)
useradd -d /home/ftpsite virtual
chmod 700 /home/ftpsite
su - virtual
vi /homt/ftpsite/test.file(建立虚拟用户所要访问的ftp目录并设置仅virtual用户访问的权限和创建一个供下载实验的文件)
vi /etc/vsftpd.conf在此文件中插入下面的配置语句
guest_enable=YES(启用虚拟用户)
guest_username=virtual(将虚拟用户映射为本地virtual用户)
pam_service_name=ftp.vu(指定PAM配置文件为ftp.vu)
user_config_dir=/etc/vsftpd_user_conf(指定不同虚拟用户配置文件的存放路径)
保存退出
mkdir /etc/vsftpd_user_conf
开放不同用户的不同权限 
echo "anon_world_readable_only=NO">/etc/vsftpd_user_conf/download(开放 download用户的下载权限——只能下载;注意这个不地方不要写成YES,否则将不能列出文件和目录)
cp /etc/vsftpd_user_conf/download /etc/vsftpd_user_conf/upload
vi /etc/vsftpd_user_conf/upload,添加下列行
write_enable=YES (增加写权限)
anon_upload_enable=YES(增加上传权限)
anon_mkdir_write_enable=YES (增加创建目录的权限)
cp /etc/vsftpd_user_conf/upload /etc/vsftpd_user_conf/admin
增加一行:
anno_other_writer_enable=YES(增加管理员用户的删除/重命名的权限)
测试
killall -9 vsftpd
/usr/local/sbin/vsftpd /etc/vsftpd.conf &
ftp 127.0.0.1 2121
以用户名download和你设置的密码登录,ls,可以看到文件,下载,成功!put一个文件,提示
Permission denied。rename test.file同样权限被拒绝;
delete test.file同样不成功!
输入quit退出,
以upload用户登录,OK!可以上传,下载,
mkdir lsf,提示“/lsf" created;
rename lsf lsf1提示Permission denied,删除文件同样不成功!
输入quit退出,
以admin用户登录,可以有上述所有权限,
然后rmdir lsf,提示Remove directory o[eration successful;delete test.file提示Delete operation successful!OK,大功告成了!
三、附配制文件 注意:每行的等号前后都不要有空格,否则启动时会出现错误,举个例子,假如我在listen=YES后多了个空格,那我 启动时就出现如下错误:500 OOPS: bad bool value in config file for: listen/etc/vsftpd.conf文件的内容# Example config file /etc/vsftpd.conf
#
anonymous_enable=NO
#
local_enable=YES
#
write_enable=YES
#
local_umask=022
#
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
#
xferlog_enable=YES
#
connect_from_port_20=YES
#
#xferlog_file=/var/log/vsftpd.log
#
#xferlog_std_format=YES
#
ascii_upload_enable=YES
ascii_download_enable=YES
#
ftpd_banner=Welcome to Serv-U FTP serser. #(一个真实的慌言:em02:)
#
#
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
#
chroot_local_user=YES
listen_port=2121
listen=yes
guest_enable=YES
guest_username=virtual
pasv_min_port=30000
pasv_max_port=30999
pam_service_name=ftp.vu
anon_world_readable_only=NO
user_config_dir=/etc/vsftpd_user_conf 
/etc/vsftpd_user_conf/download的内容
anon_world_readable_only=NO  
/etc/vsftpd_user_conf/upload的内容
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
/etc/vsftpd_user_conf/admin的内容
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES自启动脚本,在/etc/rc.local中加入/usr/local/sbin/vsftpd /etc/vsftpd.conf &