UPDATE: chroot配置时,目录不能设root的文件夹成0777权限,要设里面的具体文件为0777.
2018/10/15 update: 加入passive被动模式与防火墙配置。
vsftpd虚拟帐号的快速配置,不需要添加用户到passwd中。环境:CentOS release 6.5 (Final)。
>yum install vsftpd
>cd /etc/vsftpd
>vi vsftpuser.txt
ftpuername
ftpuerpassword
>vi chroot_list 如果想要限制登录用户chroot在根目录下,不要添加用户在此文件内
ftpusername
>db_load -T -t hash -f vsftpuser.txt vsftpuser.db
#如果没有db_load命令,先安装 yum install db4-utils db4
#vsftpd 使用 Berkeley DB databases
>vi /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
#注意这里要注释掉默认的auth和account配置
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
session required pam_loginuid.so
session include password-auth
#添加新的auth和accout认证方法
auth required pam_userdb.so db=/etc/vsftpd/vsftpuser
account required pam_userdb.so db=/etc/vsftpd/vsftpuser
>vi vsftpd.conf
anonymous_enable=NO
local_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chown_uploads=YES
#这个用户名与你的nginx或php-fpm执行用户名保持一致
chown_username=apache
#注意这chroot_local_user设的是NO
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
virtual_use_local_privs=YES
guest_enable=YES
hide_ids=YES
#ftp所有登录用户默认限制在这个目录下面
local_root=/datab/web/abc.com
#如果要根据不同用户分配目录,则只在/datab/web/abc.com再建子目录,根据登录用户名,如使用指令替代上面的
#local_root=/home/vftp/$USER
#此条命令无效,详细见后面说明
>service vsftpd restart
要根据登录用户名分配不同的目录,需要修改配置
chroot_local_user=YES
user_config_dir=/etc/vsftpd/users
创建目录mkdir /etc/vsftpd/users
在目录里创建登录用户名同名的配置文件,如 touch /etc/vsftpd/users/abc
在abc里添加以下配置
local_root=/var/www/sites/USER
dirlist_enable=YES
download_enable=YES
write_enable=YES
注意USER为真实目录文件夹,非USER固定值。
重启使生效。
2018/10/15 update: passive被动模式与防火墙配置。
被动模式是很多ftp软件的配置设置,要求ftp server使用动态端口,如果商品是动态的,则服务器上如果有配置了防火墙规则,将可能被防火 墙拦截这些端口的通讯。所以要在vsftpd.conf指定一下端口的范围并单独开设防火墙规则。
#vi /etc/vsftpd/vsfptd.conf
pasv_enable=Yes
pasv_min_port=10090
pasv_max_port=10100
如果是linux使用iptable做规则,则
iptables -I INPUT -p tcp --destination-port 10090:10100 -j ACCEPT
service iptables save
如果是centos7
# firewall-cmd --get-active-zones
public
interfaces: eth0# firewall-cmd --permanent --zone=public --add-port=10090-10100/tcp
# firewall-cmd --reload
当然21和20原来默认的商品还是要开放的,某些ftp client可能会使用到。