文章目录
- 前言
- 一、FTP服务概述
- 1.1 FTP基本定义
- 1.2 VSFTP模式分类
- 1.3 FTP端口作用
- 二、FTP作用与工作原理(重点)
- 2.1 FTP的作用、模式及通信方式
- 2.1.1 FTP核心作用
- 2.1.2 VSFTP模式与通信协议
- 2.2 FTP工作原理与流程
- 2.2.1 主动模式工作原理
- 2.2.2 被动模式工作原理
- 2.3 FTP相关扩展知识
- 2.3.1 不同操作系统的FTP服务软件
- 2.3.2 类似文件传输协议
- 三、FTP服务搭建与配置
- 3.1 安装前准备工作
- 3.1.1 关闭防火墙与增强型安全功能
- 3.1.2 检查与安装VSFTP软件
- 3.1.3 开启并设置VSFTP服务自启
- 3.1.4 切换配置目录并备份配置文件
- 3.2 匿名用户访问配置与测试
- 3.2.1 匿名用户访问配置(最大权限)
- 3.2.2 匿名用户访问测试(Windows客户端)
- 3.3 用户模式登录配置与测试
- 3.3.1 本地用户访问配置(禁锢目录)
- 3.3.2 本地用户登录测试
- 3.3.3 修改默认根目录
- 3.3.4 配置用户列表(黑白名单)
- 四、FTP拓展命令
- 总结
前言
在互联网数据交互与文件共享场景中,文件传输协议FTP
凭借其可靠的连接特性与成熟的C/S架构,成为应用广泛的文件传输解决方案。
本文档围绕FTP
服务展开,系统梳理FTP
的核心概念、工作原理、端口作用,重点讲解主流的VSFTP
服务(Very Secure FTP)在主动/被动模式下的运行机制,同时提供从服务搭建、配置文件修改到匿名用户与本地用户登录测试的完整实践流程,旨在帮助学习者全面理解FTP
服务,并具备独立部署与配置FTP
服务的实操能力。
一、FTP服务概述
1.1 FTP基本定义
FTP
(File Transfer Protocol,文件传输协议)是典型的C/S(客户端/服务器)架构应用层
协议,需由服务端软件与客户端软件协同工作,实现文件传输功能。FTP客户端与服务器之间的连接基于TCP协议
,属于可靠的、面向连接的连接方式,能为数据传输提供稳定保障。FTP
使用21端口
: 用于传输指令,20端口
:用于传输数据。
1.2 VSFTP模式分类
VSFTP(Very Secure FTP,极安全FTP)作为主流的FTP服务实现,其数据传输支持两种核心模式:主动方式(Standard/Active模式)和被动方式(Passive/PASV模式)
- 主动模式
- 服务器从20端口出来连接客户端的指定端口
- 注意:客户端的防火墙很容易去拒绝服务端外来连接,可能会导致失败
- 被动模式
- 服务器被动打开一个随机高位端口(1024~5000),等待客户端进来连接
- 优势: 避免了客户端的防护墙的问题,但是这里要服务器配置好放行随机端口的防火墙的规则
主动模式
:服务器主动发起数据连接
被动模式
:服务器被动等待数据连接
1.3 FTP端口作用
FTP服务依赖TCP协议的两个固定端口实现不同功能,具体作用如下:
- 21端口:专用端口,用于建立控制连接,传输FTP控制指令(如登录命令、文件操作指令等)。
- 20端口:专用端口,仅在主动模式下用于建立数据连接,传输文件数据(如文件内容、目录列表等);被动模式下数据传输端口为服务器随机开放的1024-5000之间的端口。
二、FTP作用与工作原理(重点)
2.1 FTP的作用、模式及通信方式
2.1.1 FTP核心作用
FTP是Internet中用于实现文件传输的标准协议,可支持不同操作系统(如Windows、Linux)之间的文件上传、下载、删除、重命名等操作,广泛应用于网站文件更新、数据备份、资源共享等场景。
2.1.2 VSFTP模式与通信协议
- 运行模式:VSFTP遵循C/S(客户端/服务器)模式,需服务端部署VSFTP软件并启动服务,客户端通过FTP客户端工具(如Windows命令提示符、FileZilla等)发起连接请求。
- 通信协议:FTP服务器默认使用TCP协议与客户端通信,核心依赖20(主动模式数据传输)、21(控制连接)两个端口,确保指令传输与数据传输的可靠性。
2.2 FTP工作原理与流程
FTP会话始终包含两个独立通道:控制通道与数据传输通道,两种模式(主动、被动)的核心区别在于数据传输通道的建立方式,均以FTP Server为参照判断“主动/被动”——服务器主动发起数据连接为主动模式,服务器被动等待数据连接为被动模式
。
2.2.1 主动模式工作原理
1、客户端发送FTP请求(包含用户名、密码、连接模式命令PORT和自己开放的用于自身接收数据的端口)
2、FTP服务器进行响应(ACK),服务器21号端口和客户高位端口1进行FTP会话连接。
3、FTP服务器从自己的20
端口连接客户端发送连接请求时主动发送的端口。
4、最后客户端发送ACK确认,开始数据传输。
2.2.2 被动模式工作原理
1、客户端发送FTP连接请求(包含用户、密码、连接模式命令PASV)
2、FTP服务器响应(ACK),服务器21号端口和客户端(高位端口)建立FTP连接,这个响应过程会告诉客户端,服务器开放一个高位端口等你来连接
3、客户端从自己的一个高位端口连接服务器响应的高位端口
4、服务器给客户端一个ACK响应,接下来进行数据传输过程。
2.3 FTP相关扩展知识
2.3.1 不同操作系统的FTP服务软件
- Windows系统:常用FTP服务软件包括Serv-U、FTP Server、FileZilla Server等,操作界面友好,适合图形化管理需求。
- Linux系统:主流FTP服务软件有ProFTPD,而Very Secure FTP(vsftp) 因安全性高、稳定性强,是实际工作环境中最常用的FTP服务软件。
2.3.2 类似文件传输协议
- TFTP(Trivial File Transfer Protocol,简单文件传输协议):基于UDP协议,使用69号端口,功能简单,仅支持文件上传与下载,适用于小型嵌入式设备或简单数据传输场景。
- SFTP(SSH File Transfer Protocol,SSH文件传输协议):基于SSH(Secure Shell)协议,通过加密通道传输文件,安全性远高于FTP,适合对数据传输安全性要求较高的场景。
三、FTP服务搭建与配置
3.1 安装前准备工作
3.1.1 关闭防火墙与增强型安全功能
为避免防火墙及系统增强型安全功能阻止FTP服务的端口通信,需先执行以下命令关闭相关功能:
systemctl stop firewalld # 临时关闭防火墙服务。
systemctl disable firewalld # 设置开机自动关闭防火墙,确保后续重启系统后防火墙不会影响FTP服务。
setenforce 0 # 临时关闭系统增强型安全功能(SELinux),消除权限限制对FTP服务的影响。
3.1.2 检查与安装VSFTP软件
- 检查系统是否已安装VSFTP软件,执行以下任一命令:
yum info vsftpd # 通过yum包管理器查看vsftpd软件的详细信息,包括是否已安装、版本号等。
rpm -q | grep vsftp # 通过rpm命令查询系统中是否存在与vsftp相关的安装包。
2. 若未安装VSFTP软件,执行yum install -y vsftpd
命令,通过yum包管理器自动安装vsftpd及相关依赖包。
yum install -y vsftpd
3.1.3 开启并设置VSFTP服务自启
- 启动VSFTP服务:执行
systemctl start vsftpd
命令,启动FTP服务。 - 设置开机自启:执行
systemctl enable vsftpd
命令,配置VSFTP服务在系统开机时自动启动,避免每次重启后手动启动服务。
systemctl start vsftpd
systemctl enable vsftpd #开机自启FTP服务
3.1.4 切换配置目录并备份配置文件
- 切换到VSFTP服务的配置文件目录:执行
cd /etc/vsftpd/
命令,进入该目录(vsftpd的核心配置文件均存放于此)。 - 备份配置文件:执行
cp vsftpd.conf vsftpd.conf.bak
命令,将默认配置文件vsftpd.conf
备份为vsftpd.conf.bak
,防止后续配置修改出错后无法恢复默认设置。
cd /etc/vsftpd/
cp vsftpd.conf vsftpd.conf.bak
3.2 匿名用户访问配置与测试
3.2.1 匿名用户访问配置(最大权限)
通过修改VSFTP主配置文件,开启匿名用户访问并赋予最大操作权限,具体步骤如下:
- 编辑配置文件:执行
vim /etc/vsftpd/vsftpd.conf
命令,打开主配置文件。 - 调整配置参数(按需求修改或添加以下参数):
anonymous_enable=YES
:开启匿名用户访问功能,默认已开启。write_enable=YES
:开放服务器的写权限,若需实现文件上传,必须开启此参数,默认已开启。anon_umask=022
:设置匿名用户上传文件的权限掩码(反掩码),通过该参数控制上传文件的默认权限(如022对应文件权限为644,目录权限为755)。anon_upload_enable=YES
:允许匿名用户上传文件,默认配置文件中该参数被注释,需取消注释启用。anon_mkdir_write_enable=YES
:允许匿名用户创建(上传)目录,默认配置文件中该参数被注释,需取消注释启用。anon_other_write_enable=YES
:允许匿名用户执行删除、重命名、覆盖文件等操作,默认配置文件中无此参数,需手动添加。
- 重启vsftp服务
systemctl restart vsftp
- 设置目录权限:执行
chmod 777 /var/ftp/pub/
命令,为匿名用户访问FTP的根目录(/var/ftp/
)下的pub
子目录设置最大权限(777),确保匿名用户可正常上传数据到该目录。
3.2.2 匿名用户访问测试(Windows客户端)
在Windows系统中通过命令提示符测试匿名用户登录FTP服务,具体步骤如下:
- 打开命令提示符:点击Windows开始菜单,输入“cmd”并回车,打开命令提示符窗口。
- 建立FTP连接:执行
ftp 192.168.10.110
命令(其中192.168.10.110
为FTP服务器的IP地址),发起与FTP服务器的连接。
ftp 192.168.10.110
- 匿名登录:连接请求发送后,系统提示输入用户名,输入“ftp”(匿名用户默认用户名),密码为空(直接回车),即可完成匿名登录。
- 执行FTP操作(登录后在
ftp>
提示符后输入以下命令):
pwd
:查看当前匿名用户在FTP服务器中的根目录(默认对应Linux系统的/var/ftp/
目录)。
ls
:查看当前目录下的文件与目录列表。
-
cd pub
:切换到pub
子目录(匿名用户上传文件的指定目录)。 -
get 文件名
:将FTP服务器中指定的文件下载到当前Windows客户端的本地目录(需替换“文件名”为实际文件名)。
文件被下载到C:\Users\用户名下
put 文件名
:将Windows客户端本地目录中的指定文件上传到FTP服务器的当前目录(需替换“文件名”为实际文件名)。
将windows_file.txt上传到FTP服务器的当前目录
quit
:退出FTP连接,关闭命令提示符窗口即可结束操作。
3.3 用户模式登录配置与测试
3.3.1 本地用户访问配置(禁锢目录)
设置本地用户(Linux系统中的系统用户)验证登录FTP,并将用户禁锢在其宿主目录中(禁止切换到FTP目录以外的系统目录),具体步骤如下:
- 编辑配置文件:执行
vim /etc/vsftpd/vsftpd.conf
命令,打开主配置文件。 - 调整配置参数(按需求修改或注释以下参数):
local_enable=Yes
:启用本地用户登录功能(本地用户即Linux系统中的系统用户)。anonymous_enable=NO
:关闭匿名用户访问,仅允许本地用户登录。write_enable=YES
:开放服务器的写权限,若需本地用户上传文件,必须开启此参数。local_umask=077
:设置本地用户上传文件的权限掩码(反掩码),077对应文件权限为600、目录权限为700,仅允许文件宿主用户(即上传用户)拥有读写权限。chroot_local_user=YES
:将本地用户的访问范围禁锢在其宿主目录中(默认宿主目录为/home/用户名
),禁止用户切换到其他系统目录。allow_writeable_chroot=YES
:允许被禁锢的用户宿主目录拥有写权限,避免因目录权限不足导致登录失败。- 注释匿名用户相关权限参数:将
anon_mkdir_write_enable=YES
、anon_other_write_enable=YES
两行参数注释(在参数前添加“#”),因已关闭匿名用户访问,无需保留匿名用户权限配置。
- 重启VSFTP服务:执行
systemctl restart vsftpd
命令,重启服务使新的配置生效。
3.3.2 本地用户登录测试
- 命令提示符登录:打开Windows命令提示符,执行
ftp 192.168.10.110
命令(192.168.10.110
为FTP服务器IP地址),按提示输入Linux系统中的本地用户名(如后续创建的zhangsan)和密码,完成登录。
ftp 192.168.10.110
- 图形化界面登录:打开windows文件夹,在地址栏输入
ftp://zhangsan@192.168.10.110
(“zhangsan”为本地用户名,“192.168.10.110”为服务器IP),按提示输入密码即可登录。
- 等待文件上传
- 查看服务器,看是否上传成功
3.3.3 修改默认根目录
通过配置文件修改匿名用户与本地用户登录FTP后的默认根目录:
- 匿名用户根目录:在
vsftpd.conf
文件中添加anon_root=/var/www/html
参数,设置匿名用户登录后的默认根目录为/var/www/html
(需确保该目录存在且权限合适)。 - 本地用户根目录:在
vsftpd.conf
文件中添加local_root=/var/www/html
参数,设置本地用户登录后的默认根目录为/var/www/html
。
chmod 777 /var/www/html # 修改目录权限
修改后需执行systemctl restart vsftpd
命令重启服务,使配置生效。
测试一下默认目录修改是否成功
put windows_file.txt
ls /var/www/html
3.3.4 配置用户列表(黑白名单)
通过user_list
文件设置FTP登录的用户黑白名单,具体步骤如下:
- 编辑用户列表文件:执行
vim /etc/vsftpd/user_list
命令,打开用户列表文件,在文件末尾添加需管理的用户(如zhangsan
),每个用户占一行。
2. 配置用户列表功能:执行vim /etc/vsftpd/vsftpd.conf
命令,添加或修改以下参数:
userlist_enable=YES
:启用user_list
用户列表文件,使列表生效。userlist_deny=NO
:将user_list
设置为白名单,仅允许列表中的用户(如zhangsan)登录FTP;默认值为YES
,此时user_list
为黑名单,禁止列表中的用户登录。
- 重启服务:执行
systemctl restart vsftpd
命令,重启服务使配置生效。
- 仅修改**/etc/vsftpd/user_list**,userlist_deny=YES,此时zhangsan被添加进黑名单,zhangsan无法登录
- userlist_deny=NO,将
user_list
设置为白名单,仅允许列表中的用户(如zhangsan)登录FTP,例如lisi用户无法登录FTP服务器。
四、FTP拓展命令
扩展FTP client的命令:
- cd:改变远程工作目录,格式为cd <远程目录路径>。
- lcd:改变本地工作目录,格式为lcd <本地目录路径>。
- put:将本地文件上传到远程服务器,格式为put <本地文件路径+文件名>。
- get:从远程服务器下载文件到本地,格式为get <远程文件路径+文件名>。
- mput:批量上传多个文件到远程服务器,格式为mput <文件名称1> <文件名称2>…。
批量上传成功
- mget:批量下载多个远程文件至本地,格式为mget <文件名称1> <文件名称2>…。
- delete:删除远程单个文件,格式为delete <远程文件名>。
- mkdir:创建一个远程目录,格式为mkdir <远程目录名>。
- rmdir:删除远程目录,格式为rmdir <远程目录名>。
总结
本文档详细讲解了FTP服务的核心知识与实操内容,从FTP的基本定义、VSFTP的两种传输模式(主动/被动)、端口作用,到FTP的工作原理(控制通道与数据通道的建立逻辑),再到Linux系统中VSFTP服务的完整搭建流程(包括防火墙关闭、软件安装、配置文件修改、用户权限设置等),并提供了匿名用户与本地用户的登录测试步骤及用户黑白名单配置方法。
通过学习本文档,学习者可清晰理解FTP服务的运行机制,掌握VSFTP服务的部署与配置技巧,能够根据实际需求(如匿名共享、本地用户专属访问、权限控制等)灵活调整FTP服务参数,满足不同场景下的文件传输需求。同时,文档中对TFTP、SFTP等类似协议的介绍,也为学习者拓展文件传输解决方案的认知提供了参考,助力学习者在实际工作中选择更合适的文件传输方式。