一、安装vsftp
1.查看有无安装vsftp
rpm -qa | grep vsftpd
2.如果没有安装的话,则要先安装,我采用的是yum的方式安装
yum -y install vsftpd
3.创建vsftp的日志文件
touch /var/log/vsftpd.log
 
二、修改vsftp的配置文件
vi /etc/vsftpd/vsftpd.conf
请参照以下配置修改vsftpd.conf文件,没有的行请添加进去
anonymous_enable=NO     #设定不允许匿名用户访问
local_enable=YES        #设定本地用户可以访问
write_enable=YES        #设定本地用户有写入的权限
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log       #设定vsftp的服务日志保存路径
xferlog_std_format=YES
ascii_upload_enable=YES        #设定支持ASCII模式上传
ascii_download_enable=YES      #设定支持ASCII模式下载
chroot_list_enable=YES      #设定用户登录后不能离开主目录
chroot_local_user=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd      #PAM认证文件名,PAM根据/etc/pam.d/vsftpd进行认证
guest_enable=YES         #设定启用虚拟用户
guest_username=ftp       #指定虚拟用户的宿主用户
user_config_dir=/etc/vsftpd/vuser_conf       #设定虚拟用户个人服务文件存放路径
userlist_enable=YES
tcp_wrappers=YES
 
三、进行认证
1.创建chroot_list文件,并加入ftp用户
touch /etc/vsftpd/chroot_list
echo ftp >> /etc/vsftpd/chroot_list
2.安装Berkeley DB工具
yum install db4 db4-utils
3.创建用户密码文件
vi /etc/vsftpd/vuser_passwd.txt
添加以下行,注意前一行是用户名,后一行是密码
ftpuser1
ftppass1
ftpuser2
ftppass2
4.生成虚拟用户认证的db文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
5.编辑认证文件/etc/pam.d/vsftpd
vi /etc/pam.d/vsftpd
将原来的语句全部注释掉,并增加以下两行
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd
6.创建虚拟用户个性ftp服务文件
mkdir /etc/vsftpd/vuser_conf
vi /etc/vsftpd/vuser_conf/ftpuser1
内容如下:
local_root=/opt/var/ftp    #虚拟用户的根目录(根据实际修改)
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
 
四、启动vsftp
mkdir /opt/var/ftp/ftpuser1
chmod 777 /opt/var/ftp/ftpuser1
service vsftpd start
 
五、错误分析
1. 553 Could not create file
一般都是SELinux的问题,设置SELinux的一个值,重启服务器即可
setsebool -P ftpd_disable_trans 1
service vsftpd restart
2. 500 OOPS:bad bool value in config file for: write_enable
注意你的服务文件中保证每一行最后没有任何空格,一般出错就是在多余的空格上。
 
六、iptables开放ftp端口
    因为ftp端口真的比较特殊,并不像80,22这些端口。它分为连接用的端口,还有当你上传下载文件的传输数据用的端口。所以开启了iptables防火墙的话,不仅需要开放20和21这两个端口,还需要开放一些端口用于数据传输,比如上传、下载文件都要用到这些端口。iptables很难对任意端口开放的,如果不指定一个端口范围,让iptables允许任意端口访问,那和不设置防火墙没什么区别,那么我们的解决办法就是指定这个数据传输端口一个范围。
1.查看iptables的设置,确认INPUT、FORWARD、OUTPUT的设置状态是DROP还是ACCEPT
iptables -L -n
2.开放20和21端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT     (如果INPUT是DROP的话)
iptables -A INPUT -p tcp --dport 20 -j ACCEPT     (如果INPUT是DROP的话)
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT    (如果OUTPUT是DROP的话)
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT    (如果OUTPUT是DROP的话)
3.修改vsftpd的配置文件
vi /etc/vsftpd/vsftpd.conf
添加下面两行
pasv_min_port=30001
pasv_max_port=30100
这两句话的意思是告诉vsftpd, 要传输数据的端口范围就在30001到30100 这个范围内传送。注意这个范围不能设置得太大,也不能设置的太小,只要足够数据传输用就行了。
4.开放30001-30100这些端口
iptables -A INPUT -p tcp --dport 30001:30100 -j ACCEPT     (如果INPUT是DROP的话)
iptables -A OUTPUT -p tcp --sport 30001:30100 -j ACCEPT    (如果OUTPUT是DROP的话)
5.将规则写入/etc/sysconfig/iptables文件里
/etc/rc.d/init.d/iptables save
现在可以用个账号登录测试一下,看上传、下载是否正常。