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