第一步,如果你没有安装vsftpd,请执行如下命令安装。
[root@test ~]# yum -y install vsftpd

第二步,开始配置。vsftpd的默认配置文件目录是/etc/vsftpd,在配置开始前,
我们先把原来的主配置文件/etc/vsftpd/vsftpd.conf先备份。
[root@test ~]# cd /etc/vsftpd/
[root@test vsftpd]# cp vsftpd.conf vsftpd.conf.orig

一个基本的配置文件,根据你自己的需要你可能要做修改,在这里默认注释的行我就不写了。
[root@test vsftpd]# vim vsftpd.conf

anonymous_enable=YES
local_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
idle_session_timeout=600
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES


1、vsftpd.conf文件的配置(vi /etc/vsftpd/vsftpd.conf)

  #允许匿名用户登录FTP

  anonymous_enable=YES

  #设置匿名用户的登录目录(如需要,需自己添加并修改)

  anon_root=/var/ftp/pub (默认就是这个、不加上也行)

  #打开匿名用户的上传权限

  anon_upload_enable=YES

  #打开匿名用户创建目录的权限

  anon_mkdir_write_enable=YES

  #打开匿名用户删除和重命名的权限(如需要,需自己添加)

  anon_other_write_enable=YES

  #匿名用户的掩码(如需要,需自己添加,含义:如umask是022,这时创建一个权限为666的文件,文件的实际权限为666-022=644)

  anon_umask=022

  2、ftp目录的权限设置

  默认情况下,ftp的根目录为/var/ftp,为了安全,这个目录默认不允许上传文件 因为其木有写入权限。要想上传文件就要改权限:
     chmod 757 /var/ftp/pub


  一般至此,便实现vsftpd匿名用户的上传下载了。如果还不行,就是下面的问题。

  3、selinux的配置

  SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控制的实现,是 Linux上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。

  最简单的办法,关闭selinux

  方法1:修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。

  方法2:用命令setenforce 0,无需重启。(setenforce的格式:setenforce [ Enforcing | Permissive | 1 | 0 ])

  方法3:在lilo或者grub的启动参数中增加:selinux=0,也可以关闭selinux。

  使用getenforce查看当前selinux是否正在运行。

  不关闭selinux,就要设置selinux的ftp权限。

  1、使用getsebool -a | grep ftp查看ftp相关设置状态,我们要将allow_ftpd_anon_write设为on。

  2、使用setsebool -P 进行设置。例:setsebool -P allow_ftpd_anon_write=on。

   或使用togglesebool进行bool值取反,例如togglesebool allow_ftpd_anon_write。

 

二、本地用户配置:


anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
connect_from_port_20=YES
ftpd_banner=Welcome to use my test ftp server!
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/vsftpd_list
listen=YES
userlist_enable=YES
userlist_deny=NO
pam_service_name=vsftpd
tcp_wrappers=YES
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60500

 

#禁止匿名用户anonymous登录
anonymous_enable=NO

#允许本地用户登录
local_enable=YES

#让登录的用户有写权限(上传,删除)
write_enable=YES

#默认umask
local_umask=022

#把传输记录的日志保存到/var/log/vsftpd.log
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=NO

#允许ASCII模式上传
ascii_upload_enable=YES
#允许ASCII模式下载
ascii_download_enable=YES

# 使用20号端口传输数据
connect_from_port_20=YES

#欢迎标语
ftpd_banner=Welcome to use my test ftp server.

#接下来的三条配置很重要
#chroot_local_user设置了YES,那么所有的用户默认将被chroot,也就用户目录被限制在了自己的home下,无法向上改变目录
#chroot_list_enable设置了YES,即让chroot用户列表有效。
#★超重要:如果chroot_local_user设置了YES,那么chroot_list_file设置的文件里,是不被chroot的用户(可以向上改变目录)
#★超重要:如果chroot_local_user设置了NO,那么chroot_list_file设置的文件里,是被chroot的用户(无法向上改变目录)
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#以standalone模式在ipv4上运行
listen=YES

#PAM认证服务名,这里默认是vsftpd,在安装vsftpd的时候已经创建了这个pam文件,
#在/etc/pam.d/vsftpd,根据这个pam文件里的设置,/etc/vsftpd/ftpusers
#文件里的用户将禁止登录ftp服务器,比如root这样敏感的用户,所以你要禁止别的用户
#登录的时候,也可以把该用户追加到/etc/vsftpd/ftpusers里。
pam_service_name=vsftpd

#userlist_enable=YES,用户访问控制列表有效,文件是/etc/vsftpd/user_list
#userlist_deny=YES,/etc/vsftpd/user_list里的用户不能登录
#userlist_deny=NO,只有/etc/vsftpd/user_list用户才可以登录
#★重要:无论这里如何设置,只是进一步限制用户,只是在上面/etc/vsftpd/ftpusers
#的效果上叠加。比如/etc/vsftpd/ftpusers里有root用户,即便是你设置了
#userlist_deny=NO并且/etc/vsftpd/user_list有root,那root也是不能登录的!
userlist_enable=YES
userlist_deny=YES

#允许使用/etc/hosts.allow和/etc/hosts.deny文件来限制对ftp的访问控制
tcp_wrappers=YES

#关于PASV模式的配置
pasv_enable=YES
#PASV模式连接时的最小端口
pasv_min_port=60000
#PASV模式连接时的最大端口
pasv_max_port=60500


三、虚拟用户配置:

1、安装所需DB库rpm包:

[root@localhost CentOS]# rpm -ivh db4-
db4-4.3.29-10.el5_5.2.i386.rpm          db4-java-4.3.29-10.el5_5.2.x86_64.rpm
db4-4.3.29-10.el5_5.2.x86_64.rpm        db4-tcl-4.3.29-10.el5_5.2.x86_64.rpm
db4-devel-4.3.29-10.el5_5.2.i386.rpm    db4-utils-4.3.29-10.el5_5.2.x86_64.rpm
db4-devel-4.3.29-10.el5_5.2.x86_64.rpm 

2、装完后支持 db_load 命令:
[root@localhost CentOS]# db_
          
db_archive            db_load               dbus-cleanup-sockets  db_verify

3、创建对应虚拟用户文件:
[root@localhost home]# vi /etc/vsftpd/vsftpd.list
yhby
123456
yhby2
123456
yhby3
123456 (奇数为用户偶数为密码)

[root@localhost home]# cd /etc/vsftpd/

[root@localhost vsftpd]# db_load -T -t hash -f vsftpd.list vsftpd.db  (建立相对应vsftpd.list的DB库命名和第3对步应)
 
[root@localhost vsftpd]# ls (如下建立成功)
  vsftpd.db  vsftpd.list

[root@localhost vsftpd]# file vsftpd.db     (貌似是激活这个库)
vsftpd.db: Berkeley DB (Hash, version 8, native byte-order)

[root@localhost vsftpd]# chown 600 /etc/vsftpd/vsftpd.db vsftpd.list  (增加安全性)

[root@localhost vsftpd]# useradd -d /usr/xxoo -s /sbin/nologin xiaoxiao (建立虚拟用户对应的系统用户)

[root@localhost vsftpd]# chmod 755 /usr/xxoo/ (修改虚拟用户登录后的目录权限)

[root@localhost vsftpd]# ls -lh /boot > /usr/xxoo/ceshi.txt (创建测试文件)

[root@localhost vsftpd]# cd /etc/pam.d/  (建立PAM认证文件)

[root@localhost pam.d]# vi vsftpd.vu

#%PAM-1.0

auth       required       pam_userdb.so  db=/etc/vsftpd/vsftpd  (这是之前生成的DB库 必须省略.db)

account    required       pam_userdb.so  db=/etc/vsftpd/vsftpd

[root@localhost xxoo]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
guest_enable=YES (开启虚拟用户)
guest_username=xiaoxiao (所有虚拟用户映射的系统用户)
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log (日志路径)
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
idle_session_timeout=600 (连接死亡时间)
chroot_local_user=YES (禁锢在用户自己的目录)
pam_service_name=vsftpd.vu (新建的PAM文件)
userlist_enable=YES (YES结合下面的NO则表示只允许user_list中的用户登录)
userlist_deny=NO
tcp_wrappers=YES
pasv_enable=YES     
pasv_min_port=60000
pasv_max_port=60500

4、为不同虚拟用户建立独立的配置文件及权限 添加以下行:
[root@localhost xxoo]# vi /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vsftpd_dir


[root@localhost xxoo]# mkdir /etc/vsftpd/vsftpd_dir (创建)

[root@localhost xxoo]# cd /etc/vsftpd/vsftpd_dir/

[root@localhost vsftpd_dir]# vi yhby (其他用户以此类推)

anon_upload_enable=YES (上传)
anon_mkdir_write_enable=NO (创建、写入)
anon_other_write_enable=NO (删除)
local_root=/usr/xxoo/yhby  (为虚拟用户建立单独的目录)

5、建立行对应的虚拟用户目录:

[root@localhost vsftpd]# mkdir -p /usr/xxoo/yhby


[root@localhost yhby]# vi /usr/xxoo/tt.txt (建立测试页)