FTP文件传输服务器

news2024/11/30 6:53:08

目录

一、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爱好者指正,小弟定当虚心受教!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spark有两种常见的提交方式:client 模式和 cluster 模式对机器 CPU 的影响

Spark有两种常见的提交方式:client 模式和 cluster 模式。这两种方式对机器 CPU 的影响略有不同 ,请参考以下说明 Client 模式: 在 Client 模式下,Spark Driver 运行在提交任务的客户端节点上(即运行 spark-submit 命…

全新纠错码将量子计算提效10倍!

上周,来自两个研究小组的最新模拟报告称,一类新兴的量子纠错码的效率比目前的“黄金标准”(即表面码)高出一个数量级。 量子纠错码的工作原理都是将大量容易出错的量子比特转换成更小的“受保护”量子比特,这些量子比特…

软件测试/测试开发丨Selenium 高级定位 CSS

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27022 一、CSS选择器概念 CSS拥有自己的语法规则和表达式 CSS通常分为相对定位和绝对定位 CSS常和XPATH一起用于UI自动化测试 二、CSS相对定位使用场景 支…

亚马逊云科技生成式AI技术辅助教学领域,近实时智能应答2D数字人搭建

早在大语言模型如GPT-3.5等的兴起和被日渐广泛的采用之前,教育行业已经在AI辅助教学领域有过各种各样的尝试。在教育行业,人工智能技术的采用帮助教育行业更好地实现教学目标,提高教学质量、学习效率、学习体验、学习成果。例如,人…

电子邮件服务器

目录 一、相关知识 二、邮件服务器种类 三、邮件传输协议 四、DNS中的MX记录 五、电子邮件系统工作原理 六、配置文件相关参数 七、邮件服务器配置案例 7.1设置用户别名邮箱 7.2空壳邮件服务器 一、相关知识 1、电子邮箱系统三个组成部分 MUA(telnet):邮…

【git】【IDEA】在idea中使用git

目录 一、 在IDEA中配置git 二、 获取git仓库 2.1 本次初始化仓库 2.2 从远程仓库克隆 三、 本地仓库操作 3.1 将文件加入暂存区 3.2 将暂存区的文件提交到版本库 3.3 快捷键 使用快捷键 实现加入到暂存区与提交到版本库 3.4 查看日志 Show History 四、 远程仓库操…

Liquid UI和Fiori的区别

主要围绕以下几个方面就Liquid UI和Firor来进行比较: 开发周期开发成本稳定性和支援性平台架构 影响Firor决策的因素: 复杂的编程过程,Fiori对开发人员要求高,开发难度大,而Liquid UI让开发人员不需要懂SAP后端&…

eureka迁移到nacos--双服务中心注册

服务注册中心的迁移有多种方式,官网使用nacos sync,还有民间开发的双注册中心组件eureka-nacos-proxy,但是我用了不太顺利,所以用的是阿里巴巴的双注册中心组件edas-sc-migration-starter spring boot:2.5.3 引入依赖 …

JVM内存管理、内存分区:堆、方法区、虚拟机栈、本地方法栈、程序计数器

内存管理 内存分区 线程共享 堆 存放实例,字符串常量(直接引用),静态变量,线程分配缓冲区(TLAB线程私有)。垃圾收集器管理的区域 方法区 非堆,和堆相对的概念。存储已被虚拟机加载的…

Python大数据处理利器之Pyspark详解

摘要: 在现代信息时代,数据是最宝贵的财富之一,如何处理和分析这些数据成为了关键。Python在数据处理方面表现得尤为突出。而pyspark作为一个强大的分布式计算框架,为大数据处理提供了一种高效的解决方案。本文将详细介绍pyspark…

使用 BERT 进行文本分类 (03/3)

一、说明 在使用BERT(2)进行文本分类时,我们讨论了什么是PyTorch以及如何预处理我们的数据,以便可以使用BERT模型对其进行分析。在这篇文章中,我将向您展示如何训练分类器并对其进行评估。 二、准备数据的又一个步骤 …

深度剖析java类和对象

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 在Java中,一切皆对象。 目录 一、类的定义和使用1.1类的定义格式1.2定义学生类 二、类的实例化三、this引…

MariaDB数据库服务器

目录 一、什么是数据库? 二、什么是关系型数据库? 三、数据库字符集和排序规则是什么? 四、常用数据类型 五、Mariadb数据库相关配置案例 一、什么是数据库? 数据库(DB)是以一定方式长期存储在计算机硬盘内…

【Terraform学习】使用 Terraform创建DynamoDB添加项目(Terraform-AWS最佳实战学习)

本站以分享各种运维经验和运维所需要的技能为主 《python》:python零基础入门学习 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

Android JNI系列详解之ndk-build工具的使用

一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用,今天介绍一种ndk自带的编译工具ndk-build的使用。 ndk-build目前主要有两种配置使用方式: 如上图所示,第一种方式是Android.mkApplication.mkgradle的方式生成…

leetcode15. 三数之和(java)

三数之和 题目描述双指针法代码演示 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xf…

机器视觉工程师们,学习是工作以外的事情

面试时,领导问你,很多技术问题,你永远的回答是,我可以学。 公司以为你来公司的目标就是学习,学完就跑。 那你进公司的目标到底是什么? 我认为你,你最好想好再回答。 对于每一家公司来说&#xf…

android——spinner下拉弹窗、popupwindow下拉弹窗列表

一、spinner下拉弹窗 效果图如下: adapter的代码: package com.yaona.spinnerimport android.R import android.content.Context import android.graphics.Color import android.view.LayoutInflater import android.view.View import android.view.Vie…

配置环境变量的作用

配置环境变量的作用 一般运行过程:寻找QQ.exe所在的目录,输入QQ.exe配置环境变量:把QQ所在的路径配给操作系统Path, 在任何路径下都能运行QQ.exe 举例: 定义变量:SCALA_HOME SCALA_HOME、JAVA_HOME 等这…