当前位置: 首页 > news >正文

FTP文件传输服务器

目录

一、FTP协议两种工作模式

二、FTP数据两种传输模式

三、FTP用户分类

四、VSFTP配置案例

4.1匿名开放模式

4.2本地用户模式

4.3虚拟用户模式

五、实验总结


一、FTP协议两种工作模式

主动模式:

1、客户端主动向ftp服务器发送控制连接,三次握手控制连接建立成功(密码认证)。

源端口:随机端口1026     目的端口:21

2、用于传输控制命令的控制连接建立成功之后,客户端向ftp服务器发送port消息来告诉ftp服务器接下来要与其传输数据所使用的端口号。

如:随机端口号1027

3、若要彼此传输数据,ftp服务器主动与客户端建立数据连接。

源端口号:20       目的端口号:1027(客户端通过控制连接发送过来的port消息携带的 )

说明:我们知道防火墙是根据报文五元组建立会话,来对外部流量进行筛选是否允许其访问内网。如果ftp客户端位于防火墙的内网,此时防火墙只缓存的有客户端与ftp服务器之间控制会话。如果采用主动模式,当ftp服务器要向客户端发送数据连接请求时,在经过防火墙时由于会话表里保存的没有此五元组端口号的记录,因此防火墙就会禁止ftp请求数据连接报文的通过,因此彼此之间无法进行ftp文件的传输。

被动模式:

1、客户端主动向ftp服务器建立控制连接,三次握手控制连接建立成功(密码认证)。

源端口: 随机端口1025    目的端口: 21

2、控制连接建立成功后,客户端向ftp服务器发送PASV被动消息,告诉ftp服务器在接下来传输数据时其处于被动模式,由客户端向ftp服务器建立数据连接。

3、ftp服务器收到PASV消息后,自己开放个用于传输数据的随机端口号如:m,并将其端口号告诉给客户端。

4、要传输数据时由客户端发送数据连接。

源端口:1026随机端口    目的端口:m

说明:被动连接解决了在防火墙的环境下处于内外区域的c/s之间无法通过ftp传输数据的问题。因为不管是控制连接还是数据连接都是先由客户端主动发起的,因此防火墙会话表里就含有彼此报文交互的五元组会话记录,当ftp要向客户端回复数据连接建立成功经过防火墙时,报文匹配会话五元组放行流量。

二、FTP数据两种传输模式

1、ASCLL传输方式:用于传输文本文件。如果用户使用的是windows系统,需要从unix系统搭建的服务器上下载一个文本文件。由于不同操作系统之间对文本内容文件的换行符表示的字符不同(如:win /r/n ,unix  /n)如果直接将unix的文本文件原样下载到win系统上,在win系统上查看文本内容时,文本之间将没有换行,在换行处会出现无法解析的乱码。因此ASCLL文本传输模式会自动将不同主机之间传输的文本文件中的换行符转换成本地的表示形式在存到本机。这样在向ftp服务器上传或下载文本文件后就不会出现换行处不换行,乱码的情况了。

2、Binary二进制传输形式:用于传输二进制文件。在此模式下不会对文件进行任何处理即保存文件的位序。因此如果下载的是二进制非文本文件,如果使用ASLL数据传输模式无疑会把二进制文件中原本的字符当换行符转换后破坏其整个二进制文件。

三、FTP用户分类

1、匿名用户:即anonymous用户。当客户端要访问ftp服务器时,可以在没有服务器用户名和密码的前提下,通过匿名用户访问ftp服务器的共享资源。

2、实体用户:指在ftp服务器上创建注册的本地账户。其用户在登录到ftp服务器后默认的当前工作目录为以自己命名的工作目录,可以修改。不仅可以访问ftp的共享资源,还可以访问其系统下该用户的其它资源。

3、虚拟用户:为了保证FTP服务器的安全性,由vsftpd服务器提供的非系统用户账号。虚拟用户FTP登录后将把指定的目录作为FTP根目录。虚拟用户与本地用户具有类似的功能,由于虚拟用户相对安全,因此正逐步替代本地用户账号的使用。

四、VSFTP配置案例

实验环境

VSFTP-Server

IP:192.168.200.254/24

VSFTP-Client

IP:192.168.200.28/24

4.1匿名开放模式

FTP-Server:

1、安装vsftp服务

2、查看vsftp服务相关配置文件

3、在客户机上安装ftp客户端工具,用于登录到ftp服务器

4、备份/etc/vsftpd/vsftpd.conf主配置文件、生成vsftp主配置文件、修改并添加匿名用户的配置参数

5、防火墙放行ftp服务,否则ftp拒绝用户登录;匿名用户默认登录到ftp服务器的主目录为/var/ftp/pub目录,授予匿名用户映射服务器的真实用户ftp的写权限,并设置selinux的布尔值参数,否则匿名用户无法创建上传文件。

6、开启vsftpd服务

7、客户端登录ftp服务器,下载并上传文件测试

4.2本地用户模式

FTP-Server:

1、安装vsftpd服务程序、备份主配置文件/etc/vsftpd/vsftpd.conf。前面已有做过,再此略过。

2、修改并添加主配置文件中本地用户相关配置参数,将之前实验的匿名用户登录关闭。与本地用户配置相关的主要参数local_enable=YES,write_enable=YES,local_umask=022其它可选。

3、创建用于客户端登录测试的ftp本地账户

4、防火墙放行ftp服务流量、设置selinux的布尔值策略、因为本地用户默认登录到ftp服务器工作主目录为自己的家目录,因此在自己的家目录拥有写入的权限。由于上面演示过了此处不在表述。

5、重启ftp服务

6、客户端使用测试本地账户ftpclient,登录ftp服务器进行测试。

7、客户端使用ftp系统的root用户登录到ftp服务器进行测试。

8、从ftp服务器黑名单中删除root用户,来允许其登录到ftp服务器

9、重启ftp服务、客户端使用root用户重新登录ftp测试。

10、去除ftp主配置文件中的chroot_local_user=YES根锁定参数,在用客户端登录测试。

4.3虚拟用户模式

VSFTP-Server:

1、在ftp服务器的/etc/vsftpd目录下创建包含有虚拟账户和其密码的文件。

2、使用db-load命令将创建的虚拟用户信息文件转化成vsftpd服务可以直接加载的数据库文件。

3、创建用于虚拟用户权限身份验证的PAM文件(文件名任意),将刚才生成的虚拟用户信息数据库文件关联到PAM认证文件内。

4、创建虚拟用户映射到ftp服务器的真实账户,并通过指定真实用户的家目录来映射虚拟目录登录到服务器的主目录。并修改权限允许其它人查看,但不能修改其虚拟用户的文件。

5、在vsftp主配置文件中配置虚拟用户的相关参数。指定之前创建的PAM认证文件以及与虚拟用户关联的本地用户。

6、给虚拟用户配置不同的权限,如:只允许vuser1查看文件,而允许vuser2上传、创建、修改、查看、删除文件。这种需求在企业真实环境中是常见的,我们可以通过vsftpd服务器程序来实现。

6.1、修改vsftpd主配置文件,过添加 user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。

*标注下滑线是配置虚拟用户所使用到的配置参数。

6.2、在/etc/vsftpd/respective目录下创建分别以虚拟用户名命名的配置文件(使vsftp通过虚拟用户名来找到各自的权限配置文件),并写入相应的权限。

7、重启vsftpd服务,使配置文件立即生效。

VSFTP-Client:

1、使用vuser1登录测试验证其是否具有创建目录权限。

2、使用vuser2登录测试其是否具有创建、删除、修改、上传文件权限。

五、实验总结

(1)配置了虚拟用户登录后,本地用户登录就会失效。可以通过修改PAM认证文件调用的模块函数库可以解决。

(2)vsftpd主配置文件中必须要开启本地登录模式。如果不开,将报错,提示本地模式和匿名模式必须开启一个,显然虚拟用户模式就是为了提高安全,因此我们不开匿名模式而开启本地模式。

(3)2.6.4节中的主配置文件参数allow_writeable_chroot=YES必须开启如果不开将报错。

(4)防火墙影响ftp登录,默认情况防火墙策略阻止了ftp端口,ftp客户端登录将得到“无法路由到主机”的报错。

(5)SELinux阻止文件创建,本来vuser2是有创建文件权限的,但是由于受到默认SELinux策略影响,将不能创建文件。此时需要在ftp服务器执行:setsebool -P ftpd_full_access=off命令即可。

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!

相关文章:

FTP文件传输服务器

目录 一、FTP协议两种工作模式 二、FTP数据两种传输模式 三、FTP用户分类 四、VSFTP配置案例 4.1匿名开放模式 4.2本地用户模式 4.3虚拟用户模式 五、实验总结 一、FTP协议两种工作模式 主动模式: 1、客户端主动向ftp服务器发送控制连接,三次握手控制连接…...

【LeetCode - 每日一题】2240. 买钢笔和铅笔的方案数(23.09.1)

2240. 买钢笔和铅笔的方案数 题意 两种价格的笔返回所有可以买的方案数可以为 0 解法 注意这道题的复杂度比较高,O(N2) 是过不了的。一开始是这样写的: // tle 代码 class Solution { public:long long waysToBuyPensPencils(int total, int cost1,…...

SQL Server如何新建作业

作业: 在 SQL Server 中,作业(Job)是一组可以在预定时间自动执行的任务。可以将作业看作是一个可以在后台运行的程序或脚本。作业由一系列步骤组成,每个步骤都是一个独立的任务,可以执行诸如执行 SQL 查询…...

【计算机网络】CDN 内容分发

CDN(Content Delivery Network)是一种用于加速网站内容传输的分布式网络架构。它的目标是通过在全球多个位置分布服务器来存储和分发网站的静态资源,从而减少用户访问这些资源的延迟,提高网站的加载速度和性能。以下是CDN内容分发…...

Yjs + Quill 实现文档多人协同编辑器开发(基础+实战)

前言 多人协同开发确实是比较难的知识点,在技术实现上有一定挑战,但随着各种技术库的发展,目前已经有了比较成熟的解决方案。今介绍 Yjs 基于CRDT算法,用于构建自动同步的协作应用程序,与Quill富文本编辑器&#xff0c…...

个性化定制界面还是极简版原装界面?我的选择是……

个性化定制界面和极简版原装界面,哪一个你用起来更加顺手呢,相比之下你更喜欢哪一个?来聊一聊原因吧! 一、我的观点和选择 个性化定制界面和极简版原装界面,二者各有优缺点。 (一)极简版原装…...

C++ STL list容器使用教程

文章目录 引用头文件初始化赋值遍历 list 容器迭代器list 常用方法删除元素插入元素 合并列表 list 翻译为列表,列表容器被实现为双向链表,因此它提供了对其数据的双向顺序访问。 List 不提供快速随机访问,它只支持双向顺序访问。 List 允许…...

go web之一:hello world快速上手+handle(http.Handle和http.HandleFunc的区别与联系)

前情提要: 需要安装好go的环境和VSCode的go插件。 hello world快速上手 1、创建go.mod 在项目根目录下打开命令行,或者直接用VSCode中的终端。输入命令 go mod init github.com/solenovex/web-tutorial 然后就能看到项目结构中多了一个go.mod 2、…...

【Postman】postman生成测试报告完整步骤(包含命令与newman安装教程链接)

文章目录 一、前提二、导出Postman脚本三、生成测试报告 一、前提 前提准备: 已安装好Newman 指引文章:Newman安装与环境配置完整版文章 Newman是一款基于nodejs开发的可以运行Postman脚本的工具,并可以生成测试报告。 二、导出Postman脚本…...

一、C#—概述环境安装(1)

🌻🌻 目录 一、 C#概述1.1 为啥学习C#1.2 TIBOE编程语言排行榜1.3 IEEE编程语言排行榜1.4 什么是C#1.5 C#创始人1.6 C#发展历史1.7 C#特点1.8 C#与Java1.9 .NET Framework1.10 C# 与 .NET Framework1.11 C#得应用领域1.12 C#能做什么 二、开发环境得安装…...

C# 实现ComboBox下拉框控件

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...

leetcode做题笔记119. 杨辉三角 II

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 思路一:模拟题意 int* getRow(int rowIndex, int* returnSize){int* ret malloc(sizeof(int)*(rowIndex1));ret[0]…...

Dolphin for Mac(Wii游戏模拟器)配置指南

Wii模拟器Dolphin Mac是款适合Mac电脑中的游戏玩家们使用的模拟器工具。Wii模拟器Dolphin Mac官方版支持直接运行游戏镜像文件,玩家可以将游戏ISO拷贝到某一个文件夹中统一进行管理。Wii模拟器Dolphin Mac除了键盘和鼠标外,还支持配合原版的Wii遥控器操作…...

Java,Linux,Mysql小白入门

Java入门 java后端__阿伟_的博客-CSDN博客 Linux与Git入门 Linux与Git入门教程__阿伟_的博客-CSDN博客 Mysql入门 Linux与Git入门教程__阿伟_的博客-CSDN博客...

代码随想录算法训练营第二十四天|理论基础 77. 组合

理论基础 其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。 题目链接/文章讲解:代码随想录 视频讲解:带你学透回溯算法(理论篇…...

macos安装zsh

https://www.cnblogs.com/xuLessReigns/p/11005435.html mac下安装autojump brew install autojump 1,安装zsh,执行 sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 2,将zsh设置…...

【Unity】预制体材质变(Clone)克隆体问题

1、排查代码是否存在直接修改预制体的材质为克隆体。 解决:删了这段代码。 2、双击Prefab文件进入预制体编辑模式时,会执行预制体身上的脚本方法Awake、Start等(生命周期方法),所以要排查这些方法里是否有克隆…...

python“魂牵”京东商品历史价格数据接口(含代码示例)

要通过京东的API获取商品详情历史价格数据,您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例,展示如何通过京东开放平台API获取商品详情历史价格数据: 首先,确保您已注册成为京东开放平台的开发者…...

密码算法、密钥体系---安全行业基础篇1

一、密码算法 密码算法是一种数学和计算方法,用于保护数据的机密性和安全性。不同的密码算法使用不同的数学原理和技术来加密和解密数据。以下是一些常见的密码算法类型: 1. **对称密码算法:** 特点:相同的密钥用于加密和解密数…...

Java工具类记录

HTML转word 相关依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>import org.apache.poi.poifs.filesystem.DirectoryEntry; import org.apache.poi…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...