FTP是什么,FTP安装部署教程(新手必看)
文件传输协议(File Transfer Protocol,FTP)是 TCP/IP 协议组中的协议之一。可以这样理解,FTP 既是用于在网络上进行文件传输的一套标准协议,又是一类工具的统称。
作为工具,FTP 是目前因特网历史最悠久的网络工具,基于不同的操作系统会有各种不同的 FTP 工具,而这些 FTP 工具在开发的时候都遵守同一种协议(FTP)来实现文件传输。
一套完整的 FTP 工具分为服务端和客户端,服务端搭建在服务器上提供 FTP 服务,FTP 服务默认监听在 TCP 21 端口上,主要用来存储文件。用户可以使用 FTP 客户端,通过 FTP 协议访问位于 FTP 服务器上的资源,并将文件下载到本地,服务器也可以允许客户端将本地文件上传至服务器。
一个完整的 FTP 文件传输需要建立两种类型的连接。一种为文件传输命令,称为 FTP 控制连接;另一种实现真正的文件传输,称为 FTP 数据连接。
当客户端希望与FTP服务器建立上传下载的数据传输时,它会向服务器的 TCP 21 端口发起一个建立连接的请求,FTP 服务器接受来自客户端的请求,完成连接的建立,这样的连接就称为 FTP 控制连接。此连接会一直在线,等待着客户端的请求。
当 FTP 控制连接建立之后,客户端就会发起数据的上传/下载请求,接着就开始传输文件了,传输文件的连接称为 FTP 数据连接。当客户端发起数据传输请求时,才打开这个连接,当数据传输完成后,关闭这个连接,按需打开,按需关闭。
其实数据连接的过程就是FTP传输数据的过程,它有两种传输模式:主动模式(PORT)和被动模式(PASV)。这两种模式都是从服务器的角度出发的:
先举一个主动模式的例子,客户端向 FTP 服务器的 21 端口发送一条连接请求,FTP 服务器接受连接,这时就建立起了一条控制链路。当需要传输数据时,客户端就在控制链路上用 PORT 命令告诉 FTP 服务器:“我已开放了某端口,快来连接我吧”。于是 FTP 服务器就从 2 0端口向客户端已开放的端口发送一条连接请求,当客户端接受请求之后,数据链路就建成了,可以传输数据了。
再举一个被动模式的例子。客户端向 FTP 服务器的 21 端口发送一条连接请求,FTP 服务器接受连接,这时就建立起了一条控制链路。当需要传输数据时,FTP 服务器就在控制链路上用 PASV 命令告诉客户端:“我已开放了某端口,快来连接我吧”。于是客户端就向 FTP 服务器已开放的端口发送一条连接请求,当 FTP 服务器接受请求之后,数据链路就建成了,可以传输数据了。
看到以上描述可能有读者会疑惑,不是只占用 21 端口吗,为什么下图中又多出了 20 端口和随机端口?

图 1 主动模式(PORT)和被动模式(PASV)
有的资料会解释为 FTP 服务器使用 TCP 的 20 和 21 端口,这是不太准确的,甚至会误导大家,实际上,FTP 服务在主动模式下会将 TCP 的 21 端口用于控制连接,将 TCP 的 20 端口用于数据连接;而在被动模式下,21 端口还是用来进行控制连接,但用于数据连接的端口却变成了随机端口。所以,Linux 运维工程师在设计防火墙规则时一定要了解 PORT 和 PASV 两种模式的工作原理。
PORT 和 PASV 这两种模式哪一种好呢?其实 PORT 和 PASV 之间最大的区别就是数据端口连接方式不同,站在网络安全的角度来看,PORT 模式会更安全一些,因为它使用的是固定端口,更有利于防火墙对服务器端口的防护;而 PASV 模式是为了解决黑客偷偷抓取数据的隐患,因为在 PORT 模式中,20 端口是固定的,用来传输数据,比较容易被类似 sniffer 的嗅探器嗅探到,改成随机端口会大大提高窃取数据的难度。
vsftp 的全称叫 Very Secure FTP,是一款完全免费的、开放源代码的 FTP 服务器软件,其特点有小巧轻快、安全易用、稳定、支持虚拟用户、支持带宽限制等。目前 vsftp 的市场应用十分广泛,很多国际性的大公司和自由开源组织都在使用,例如,Red Hat、Debian、CentOS、Suse、Ubuntu、Rocky Linux等。
vsftp 工具拥有用户验证和设置文件权限的功能,这使得 Linux 运维工程师可以更好地进行管理,例如管控用户对文件的下载权限、上传权限和读权限等。
vsftpd 服务(由vsftp工具提供)允许用户使用 3 种方式进行登录:
vsftp 工具的安装过程也非常简单,若通过 dnf/yum 软件包管理器安装,则使用命令 dnf-y install vsftpd 即可,而且这条命令适用于 Red Hat、CentOS、Fedora 和 Rocky Linux 操作系统。
【实例】在 Rocky Linux 操作系统上安装 vsftp 工具。
vsftp 工具安装完成后,其主要配置文件路径如下:
主配置文件中每一行配置的含义如下:
接下来我们就将 vsftp 工具的本地用户登录模式实践一遍,具体步骤如下。
1) 创建用户。

图 2 在地址栏中输入FTP服务器地址
2) 通过Windows文件夹管理器连接到 FTP 服务器。
3) 连接完成后,在空白区域右键单击登录,如下图所示。

图 3 在空白区域右键单击登录
4) 输入刚创建的用户名与密码,单击“登录”按钮,如下图所示。

图 4 输入刚创建的用户名与密码
5) 使用本地用户模式登录到 FTP 服务器,如下图所示。此时 Windows 文件夹管理器就相当于一个FTP客户端,可以在这里上传文件、下载文件、删除文件等。

图 5 使用本地用户模式登录到FTP服务器
我们拖动上传一个新文件夹测试一下,如下图所示。

图 6 拖动上传一个新文件夹
注意,此时所在的位置就是 clinux 用户的家目录,当往这里上传一个文件夹后,在 Linux 操作系统中的 clinux 用户家目录中就出现了一个测试文件,示例如下:
作为工具,FTP 是目前因特网历史最悠久的网络工具,基于不同的操作系统会有各种不同的 FTP 工具,而这些 FTP 工具在开发的时候都遵守同一种协议(FTP)来实现文件传输。
一套完整的 FTP 工具分为服务端和客户端,服务端搭建在服务器上提供 FTP 服务,FTP 服务默认监听在 TCP 21 端口上,主要用来存储文件。用户可以使用 FTP 客户端,通过 FTP 协议访问位于 FTP 服务器上的资源,并将文件下载到本地,服务器也可以允许客户端将本地文件上传至服务器。
一个完整的 FTP 文件传输需要建立两种类型的连接。一种为文件传输命令,称为 FTP 控制连接;另一种实现真正的文件传输,称为 FTP 数据连接。
当客户端希望与FTP服务器建立上传下载的数据传输时,它会向服务器的 TCP 21 端口发起一个建立连接的请求,FTP 服务器接受来自客户端的请求,完成连接的建立,这样的连接就称为 FTP 控制连接。此连接会一直在线,等待着客户端的请求。
当 FTP 控制连接建立之后,客户端就会发起数据的上传/下载请求,接着就开始传输文件了,传输文件的连接称为 FTP 数据连接。当客户端发起数据传输请求时,才打开这个连接,当数据传输完成后,关闭这个连接,按需打开,按需关闭。
其实数据连接的过程就是FTP传输数据的过程,它有两种传输模式:主动模式(PORT)和被动模式(PASV)。这两种模式都是从服务器的角度出发的:
- 服务器主动连接客户端,就是主动模式(PORT);
- 服务器处于监听状态,等待客户端连接,就是被动模式(PASV)。
先举一个主动模式的例子,客户端向 FTP 服务器的 21 端口发送一条连接请求,FTP 服务器接受连接,这时就建立起了一条控制链路。当需要传输数据时,客户端就在控制链路上用 PORT 命令告诉 FTP 服务器:“我已开放了某端口,快来连接我吧”。于是 FTP 服务器就从 2 0端口向客户端已开放的端口发送一条连接请求,当客户端接受请求之后,数据链路就建成了,可以传输数据了。
再举一个被动模式的例子。客户端向 FTP 服务器的 21 端口发送一条连接请求,FTP 服务器接受连接,这时就建立起了一条控制链路。当需要传输数据时,FTP 服务器就在控制链路上用 PASV 命令告诉客户端:“我已开放了某端口,快来连接我吧”。于是客户端就向 FTP 服务器已开放的端口发送一条连接请求,当 FTP 服务器接受请求之后,数据链路就建成了,可以传输数据了。
看到以上描述可能有读者会疑惑,不是只占用 21 端口吗,为什么下图中又多出了 20 端口和随机端口?

图 1 主动模式(PORT)和被动模式(PASV)
有的资料会解释为 FTP 服务器使用 TCP 的 20 和 21 端口,这是不太准确的,甚至会误导大家,实际上,FTP 服务在主动模式下会将 TCP 的 21 端口用于控制连接,将 TCP 的 20 端口用于数据连接;而在被动模式下,21 端口还是用来进行控制连接,但用于数据连接的端口却变成了随机端口。所以,Linux 运维工程师在设计防火墙规则时一定要了解 PORT 和 PASV 两种模式的工作原理。
注意,FTP 服务器默认工作在 PORT 模式下。
PORT 和 PASV 这两种模式哪一种好呢?其实 PORT 和 PASV 之间最大的区别就是数据端口连接方式不同,站在网络安全的角度来看,PORT 模式会更安全一些,因为它使用的是固定端口,更有利于防火墙对服务器端口的防护;而 PASV 模式是为了解决黑客偷偷抓取数据的隐患,因为在 PORT 模式中,20 端口是固定的,用来传输数据,比较容易被类似 sniffer 的嗅探器嗅探到,改成随机端口会大大提高窃取数据的难度。
FTP服务的安装部署
能够实现 FTP 服务的工具有很多,在 Linux 操作系统中,默认自带的 FTP 工具为 vsftp。vsftp 的全称叫 Very Secure FTP,是一款完全免费的、开放源代码的 FTP 服务器软件,其特点有小巧轻快、安全易用、稳定、支持虚拟用户、支持带宽限制等。目前 vsftp 的市场应用十分广泛,很多国际性的大公司和自由开源组织都在使用,例如,Red Hat、Debian、CentOS、Suse、Ubuntu、Rocky Linux等。
vsftp 工具拥有用户验证和设置文件权限的功能,这使得 Linux 运维工程师可以更好地进行管理,例如管控用户对文件的下载权限、上传权限和读权限等。
vsftpd 服务(由vsftp工具提供)允许用户使用 3 种方式进行登录:
- 匿名用户模式:任何人都可以不需要验证方式直接登录连接,访问的目录在 /var/ftp 下,一般用来分享不重要的文件。
- 本地用户模式:使用本地用户登录,访问目录是登录用户的家目录,配置较简单。
- 虚拟用户模式:建立单独的用户数据库文件,虚拟用户用口令进行验证。
vsftp 工具的安装过程也非常简单,若通过 dnf/yum 软件包管理器安装,则使用命令 dnf-y install vsftpd 即可,而且这条命令适用于 Red Hat、CentOS、Fedora 和 Rocky Linux 操作系统。
【实例】在 Rocky Linux 操作系统上安装 vsftp 工具。
[root@clinux ~]# dnf -y install vsftpd 依赖关系解决 ======================================================================== 软件包 架构 版本 仓库 大小 ======================================================================== 安装: vsftpd x86_64 3.0.3-34.el8 appstream 180 k 事务概要 ========================================================================= 安装 1 软件包 ---省略部分内容--- 已安装: vsftpd-3.0.3-34.el8.x86_64 完毕! [root@clinux ~]# systemctl start vsftpd #启动 vsftpd 服务 [root@clinux ~]# ps -ef | grep vsftpd #查看 vsftpd 进程 root 39422 1 0 14:41 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf root 39424 4039 0 14:41 pts/0 00:00:00 grep --color=auto vsftpd [root@clinux ~]# netstat -anpt | grep vsftpd #查看其占用的端口号 tcp6 0 0 :::21 :::* LISTEN 39422/vsftpd
vsftp 工具安装完成后,其主要配置文件路径如下:
- /usr/sbin/vsftpd:可执行文件(主程序);
- /usr/lib/systemd/system/vsftpd.service:启动脚本;
- /etc/vsftpd/vsftpd.conf:主配置文件;
- /etc/pam.d/vsftpd:PAM 认证文件;
- /etc/vsftpd/ftpusers:禁止使用 vsftp 的用户列表文件;
- /etc/vsftpd/user_list:禁止或允许使用 vsftp 的用户列表文件;
- /var/ftp:匿名用户主目录。
主配置文件中每一行配置的含义如下:
[root@localhost ~]# cd /etc/vsftpd/ [root@localhost vsftpd]# ls ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh [root@localhost vsftpd]# cat vsftpd.conf #这个主配置文件是一个模板文件,并没有包含 vsftpd 的所有配置选项 #可以通过 man 手册全面了解 vsftpd 的所有功能 #是否允许匿名登录 FTP 服务器,设置为 YES 表示允许,为 NO 表示不允许 #匿名用户登录后会进入/var/ftp/目录下 #若想关闭匿名用户登录,只需要在此选项前面加上“#”注释掉即可 anonymous_enable=YES #是否允许本地用户登录 FTP 服务器,设置为 YES 表示允许,为 NO 表示不允许 #本地用户登录后会进入用户家目录下 local_enable=YES #是否允许本地用户对 FTP 服务器中的文件具备写权限,默认设置为 YES(允许),设置为 NO 表示不允许 write_enable=YES #本地用户上传文件的权限掩码 local_umask=022 #是否允许匿名用户上传文件,需要先将 write_enable 设置为 YES #anon_upload_enable=YES #是否允许匿名用户创建新文件夹 #anon_mkdir_write_enable=YES #是否显示目录说明文件 dirmessage_enable=YES #是否生成上传/下载文件的日志记录 #默认日志文件位置:/var/log/vsftpd.log xferlog_enable=YES #是否启用 20 端口作为固定的数据端口 connect_from_port_20=YES #设置是否允许改变上传文件的属主 #chown_uploads=YES #设置改变上传文件的属主为谁,输入系统用户 #chown_username=whoever #设置日志文件位置,默认是/var/log/vsftpd.log #xferlog_file=/var/log/xferlog #是否以标准 xferlog 格式书写传输日志文件 xferlog_std_format=YES #设置数据传输中断间隔时间,默认空闲的用户会话中断时间为 600s #idle_session_timeout=600 #设置数据连接超时时间,默认数据连接超时时间为 120s #data_connection_timeout=120 #使用特殊用户 ftpsecure,把 ftpsecure 视作一般访问用户 #所有连接 FTP 服务器的用户都具有 ftpsecure 用户名 #nopriv_user=ftpsecure #是否识别异步 ABOR 请求 #async_abor_enable=YES #是否以 ASCII 方式传输数据 #在默认情况下,服务器会忽略 ASCII 方式的请求,启用此选项将允许服务器以 ASCII 方式传输数据 #ascii_upload_enable=YES #ascii_download_enable=YES #登录 FTP 服务器时显示的欢迎信息 #ftpd_banner=Welcome to blah FTP service. #email 黑名单设置。 #deny_email_enable=YES #黑名单文件位置,需手动创建 #banned_email_file=/etc/vsftpd/banned_emails #是否将所有用户都限制在自己的主目录中,YES 为启用,默认为 NO(禁用) #chroot_local_user=YES #是否启动限制用户的名单,YES 为启用,NO 为禁用 #chroot_list_enable=YES #是否限制在主目录下的用户名单 #chroot_list_file=/etc/vsftpd/chroot_list #是否允许递归查询,默认为关闭 #ls_recurse_enable=YES #是否以独立运行的方式监听服务 listen=NO #设定是否支持 IPv6 listen_ipv6=YES #设置 PAM 外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd 文件 pam_service_name=vsftpd #是否开启用户列表访问控制 userlist_enable=YES #是否使用 tcp_wrappers 作为主机访问控制方式 tcp_wrappers=YES
接下来我们就将 vsftp 工具的本地用户登录模式实践一遍,具体步骤如下。
1) 创建用户。
[root@clinux ~]# useradd clinux [root@clinux ~]# passwd clinux 更改用户 clinux 的密码 新的密码: 无效的密码:密码少于 8 个字符 重新输入新的密码: passwd: 所有的身份验证令牌已经成功更新 [root@clinux ~]#在 Windows 上进行验证,任意打开一个文件夹,在地址栏中输入 FTP 服务器地址,回车即可,如下图所示。其语法格式为:
ftp://FTP服务器IP地址/

图 2 在地址栏中输入FTP服务器地址
2) 通过Windows文件夹管理器连接到 FTP 服务器。
3) 连接完成后,在空白区域右键单击登录,如下图所示。

图 3 在空白区域右键单击登录
4) 输入刚创建的用户名与密码,单击“登录”按钮,如下图所示。

图 4 输入刚创建的用户名与密码
5) 使用本地用户模式登录到 FTP 服务器,如下图所示。此时 Windows 文件夹管理器就相当于一个FTP客户端,可以在这里上传文件、下载文件、删除文件等。

图 5 使用本地用户模式登录到FTP服务器
我们拖动上传一个新文件夹测试一下,如下图所示。

图 6 拖动上传一个新文件夹
注意,此时所在的位置就是 clinux 用户的家目录,当往这里上传一个文件夹后,在 Linux 操作系统中的 clinux 用户家目录中就出现了一个测试文件,示例如下:
[root@clinux ~]# cd /home/clinux/ #打开 clinux 用户的家目录 [root@clinux clinux]# ls 新文件夹 TEST.txt [root@clinux clinux]# cat TEST.txt 测试 FTP 服务的文件!!!!!!!!! [root@clinux clinux]#