首页 > 技术文章 > vsftp配置

huangyanqi 2018-12-21 10:38 原文

1、vsftp工作模式

Ftp协议中控制连接均是由客户端发起,而数据连接有两种工作方式:Port和Pasv方式

 

 

说明:服务器中常使用的模式是被动模式(存在企业中的客户端(pc)有时难以控制);FTP工具或者浏览器默认使用的都是PASV模式连接FTP服务器

Port模式(主动模式)--> 默认
Ftp客户端首先和Ftp server的tcp 21端口建立连接,客户端在这个通道上发送Port命令,Port命令包含了客户端用什么端口(一个大于1024的端口)接受数据,在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。这个时候数据连接由server向client建立一个连接。

Port交互流程:
client端:client连接server的21端口,并发送用户名密码和一个随机在1024上的端口及port命令给server,表明采用主动模式,并开放那个随机的端口。
server端:server收到client发来的Port主动模式命令与端口后,会通过自己的20端口与client那个随机的端口连接后,进行数据传输。


Pasv模式(被动方式)
建立控制通道和Port模式类似,当客户端通过这个通道发送Pasv命令的时候,Ftp server打开了一个位于1024和5000之间的随机端口并且通知客户端在这个端口上进行传输数据请求,然后Ftp server将通过这个端口进行数据传输。这个时候数据连接由client向server建立连接。

Pasv交互流程
Clietn:client连接server的21号端口,发送用户名密码及pasv命令给server,表明采用被动模式。
server:server收到client发来的pasv被动模式命令之后,把随机开放在1024上的端口告诉client,client再用自己的20 端口与server的那个随机端口进行连接后进行数据传输。

 

2、安装vsftp

#安装vsftp
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install vsftpd  libdb4-utils

  

3、以系统用户登录ftp

#创建用户
useradd yanqi && passwd yanqi

#修改配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO     //禁止匿名登录
chroot_local_user=YES   //不允许用户登出自己的根目录
allow_writeable_chroot=YES  //新增部分

systemctl restart vsftpd
systemctl enable vsftpd

ftp已主动模式启动,这时就可以使用yanqi用户登录ftp了
注意关闭selinux和开放20和21端口
firewall-cmd --zone=public --add-port=20/tcp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent

这是客户端的连接示例:引用:https://www.panziye.com/java/1508.html

 

 

  

 3、以虚拟用户主动模式登录

vsftpd提供了三种认证方式,分别是:匿名用户认证、本地用户认证和虚拟用户认证。上面test用户就是本地用户。从安全的角度来说,虚拟用户最安全。

3.1、建立虚拟FTP用户数据库文件

建立一个虚拟用户名单文件vuser.list,这个文件就是来记录vsftpd虚拟用户的用户名和口令的数据文件,保存在/etc/vsftpd/目录下。
[root@localhost ~]# vim /etc/vsftpd/vuser.list 
vuser      账号
123456     密码

[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db  //生成用户加密文件
[root@localhost ~]# chmod 600 /etc/vsftpd/vuser.db //敏感文件限制只允许属主读写

  

3.2、创建FTP根目录及虚拟用户映射的系统用户

useradd -d /var/vusers -s /sbin/nologin vftp //创建系统用户vftp,并制定其家目录为/var/vusers
chmod -R 755 /var/vusers/ //修改目录的权限使得其他用户也可以访问。

  

3.3、建立支持虚拟用户的PAM认证文件

[root@localhost ~]# vim /etc/pam.d/vsftpd

#%PAM-1.0
#session    optional     pam_keyinit.so    force revoke
#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 required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser  //此句用于检查用户密码,数据库文件不要写后缀.db
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser //此句用于检查用户是否在有效期内,数据库支持虚拟用户的PAM认证文件。

  

3.4、在vsftpd.conf中添加支持配置

[root@localhost ~]# egrep -v '^$|#' -n /etc/vsftpd/vsftpd.conf 
12:anonymous_enable=NO
16:local_enable=YES
19:write_enable=YES
23:local_umask=022
37:dirmessage_enable=YES
40:xferlog_enable=YES
43:connect_from_port_20=YES
57:xferlog_std_format=YES
101:chroot_local_user=YES
102:allow_writeable_chroot=YES
116:listen=NO
125:listen_ipv6=YES
127:pam_service_name=vsftpd  //指定pam文件
128:userlist_enable=YES
129:tcp_wrappers=YES
131:guest_enable=YES     //开启虚拟用户模式
132:guest_username=vftp  //指定虚拟用户使用账号
134:user_config_dir=/etc/vsftpd/vusers_profile  //指定虚拟用户的权限配置目录
135:virtual_use_local_privs=NO   //虚拟用户和匿名用户有相同的权限
[root@localhost ~]# 

  

3.5、为虚拟用户设置权限

[root@localhost ~]# mkdir /etc/vsftpd/vusers_profile/     //新建虚拟用户目录
[root@localhost ~]# vim /etc/vsftpd/vusers_profile/vuser  //新建虚拟用户配置文件,文件名要和上面的虚拟用户名单里的账号名字对等。
local_root=/var/vusers   //虚拟账号家目录
#write_enable=YES
anonymous_enable=NO
anon_umask=022
#anon_world_readable_only=NO
anon_upload_enable=YES    //上传权限
anon_mkdir_write_enable=YES   //创建文件和目录的权限
anon_other_write_enable=YES   //删除文件和目录的权限
anon_world_readable_only=YES  //当文件的“其他人”有读权限的时候可以下载
download_enable=YES //下载权限

 

保存配置,重启服务。
systemctl restart vsftpd

 

 

 

 

 

附录(vsftpd.conf核心配置参数说明):

截取至:https://www.panziye.com/java/1508.html

 

 

  

 

 

 

 

 

 

 

  

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

推荐阅读