vsftp配置虚拟用户

安装vsftp之前需关闭selinux不然会出现ftp路径无读写权限
# vi /etc/selinux/config
将 SELINUX=XXX -->XXX 代表级别改为SELINUX=disabled
然后执行# setenforce 0
准备工作:
查看是否安装vsftp
rpm -qa | grep vsftpd
如果出现vsftpd-3.0.2-25.el7,说明已经安装 vsftp
安装vsftp
yum -y install vsftpd
.测试 是否安装成功 (ip 改成自己啊,不要用俺的此次登录为匿名登录 user: anonymous 密码为空 如果成功登录会有下面内容 这说明vsftpd安装成功)
systemctl start vsftpd  启动 vsftpd
systemctl enable vsftpd  开机自启动

被动模式虚拟用户配置:
1. 添加虚拟用户口令文件
[root@CentOS5 /]#vi /etc/vsftpd/login.txt
添加虚拟用户名和密码,一行用户名,一行密码,以此类推。奇数行为用户名,偶数行为密码。
testFTP
testFTP

2. 生成虚拟用户口令认证文件
将刚添加的vftpuser.txt虚拟用户口令文件转换成系统识别的口令认证文件。
首先查看系统有没有安装生成口令认证文件所需的软件db4-utils。
rpm –qa |grep db4-utils
可以yum安装:[root@KcentOS5 ~]# yum install db4*【推荐】
rpm –ivh db4-utils-4.3.29-9.fc6.i386.rpm
下面使用db_load命令生成虚拟用户口令认证文件。
db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
上面命令复制容易输错,最好手动输入

3. 编辑vsftpd的PAM认证文件
在/etc/pam.d目录下,
vi /etc/pam.d/vsftpd
将里面其他的都注释掉,添加下面这两行:
auth required pam_userdb.so db=/etc/vsftpd/login
account required pam_userdb.so db=/etc/vsftpd/login
4. 建立本地映射用户并设置宿主目录权限
所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码。
useradd -d /data/ftpdata -s /sbin/nologin vsftp
chmod 700 /data/ftpdata

5. 配置vsftpd.conf(设置虚拟用户配置项)
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
use_localtime=YES
local_enable=YES
allow_writeable_chroot=YES
xferlog_enable=YES
local_umask=022
pam_service_name=vsftpd
use_localtime=YES
listen_port=21
chroot_local_user=YES
idle_session_timeout=120
data_connection_timeout=120
guest_enable=YES
guest_username=vsftp
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YES
pasv_min_port=10240
pasv_max_port=14480
accept_timeout=5
connect_timeout=1
connect_from_port_20=NO
#port_enable=NO

pasv_enable=YES
reverse_lookup_enable=NO
pasv_addr_resolve=YES
pasv_promiscuous=YES
pasv_address=X.X.X.X

6.创建目录/data/ftpdata/testFTP/【注意路径必须有读写权限】
mkdir -p /data/ftpdata/testFTP/
chmod 777 -R /data/ftpdata/testFTP/
mkdir -p /etc/vsftpd/vsftpd_user_conf/
注:这里是给用户分配权限,多用户权限配置都在vsftpd_user_conf中
vi /etc/vsftpd/vsftpd_user_conf/testFTP
在文件中加入以下内容:【防止local只粘贴了cal】
local_root=/data/ftpdata/testFTP/
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=000

7. 重启vsftpd服务
[root@CentOS5 /]#service vsftpd restart

8. 测试虚拟用户登录FTP
C:\User\Administrator>ftp x.x.x.x
连接到x.x.x.x。
220 Welcome to BOB FTP server
用户(x.x.x.x(none)):testFTP
331 Please specify the password.
密码:testFTP
230 Login successful.

报错: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES

阿里云被动模式无法使用
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

Vsftpd.conf加入
reverse_lookup_enable=NO
pasv_addr_resolve=YES
pasv_promiscuous=YES
pasv_address=x.x.x.x 经典网络公网IP

主动模式iptables防火墙:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 20,21 -m state --state NEW -j ACCEPT

被动模式iptables防火墙:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPTiptables -A INPUT -p tcp --dport 10240:14480 -j ACCEPT