四、FTP服务
FTP服务是Internet上最早应用于主机之间进行数据传输的基本服务之一,是目前Internet上使用最广泛的文件传送协议
FTP概述
ftp是典型的C/S架构的应用层传输协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。FTP客户端和服务器之间的连接是可靠的,面向连接的为数据的传输提供了可靠的保证。
20端口:用于传输数据
21端口:用于传输指令(建立连接)
FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard(Active,主动方式),一种是passive(PASV被动方式)。Standard模式FTP的客户端发送PORT命令到FTP server。Passive模式FTP的客户端发送PASV命令到FTP Server.
Standard模式(主动模式)
FTP客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传输数据的时候,服务器端通过自己的TCP 20端口发送数据。FTP server必须和客户端建立一个新的连接用来传输数据。
Passive模式(被动模式)
在建立控制通道的时候和standard模式类似,当客户端通过这个通道发送PASV命令的时候,FTP server 打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
FTP作用和工作原理
FTP的作用和模式以及通信方式
FTP作用:Internet上用来远程传送文件的协议
FTP的模式:
vsftp (very secure FTP)
vsftp 模式:c/s模式
FTP服务器默认使用TCP协议的20、21端口进行通信
20端口用于建立数据连接,并传输文件数据
21端口用于建立控制连接,并传输FTP控制命令
FTP工作原理与流程
FTP数据连接分为主动模式和被动模式
主动模式:服务器主动发起数据连接
被动模式:服务器被动等待数据连接
主动模式流程图
主动模式工作原理:FTP客户端连接到FTP服务器的21号端口,发送用户名、密码和连接模式命令端口等,客户端随机开放一个端口(1024以上),发送PORT命令到FTP服务器,告知服务器客户端采用主动模式并开放端口,FTP服务器收到PORT主动模式命令和端口后,通过服务器的20号端口和客户端开放的端口连接,发送数据。
主动模式有个弊端,客户端必须关闭防护墙,否则不能传输数据。
被动模式流程图
被动模式工作原理:PASV是Passive的缩写,中文成为被动模式。FTP客户端连接到FTP服务器所监听的21号端口,发送用户名和密码,发送PASV命令到FTP服务器,服务器在本地也随机开放一个端口(1024以上),然后把开放的端口告知客户端,而后客户端再连接到服务器开放的端口进行数据传输,原理如图所示。
注:以上的说明主动和被动,是相对于的FTP server端而判断,如果server去连接client开放的端口,说明是主动的,相反如果client去连接server开放的端口,则是被动。
搭建与配置FTP服务
安装防火墙和增强型安全功能
[root@localhost ~]# hostnamectl set-hostname ftp
[root@localhost ~]# systemctl stop firewalld #关闭防火墙
[root@localhost ~]# systemctl disable firewalld #开机自关闭防火墙
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0 #临时关闭增强型安全功能
[root@localhost ~]# yum install -y vsftpd
[root@localhost ~]# cd /etc/vsftpd
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@localhost vsftpd]# rpm -qa | grep vsftpd #查看vsftp信息
vsftpd-3.0.2-29.el7_9.x86_64
[root@localhost vsftpd]# systemctl start vsftpd #开启ftp服务
[root@localhost vsftpd]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@localhost vsftpd]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2022-06-16 14:12:32 CST; 36s ago
Main PID: 56184 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─56184 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
6月 16 14:12:32 ftp systemd[1]: Starting Vsftpd ftp daemon...
6月 16 14:12:32 ftp systemd[1]: Started Vsftpd ftp daemon.
[root@localhost vsftpd]# cp vsftpd.conf vsftpd.conf.bak #备份文件
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
[root@localhost vsftpd]# chmod -R 777 /var/ftp/pub
[root@localhost vsftpd]# ll /var/ftp
总用量 0
drwxrwxrwx. 2 root root 6 6月 10 2021 pub
[root@localhost vsftpd]# systemctl restart vsftpd
匿名访问测试:
在Windows系统打开开始菜单,输入cmd 命令打开命令提示符
#建立ftp连接
ftp 192.168.80.10
#匿名访问,用户名为ftp,密码为空,直接回车即可完成登录
ftp> pwd #匿名访问ftp的根目录为Linux系统的/var/ftp/目录
ftp> ls #查看当前目录
ftp> cd pub #切换到pub目录
ftp> get文件名 #下载文件到当前Windows本地目录
ftp> put 文件名 #上传文件到ftp目录
ftp> quit #退出
设置本地用户验证访问ftp,并禁止切换到ftp以外的目录(默认登录的根目录为本地用户的家目录)
#修改配置文件
vim /etc/vsftpd/vsftpd. conf
[root@localhost pub]# mkdir -p /var/www/haxi
[root@localhost pub]# chmod -R 777 /var/www/haxi
[root@localhost pub]# useradd xxxl
[root@localhost pub]# echo "ABC123" | passwd --stdin xxxl
更改用户 xxxl 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost pub]# systemctl restart vsftpd
设置黑白名单
[root@localhost haxi]# vim /etc/vsftpd/vsftpd.conf
[root@localhost haxi]# vim /etc/vsftpd/user_list
[root@localhost haxi]# systemctl restart vsftpd
ocalhost haxi]# vim /etc/vsftpd/user_list
[外链图片转存中...(img-pR3SXydt-1655685589996)]
[root@localhost haxi]# systemctl restart vsftpd
[外链图片转存中...(img-3HCQZqnU-1655685589996)]