文件传输协议(File Transfer Protocol,FTP)该协议工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层。因为需要可靠的连接,使用 TCP 传输,使用的默认端口是:20、21。
20端口作为数据传输,21端口作为控制传输。
二、FTP的工作模式工作模式有主动模式(PORT)和被动模式(PASV)。
1、PORT(主动模式)
PORT中文称为主动模式。
工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码进行登录,登录成功后要查看或读取数据时,客户端会随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口。FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。
2、PASV(被动模式)
PASV是Passive的缩写,中文称为被动模式。
工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要查看或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端也会随机开放一个端口(1024以上),再连接到服务器开放的端口进行数据传输。
三、简述两种模式的差别简单来说:
主动模式是和服务器进行传输前,服务器主动发起请求并提供20端口给客户端进行连接。
被动模式是和服务器进行传输前,客户端主动发起请求,请求后服务器随机开放一个端口(1024以上),客户端进行连接。
无论是主动模式还是被动模式,客户端都使用1024及以上的端口进行连接服务器。
四、搭建FTP服务器搭建ftp服务器需要使用vsftpd包
安装vsftpd包:
yum install -y vsftpd
设置为开机自启动并启动服务:
systemctl enable vsftpd systemctl start vsftpd
查看ftp的端口:
netstat -antup | grep ftp
查看ftp服务的状态:
systemctl status vsftpd
配置vsftpd:
vsftpd安装后默认开启了匿名FTP功能,使用匿名FTP,用户无需输入用户名密码即可登录FTP服务器,但没有权限修改或上传文件。
用户如果试图使用Linux操作系统中的账号登录服务器,就会被拒绝,但可以在vsftpd里配置用户账号和密码登录。
先创建个ftp用户:
useradd ftpadmin
配置ftp用户的密码:
passwd ftpadmin
将用户写进配置文件/etc/vsftpd/user_list
vi /etc/vsftpd/user_list ftpadmin
创建ftp的共享目录:
mkdir /ftp
修改该文件的所有者:
chown -R ftpadmin:ftpadmin /ftp
修改配置文件:
配置文件的地址/etc/vsftpd/vsftpd.conf
编辑配置文件:
vi /etc/vsftpd/vsftpd.conf
可以根据实际需求选择将FTP配置为主动模式或者被动模式。
配置主动模式:
#允许匿名登录FTP服务器,允许本地用户登录FTP服务器,并指定FTP本地用户使用的文件目录。 anonymous_enable=NO #不允许匿名登录FTP服务器 local_enable=YES #允许本地用户登录FTP服务器 local_root=/ftp/ #FTP本地用户使用的文件目录 #限制用户只能访问自身的主目录。 chroot_local_user=YES #所有用户都被限制在其主目录 chroot_list_enable=YES #启用例外用户名单 chroot_list_file=/etc/vsftpd/chroot_list #例外用户名单 allow_writeable_chroot=YES #允许用户的写权限
配置被动模式:
被动模式除了需要配置主动模式所需的所有参数外,还需要配置以下参数
#设置以下参数,配置FTP支持被动模式。并指定FTP服务器的公网IP地址,以及可供访问的端口范围,端口范围请根据实际环境进行设置。
listen=YES
listen_ipv6=NO
pasv_address=xx.xx.xx.xx #FTP服务器的公网IP地址
pasv_min_port=3000 #被动模式下的最小端口
pasv_max_port=3100 #被动模式下的最大端口
配置完保存好退出
然后进入/etc/vsftpd 目录下创建chroot_list文件。
cd /etc/vsftpd touch chroot_list
chroot_list文件是配置只能访问主目录的例外用户名单。如果需要设置某个用户不受只可以访问其主目录的限制,可将对应的用户名写入该文件。如果没有例外也必须要有chroot_list文件,内容可以为空。
配置文件修改后需要重启vsftpd服务才能让配置生效
systemctl restart vsftpd.service五、要设置好系统防火墙
测试场景下可以关闭防火墙
systemctl stop firewalld
主动模式默认要放通20和21端口,如果修改过端口,按照修改的端口放通
被动模式要放通21端口和配置文件/etc/vsftpd/vsftpd.conf中参数 pasv_min_port和pasv_max_port之间的所有端口
客户端测试
打开客户端的计算机,在路径栏输入
ftp://FTP服务器IP地址:FTP端口 (不填端口则默认访问21端口)
弹出输入用户名和密码的对话框表示配置成功,输入正确的用户名和密码后,可以对FTP目录进行相应权限的操作。
注意:
如果FTP服务器配置为主动模式,客户端使用此方法访问FTP站点时,需要对IE浏览器进行设置,才能打开FTP的文件夹。打开IE浏览器,选择“工具 > Internet 选项 > 高级”。勾选“启用FTP文件夹视图”,取消勾选“使用被动FTP”。
使用浏览器访问FTP服务器出错时,先清除浏览器缓存后再尝试。
新版的edge浏览器只能在文件资源管理器中打开 FTP 站点



