文章目录

  • 前言
  • 一、FTP概述
  • 二、FTP工作原理
    • 2.1 FTP的作用与模式
    • 2.2 FTP工作流程
      • 2.2.1 主动模式(PORT模式)
      • 2.2.2 被动模式(PASV模式)
      • 2.2.3 对比表格
      • 2.2.4 如何选择?
      • 2.2.5 补充:现代FTP服务器的常见做法
  • 三、FTP服务搭建与配置
    • 3.1 安装前准备
      • 3.1.1 关闭防火墙与SELinux
      • 3.1.2 安装VSFTPD
      • 3.1.3 备份配置文件
    • 3.2 匿名用户配置
      • 3.2.1 修改配置文件
      • 3.2.2 设置目录权限
      • 3.2.3 匿名访问测试
    • 3.3 本地用户配置
      • 3.3.1 修改配置文件
      • 3.3.2 用户登录测试
        • 3.3.2.1 测试上传下载
      • 3.3.3 修改默认根目录
        • 3.3.4 用户列表控制
  • 四、总结


前言

FTP(File Transfer Protocol)作为经典的文件传输协议,至今仍在许多场景中发挥着重要作用。无论是网站维护、数据备份还是内部文件共享,FTP都因其简单、稳定而备受青睐。本文基于教学实践,系统梳理了FTP的基本概念、工作原理、服务搭建与配置方法,旨在帮助读者快速掌握FTP服务的核心知识与实操技能。


一、FTP概述

FTP(File Transfer Protocol,文件传输协议)是一种典型的C/S架构的应用层协议,通过服务端和客户端软件共同实现文件传输功能。FTP使用TCP协议,端口20和21,确保连接可靠且面向连接。

  • 21端口:用于传输控制指令。
  • 20端口:用于传输数据。

FTP支持两种传输模式:

  • 主动模式(Standard/Active):客户端发送PORT命令,服务器主动连接客户端进行数据传输。
  • 被动模式(Passive/PASV):客户端发送PASV命令,服务器开放随机端口等待客户端连接。

二、FTP工作原理

2.1 FTP的作用与模式

FTP用于在Internet上传送文件,常见服务端软件包括:

  • Windows:Serv-U、FileZilla Server
  • Linux:VSFTP(Very Secure FTP)、ProFTPD

FTP使用TCP协议的20和21端口进行通信:

  • 20端口用于数据传输;
  • 21端口用于控制命令传输。

2.2 FTP工作流程

FTP会话包含两个通道:控制通道和数据传输通道。

2.2.1 主动模式(PORT模式)

  • 控制连接:由客户端(Client)向服务器的21端口发起。
  • 数据连接:由服务器(Server)向客户端的指定端口发起。
    • 客户端连接到服务器的21端口,发送用户名和密码;
    • 客户端开放一个随机高位端口(1024以上),并通过PORT命令告知服务器;
    • 服务器使用20端口主动连接客户端的指定端口进行数据传输。
  • 优点

    • 对服务器网络环境要求低:服务器只需要开放21(控制)和20(数据)端口即可正常工作。客户端负责接收来自外部的连接,这在纯服务器内网环境中是优点。
  • 缺点

    • 客户端防火墙/NAT不友好:这是最大的缺点。在现代网络环境中,客户端通常位于防火墙或NAT路由器之后。
      • 问题:当服务器(外网)尝试主动连接到客户端告知的那个内部随机端口(1025)时,客户端的防火墙会认为这是一个未经请求的入站连接,从而将其阻断,导致连接失败。
      • 现象:客户端能列出目录(LIST 命令使用控制连接),但无法传输数据(RETRSTOR 命令需要数据连接)。
    • 安全性较差:服务器需要主动向外连接,从安全策略上讲,这意味着服务器需要信任客户端,增加了潜在的攻击面。

2.2.2 被动模式(PASV模式)

  • 控制连接:由客户端向服务器的21端口发起(与主动模式相同)。

  • 数据连接:由客户端向服务器的一个随机端口发起。

  • 工作过程

    • 客户端连接到服务器的21端口,发送用户名和密码;
    • 客户端发送PASV命令;
    • 服务器开放一个随机高位端口(1024以上)并告知客户端;
    • 客户端连接该端口进行数据传输。
  • 优点

    • 对客户端防火墙/NAT友好:这是被动模式成为现代默认选择的主要原因。连接建立的方向与HTTP等普通网络请求一致,都是客户端主动“出站”连接。客户端的防火墙只会检查出站连接,通常都会放行,因此成功率高。
    • 客户端安全性更好:客户端不再需要开放大量随机端口来接收外部入站连接,减少了暴露给外部的风险。
  • 缺点

    • 服务器防火墙/NAT配置复杂

      • 问题:服务器需要在防火墙上开放一个范围的高位随机端口(例如 30000-35000),而不仅仅是一个20端口,并将这些端口转发到FTP服务器上。这增加了服务器端的维护复杂度和安全风险(开放端口范围越大,潜在风险越高)。
      • 现象:服务器能正常接受控制连接,但在建立数据连接时失败。
    • 对服务器端网络环境要求高:如果服务器位于NAT网关后面,配置会非常麻烦,需要将控制端口和数据端口范围都正确地进行NAT映射。

注:主动与被动是相对于服务器而言的。服务器主动连接客户端为主动模式,客户端连接服务器为被动模式。

2.2.3 对比表格

特性主动模式 (Active)被动模式 (Passive)
数据连接发起方服务器客户端
服务器端口控制:21, 数据:20控制:21,数据:一个随机高位端口
客户端端口控制:随机 -> 21,数据:随机 <- 20控制:随机 -> 21,数据:随机 -> 服务器随机端口
防火墙友好性对客户端防火墙极不友好对客户端防火墙非常友好
适用场景客户端没有防火墙(如机房内部网络)现代通用场景(客户端在NAT/防火墙后,如家庭/公司网络)
服务器配置简单(只需开放20、21端口)复杂(需开放21端口+一个随机端口范围)
安全性较差(服务器需主动向外连接)较好(连接方向符合常规出站请求)

2.2.4 如何选择?

  • 绝大多数情况下,应使用被动模式(PASV)。因为现在的用户几乎都处于路由器(NAT)和防火墙的保护之下,被动模式是保证FTP可用的唯一选择。
  • 只有在你知道客户端网络环境非常开放(没有防火墙)且追求服务器简单配置时,才考虑使用主动模式。例如,在两个内部服务器之间进行数据传输。

2.2.5 补充:现代FTP服务器的常见做法

为了解决被动模式的服务器端防火墙问题,现代FTP服务器软件(如 vsftpd, FileZilla Server)通常提供以下配置选项:

  • 指定被动模式端口范围:在服务器配置中限定一个较小的端口范围(如 50000-55000),然后在服务器的防火墙中只开放这个特定的端口范围。
  • 被动模式外部IP地址:如果服务器 behind NAT,需要设置 pasv_address 为服务器的公网IP地址,这样客户端才能连接到正确的地址。

三、FTP服务搭建与配置

3.1 安装前准备

3.1.1 关闭防火墙与SELinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

3.1.2 安装VSFTPD

yum install -y vsftpd
systemctl start vsftpd
systemctl enable vsftpd

3.1.3 备份配置文件

cd /etc/vsftpd/
cp vsftpd.conf vsftpd.conf.bak

3.2 匿名用户配置

3.2.1 修改配置文件

编辑 /etc/vsftpd/vsftpd.conf

anonymous_enable=YES #开启匿名用户访问。默认已开启
write_enable=YES #开放服务器的写权限(若要上传,必须开启)。默认已开启
anon_umask=022 #设置匿名用户所上传数据的权限掩码(反掩码)。 022--》755
anon_upload_enable=YES #允许匿名用户.上传文件。默认已注释,需取消注释
anon_mkdir_write_enable=YES #允许匿名用户创建(上传)目录。默认已注释,需取消注释
anon_other_write_enable=YES #允许删除、重命名、覆盖等操作。需添加

3.2.2 设置目录权限

chmod 777 /var/ftp/pub/

3.2.3 匿名访问测试

在Windows命令行中:

ftp 192.168.10.120 #ip为服务端ip
用户名:ftp
密码:(直接回车)

在Windows的传输过程中需要先进入pub目录,否则会因为没有权限而无法上传下载。


3.3 本地用户配置

3.3.1 修改配置文件

编辑 /etc/vsftpd/vsftpd.conf

local_enable=YES
anonymous_enable=NO
write_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES

在这里插入图片描述

注释以下行(若存在):

# anon_mkdir_write_enable=YES
# anon_other_write_enable=YES

重启服务:

systemctl restart vsftpd

3.3.2 用户登录测试

ftp 192.168.10.12
用户名:zhangsan
密码:(输入对应密码)

或使用浏览器访问:

ftp://zhangsan@192.168.10.120

在这里插入图片描述

3.3.2.1 测试上传下载
ftp> pwd          #匿名访问ftp的根目录为Linux系统的/var/ftp/目录
ftp> ls           #查看当前目录
ftp> cd pub       #需要进去才能有效,因为仅设置了/var/ftp/pub目录的777权限
ftp> get文件名    #下载文件到当前Windows本地目录
ftp> put 文件名   #上传文件到ftp目录
ftp> quit         #退出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.3.3 修改默认根目录

anon_root=/var/www/html    # 匿名用户根目录
local_root=/var/www/html   # 本地用户根目录
3.3.4 用户列表控制

编辑 /etc/vsftpd/user_list,添加用户:

zhangsan

在这里插入图片描述

编辑 vsftpd.conf

userlist_enable=YES
userlist_deny=NO    # 设置为白名单模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、总结

FTP作为一种经典的文件传输协议,在内部网络和特定场景中仍有广泛应用。通过本文的介绍,我们可以了解到:

  • FTP的两种工作模式(主动/被动)及其区别;
  • VSFTPD的安装与基本配置方法;
  • 如何配置匿名访问和本地用户访问;
  • 如何通过用户列表实现黑白名单控制。

掌握FTP服务的搭建与配置,不仅有助于理解传统网络服务的运作方式,也能为实际工作中的文件传输需求提供可靠解决方案。尽管如今SFTP、HTTP等方式逐渐普及,FTP仍在某些环境中保持着不可替代的地位。
最后,希望大家多多实践,夯实基础,聚沙成塔,与君共勉之!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919693.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919693.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919693.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

setup 语法糖核心要点

1. 基本语法<!-- 传统写法 --> <script lang"ts"> export default {setup() {let name 张三function changeName() { name 李四 }return { name, changeName }} } </script><!-- 语法糖写法 --> <script setup lang"ts"> …

C++---多态(一个接口多种实现)

C的多态&#xff08;Polymorphism&#xff09;是面向对象编程&#xff08;OOP&#xff09;的三大核心特性之一&#xff08;另外两个是封装和继承&#xff09;&#xff0c;其核心思想是一个接口&#xff0c;多种实现&#xff0c;即同一操作作用于不同对象时&#xff0c;可产生不…

【机器学习深度学习】vLLM的核心优化技术详解

目录 前言 一、vLLM简介&#xff1a;为什么它如此重要&#xff1f; 二、核心技术一&#xff1a;PagedAttention — 显存管理的革命 2.1 传统注意力缓存的缺陷 2.2 分页式存储管理 三、核心技术二&#xff1a;张量并行 — 多GPU推理的基石 3.1 什么是张量并行&#xff1f…

MySQL 高级主题:索引优化、ORM 与数据库迁移

第五部分&#xff1a;索引优化1. 为什么需要索引&#xff1f;索引是提高数据库查询性能的关键数据结构&#xff0c;它类似于书籍的目录&#xff0c;可以帮助数据库快速定位到所需数据&#xff0c;而不必扫描整个表。2. 索引类型主键索引 (PRIMARY KEY): 唯一且非空&#xff0c;…

Eplan教程:网络与PLC

欢迎大家来到“Eplan带你做项目”第六个过程。在第五个过程中&#xff0c;Eplan基于实际项目的绘制&#xff08;电气设计中的电源回路以及电源分配相关回路&#xff09;重点分享分了“电机的供电和控制图纸的绘制”。本文中&#xff0c;先猜个问题&#xff0c;设计一个PLC系统&…

大模型落地全攻略:从技术实现到场景应用

大语言模型&#xff08;LLM&#xff09;的快速发展正在重塑各行各业的智能化进程&#xff0c;但其落地应用仍面临技术适配、场景融合、成本控制等多重挑战。本文将系统解析大模型落地的四大核心方向 ——微调技术、提示词工程、多模态应用和企业级解决方案&#xff0c;通过代码…

【论文】Zotero文献管理

Zotero文献管理 写论文前查找阅读大量文献&#xff0c;写论文时引用文献&#xff0c;都是一件非常麻烦的事情&#xff0c;一款合适的文献管理工具可以帮助我们更快捷地完成这些任务。zotero作为一款免费开源的工具&#xff0c;可以实现文献阅读、同步管理以及引用管理。 安装…

MsSQL 函数,实现数字转换成人民币大写

MsSQL 函数&#xff0c;实现数字转换成人民币大写-- 如果函数已存在则删除 IF OBJECT_ID(dbo.ConvertToRMBChineseNew, FN) IS NOT NULLDROP FUNCTION dbo.ConvertToRMBChineseNew GOCREATE FUNCTION dbo.ConvertToRMBChineseNew (NumberInput SQL_VARIANT -- 使用 SQL_VARIANT…

OpenHarmony深度定制:从系统到模块的全景剖析与自定义模块实战

摘要:OpenHarmony 作为面向万物互联时代的开源操作系统,其“系统-子系统-部件-模块”的四层架构设计,为开发者提供了高度可裁剪、可扩展的能力。本文将系统梳理这四层结构的职责边界与协作关系,并手把手演示如何向 OpenHarmony 新增一个可交付的自定义模块(Module),帮助…

数字社会学是干什么的?数字社会学理论与数字社会学家唐兴通讲数字社会学书籍有哪些?AI社会学人工智能社会学理论框架

在当今社会&#xff0c;传统物理空间和人际关系网络成为了许多年轻人寻找合适伴侣的重大障碍。以深圳为例&#xff0c;这座移民城市的大部分居民都来自外地&#xff0c;年轻人的人脉关系、尤其是亲戚关系大多仍在家乡。这使得深圳的单身男女在交友和婚恋方面的选择面变得狭窄&a…

数据库-MYSQL配置下载

目录 一.数据库概念 一、数据库的基本定义 二、数据库管理系统&#xff08;DBMS&#xff09; 三、数据库系统&#xff08;DBS&#xff09; 四、数据模型 五、数据库的特点 六、数据库的应用领域 二.MySql 一、开源免费&#xff0c;降低中大型项目成本 二、跨平台与兼容…

Java 中表示数据集的常用集合类

Java 中表示数据集的常用集合类 Java 集合框架提供了多种数据结构来表示和操作数据集&#xff0c;每种集合类都有其特定的用途和性能特征。以下是主要的集合类及其特点&#xff1a; 一、List 接口及其实现类 1. ArrayList 特点&#xff1a;基于动态数组实现优点&#xff1a;随机…

Django REST框架核心:GenericAPIView详解

Django REST framework (DRF) 中 GenericAPIView 的源码核心部分。 它是所有“泛型视图”的基础类&#xff0c;比如常用的 ListAPIView、RetrieveAPIView、CreateAPIView 都是继承自它。&#x1f31f; 作用继承自 APIView&#xff0c;因此仍然是一个标准的 DRF 视图。提供了常用…

深入解析HashMap的存储机制:扰动函数、哈希计算与索引定位

今天复习了一下HashMap的部分&#xff0c;写一篇博客记录一下今天学习内容虽然之前学习过&#xff0c;但由于后来没怎么使用过而且也没复习基本忘得差不多了在Java的HashMap中&#xff0c;高效存储键值对的核心在于哈希算法和索引定位。本文将结合源码逐步拆解存储流程&#xf…

【机器学习 / 深度学习】基础教程

阶段一&#xff1a;机器学习 / 深度学习基础教程定位&#xff1a;针对准备进入 AI多智能体开发 的初学者&#xff0c;打牢机器学习与深度学习的基础。一、为什么需要学习机器学习/深度学习 在进入智能体&#xff08;Agent&#xff09;开发之前&#xff0c;必须具备一定的 机器学…

ESP32应用——HTTP client(ESP-IDF框架)

目录 一、前言 二、URL 2.1 URL简介 2.2 URL示例 三、HTTP 3.1 HTTP协议概述 3.2 HTTP的工作原理 3.2.1 HTTP 请求-响应流程 3.2.2 HTTP 请求结构 3.2.3 HTTP请求方法 3.2.4 HTTP响应结构 3.2.5 HTTP状态码 四、ESP HTTP 客户端流程 五、ESP HTTP 客户端实战解析…

动学学深度学习07-现代卷积神经网络

动学学深度学习pytorch 参考地址&#xff1a;https://zh.d2l.ai/ 文章目录动学学深度学习pytorch1-第07章-现代卷积神经网络1. AlexNet1.1 AlexNet 的核心贡献是什么&#xff1f;1.2 AlexNet 与 LeNet 的主要区别有哪些&#xff1f;1.3 为什么 AlexNet 需要 GPU 训练&#xff1…

详细讲解Java中的反射和经典面试题(保姆级别)

1.1 反射的概述&#xff1a;专业的解释&#xff08;了解一下&#xff09;&#xff1a;是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意属性和方法&#xff1b;这种动态获取…

MyCAT完整实验报告

MyCAT完整实验报告 ‍ 前言 刚刚看了一下前面的那篇MyCAT的文章 感觉有一些问题 所以拿出一篇文章再说一下 单独构建了完整的实验环境 这样会全面一点 ‍ 安装MyCAT #跳过‍ 主从配置 #不多追溯 因为我们选择的主从 也可以做双主机 但我们后边再说‍ 环境搭建 一、环境规划 服务…

机器翻译论文阅读方法:顶会(ACL、EMNLP)论文解析技巧

更多内容请见: 机器翻译修炼-专栏介绍和目录 文章目录 一、论文选择:快速判断论文价值 1.1 关注核心会议与子领域 1.2 筛选标准 1.3 预读筛选 1.4 快速定位关键信息 二、精读解析 2.1 问题定义(5分钟) 2.2 方法解剖(15分钟) 2.3 实验深挖(20分钟) 2.4 批判性思考(10分…