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富文本编辑器,…...

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

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…...

DVWA靶场搭建
目录 配置环境: 1、将下载好的压缩包放置php的WWW根目录下 2、改文件配置 3、查看mysql用户名和密码,将其修改值靶场配置文件中 4、完成后我们就可以在浏览器输入127.0.0.1/dvwa进入靶场 测试XSS注入: 配置环境: githhub下…...

Uniapp笔记(二)uniapp语法1
一、本节项目预备知识 1、效果演示 2、常见组件 1、view组件 视图容器,它类似于传统html中的div,用于包裹各种元素内容。 2、swiper组件 swiper是滑动视图容器,经常看到的轮播图就是通过它来完成的 swiper-item是swiper子组件…...

【1day】PHPOK cms SQL注入学习
目录 一、漏洞描述 二、资产测绘 三、漏洞复现 四、漏洞修复 一、漏洞描述 PHPOK CMS是一个基于PHP语言开发的开源内容管理系统(CMS)。它提供了一个强大的平台,用于创建和管理网站内容。PHPOK CMS具有灵活的模块化架构,可以根据网站的需求进行定制和扩展。PHPOK CMS存…...

线程同步与互斥
目录 前言:基于多线程不安全并行抢票 一、线程互斥锁 mutex 1.1 加锁解锁处理多线程并发 1.2 如何看待锁 1.3 如何理解加锁解锁的本质 1.4 CRAII方格设计封装锁 前言:基于线程安全的不合理竞争资源 二、线程同步 1.1 线程同步处理抢票 1.2 如何…...

电子词典dictionary
一、项目要求: 1.登录注册功能,不能重复登录,重复注册。用户信息也存储在数据库中。 2.单词查询功能 3.历史记录功能,存储单词,意思,以及查询时间,存储在数据库 4.基于TCP,支持多客户…...

【python爬虫】10.指挥浏览器自动工作(selenium)
文章目录 前言selenium是什么怎么用设置浏览器引擎获取数据解析与提取数据自动操作浏览器 实操运用确认目标分析过程代码实现 本关总结 前言 上一关,我们认识了cookies和session。 分别学习了它们的用法,以及区别。 还做了一个项目:带着小…...

QT文件对话框,将标签内容保存至指定文件
一、主要步骤 首先,通过getSaveFileName过去想要保存的文件路径及文件名,其次,通过QFile类实例化一个文件对象,再读取文本框中的内容,最后将读取到的内容写入到文件中,最后关闭文件。 1.txt即为完成上述操作…...

C#,《小白学程序》第十一课:阶乘(Factorial)的计算方法与代码
1 文本格式 /// <summary> /// 阶乘的非递归算法 /// </summary> /// <param name"a"></param> /// <returns></returns> private int Factorial_Original(int a) { int r 1; for (int i a; i > 1; i--) { …...

MySQL 数据库常用命令大全(完整版)
文章目录 1. MySQL命令2. MySQL基础命令3. MySQL命令简介4. MySQL常用命令4.1 MySQL准备篇4.1.1 启动和停止MySQL服务4.1.2 修改MySQL账户密码4.1.3 MySQL的登陆和退出4.1.4 查看MySQL版本 4.2 DDL篇(数据定义)4.2.1 查询数据库4.2.2 创建数据库4.2.3 使…...

【数学】【书籍阅读笔记】【概率论】应用随机过程概率论模型导论 by Sheldon M.Ross 第一章 概率论引总结与习题题解 【更新中】
文章目录 前言1 第一章 概率论引论 总结1.1 样本空间与事件1.2 定义在事件上的概率1.3 条件概率1.4 独立事件 2 一些有用的重要结论/公式/例题3 重要例题例 1.11 3 习题题解题1题2 4 习题总结 前言 1 第一章 概率论引论 总结 第一章从事件的角度引出样本空间、事件、概率的基本…...