什么是 FTP

文件传输协议(File Transfer Protocol,FTP)是一个用于在计算机网络中的客户端和服务器之间进行文件传输的应用层协议。

FTP 服务一般运行在 20 和 21 两个端口。端口 20 用于在客户端和服务器之间传输数据流,端口 21 用于传输控制流。

FTP 的工作模式

主动模式

主动模式要求客户端和服务器同时打开并监听一个端口以创建连接。主动模式(Active Mode)的工作过程如下。

第 1 步:客户端随机开启大于 1024 的 X 端口与服务器的 21 端口建立连接通道,通道建立后,客户端随时可以通过该通道发送上传或下载的命令。

第 2 步:当客户端需要与服务器进行数据传输时,客户端会再开启一个大于 1024 的随机端口 Y,并将 Y 端口号通过之前的命令通道传输给服务器的 21 端口。

第 3 步:服务器获取客户端的第二个端口号后会主动连接客户端的该端口,通过 3 次“握手”后,完成服务器与客户端数据通道的建立,所有的数据均通过该数据通道进行传输。

被动模式

由于客户端安装了防火墙,有时会产生一些问题,被动模式只要求服务器产生一个监听相应端口的进程,这样就可以绕过客户端安装的防火墙。被动模式(Passive Mode)的工作过程如下。

第 1 步:客户端随机开启大于 1024 的 X 端口,与服务器的 21 端口建立连接通道。

第 2 步:当客户端需要与服务器进行数据传输时,客户端从命令通道发送数据请求——上传或下载数据。

第 3 步:服务器收到数据请求后会随机开启一个端口 Y,并通过命令通道将该端口信息传输给客户端。

第 4 步:客户端在收到服务器发送过来的数据端口 Y 的信息后,将在客户端本地开启一个随机端口 Z,此时客户端再主动通过本机的 Z 端口与服务器的 Y 端口进行连接,通过 3 次“握手”完成连接后,即可进行数据传输。

安装 FTP 实验

实验目的

在 CentOS 系统上搭建并配置 VSFTPD(Very Secure FTP Daemon)服务器,实现文件的上传和下载。

实验环境

一台安装了 CentOS 系统的虚拟机或物理机。

实验步骤

0. 环境准备


# 检查自己的虚拟机是否可以访问公网

ping baidu.com

# 切换管理员账号

su root # 输入密码

#切换虚拟机的软件源地址,使用腾讯的centos 软件源

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tencent.com/repo/centos7_base.repo


# 如果以上命令都不行,请使用下面这个:

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

image.png

1. 安装 VSFTPD


# 安装vsftpd

yum install vsftpd -y

image.png

vsftpd是very secure FTP daemon的缩写,是一款非常安全的FTP软件,安全性是它最大的特点。

2.启动并设置开机自启


systemctl start vsftpd

systemctl enable vsftpd

image.png

3. 配置防火墙规则

开放 FTP 服务所需的端口(20、21)。


firewall-cmd --permanent --add-service=ftp

firewall-cmd --reload

image.png

4. 创建 FTP 用户并设置权限


useradd ftpuser

passwd ftpuser # 设置用户密码

chmod -R 755 /home/ftpuser # 设置用户主目录权限

5. 配置 VSFTPD

编辑 /etc/vsftpd/vsftpd.conf 文件。


vim /etc/vsftpd/vsftpd.conf

确保以下配置项:


anonymous_enable=NO # 禁用匿名访问

local_enable=YES # 启用本地用户访问

write_enable=YES # 允许写入

local_umask=022 # 设置文件上传的权限掩码

chroot_local_user=YES # 将用户限制在其主目录内

allow_writeable_chroot=YES # 允许可写的 chroot 环境

保存并重启 VSFTPD 服务。

systemctl restart vsftpd

6. 测试 FTP 服务

使用 FTP 客户端(如 Xftp 点击下载)连接到服务器,使用之前创建的 ftpuser 账号进行登录,尝试上传和下载文件。

image.png

在虚拟机中查看/home/ftpuser 目录中是否有刚刚上传的文件。

image.png