vsftp配置
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
python3