FTP 文件传输协议:概念、工作原理;上传下载操作步骤

目录

FTP

概念

工作原理

匿名用户

授权用户

FTP软件包

匿名用户上传下载实验步骤

环境配置

下载

上传

wget

授权用户上传下载步骤

root用户登录FTP步骤

监听

设置端口号范围

修改用户家目录

匿名用户

授权用户


FTP

概念

FTP(File Transfer Protocol)是一种文件传输协议,用来上传和下载,实现远程共享文件,和统一管理文件。FTP允许用户在两台计算机之间传输文件,其中一台计算机充当服务器,另一台计算机充当客户端。

工作原理

  1. 连接建立
    1. 客户端使用随机端口(>1024的端口,高位端口)发起连接请求,连接到运行FTP服务的服务器。连接通常使用21端口号。
  2. 身份验证
    1. 客户端需要输入用户名和密码进行身份验证,以确保只有授权用户才能访问服务器上的资源。
  3. 命令和响应
    1. 一旦连接和身份验证成功,客户端通过发送FTP命令与服务器进行通信。服务器接收这些命令并作出相应的响应。典型的命令包括列出目录、改变目录、上传和下载文件等。
  4. 数据传输模式(默认为被动模式)
    1. 主动模式(服务器主动向客户端发起连接)
      1. 客户端在启动时打开一个随机高位端口并告知服务器该端口号,然后服务器从其数据端口(通常是20)连接到客户端指定的端口以传输数据。
      2. 客户端的防火墙会拦截服务器发起的连接,所以连接模式默认为被动模式
    2. 被动模式(服务器等待客户端向自己发起连接)
      1. 服务器打开一个随机高位端口并告知客户端该端口号,然后客户端(随机端口)连接到服务器的这个端口进行数据传输。
  5. 数据传输
    1. 数据传输通道建立后,文件开始在客户端和服务器之间进行传输。数据可以是文件内容、目录列表等。
  6. 连接终止
    1. 文件传输完成后,客户端可以发送命令断开连接,结束会话。

匿名用户

无需经过授权可以连接到FTP服务器,匿名用户一般只能进行对服务器进行下载操作

在服务器安装过FTP服务的软件包后,可以看到本地的用户账号文件中多出了一个名为ftp的用户,该用户就是匿名用户

授权用户

连接FTP时需要登录进行身份验证,授权用户通常权限比匿名用户高,比如下载和上传

FTP软件包

服务端软件包名:vsftpd

客户端软件包名:ftp

匿名用户上传下载实验步骤

环境配置

准备两台CentOS 7 虚拟机,一台做服务器(192.168.10.101)一台做客户端(192.168.10.102)

关闭内核安全机制

关闭服务端的防火墙并安装服务端的FTP服务软件包

同时安装客户端的FTP服务软件包

先开启服务端的FTP服务

此时在客户端(102)就可以尝试连接服务器(101)

可以通过 exit、quit、bye 退出连接

下载

当你在 /var/ftp FTP服务的根目录下创建一个文件,就可以在客户端通过 get 命令来下载该文件到连接服务器时所在目录位置下

或在末尾加入路径以指定下载时指定存放位置和名称

如果此时关闭客户端的防火墙,再连接FTP服务器

关闭被动模式,就进入了主动模式,再尝试下载文件,就可以在主动模式下下载文件了

所以主动模式还是被动模式都是由客户端决定的,而不是由服务器决定的

上传

默认配置下的FTP服务,匿名用户是没有上传权限的

所以我们需要修改服务端的配置文件

为了讲解方便,这里去除了配置文件内注释的行,然后再打开FTP的配置文件

  • anon_umask=022:指定匿名用户创建文件和目录时的umask值,022表示文件的权限为666-022=644,目录的权限为777-022=755
  • anon_upload_enable=yes:允许匿名用户上传文件到服务器
  • anon_mkdir_write_enable=yes:允许匿名用户创建新目录
  • anon_other_write_enable=yes:允许匿名用户对文件进行其他写操作,比如删除和重命名文件

由于修改了配置文件需要重启服务

由于刚才只是修改了配置文件中的权限,但是在系统中对于文件和目录还有权限的控制

再修改系统中对于匿名用户进行操作的目录进行权限上的修改

使用put命令上传文件

wget

通过 wget 客户端在不登录FTP的情况下直接下载FTP服务器中的文件

授权用户上传下载步骤

对授权用户的访问,仅限在该用户的家目录下

在服务端新建一个用户,用于在客户端进行授权用户的登录

  • chroot_local_user=YES:把本地用户(local_user)锁定在其主目录下,限制其无法切换到其他目录。
  • allow_writeable_chroot=YES:让本地用户在其主目录下创建和写入文件。通常情况下如果chroot_local_user设为YES,用户由于被锁定在主目录下而无法写入文件,但设置了allow_writeable_chroot=YES后,这些用户将可以在其主目录下写入和创建文件。

重启服务

如果不设置上面两个选项,授权用户就可以通过在FTP服务器中使用 cd / 到系统的根目录,而修改完后只能cd 到 自己用户的根目录

root用户登录FTP步骤

修改ftp存放禁止登录用户的文件

将root注释或删除

编辑拒绝用户连接的列表文件

将root用户也注释掉

因为没有修改主配置文件,所以不用重启服务

此时就可以用root用户登录了

在vsftpd的配置文件(/etc/vsftpd/vsftpd.conf)中也可以看到用户列表启用的选项

把YES改为NO就不启用用户列表,列表文件就不会生效了

还可以添加一个选项:userlist_deny=NO,如果在启用用户列表的情况下,再添加该选项,FTP服务器只有用户列表中的用户可以访问

该选项默认为YES,也就是拒绝用户列表中的用户访问

在用户列表文件(/etc/vsftpd/user_list)内也能看到相关注释

监听

vsftpd服务默认是通过Xinetd超级服务来进行管理,当有人访问vsftpd服务时,Xinetd就唤醒该服务,没人访问就让该服务休眠

如果要修改端口,不想让Xinetd来管理vsftpd服务,就打开监听选项,并添加监听的IP地址,指定访问vsftpd服务的IP地址,指定端口,取消ipv6的监听

修改vsftpd服务的配置文件

保存并退出,重启服务

此时在客户端(102)就需要指定端口来访问FTP服务

设置端口号范围

修改配置文件,添加相关选项

仅限于被动模式下,才分配指定端口号范围内的端口

保存并退出,重启服务

修改用户家目录

匿名用户

在服务端添加选项,指定目录

保存并退出,重启服务

在匿名用户的家目录下创建一个文件用于测试

此时登录到匿名用户也就进入了指定的家目录,创建的文件也能看到

授权用户

在服务端的配置文件中添加选项

保存退出,重启服务

在客户端登录也可以看到测试的文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言之线程的学习

线程属于某一个进程 共同点:都能并发 线程共享变量,进程不共享。 多线程任务中,其中某一个线程调用了exit了,其他线程会跟着一起退出 如果是特定的线程就调用pthread_exit 失败返回的是错误号 下面也是

VSCode无法识别 node、npm

一、前提 电脑新安装了node.js,在cmd查看node和npm版本没有问题,但是在VSCode无法识别 1.cmd查看版本: 2.VSCode报错信息: 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果…

C#——Property属性详情

属性 属性(Property)是类(class)、结构体(structure)和接口(interface)的成员,类或结构体中的成员变量称为字段,属性是字段的扩展,使用访问器&am…

视频转音频:怎样提取视频中的音频?6个提取音频的小技巧(建议收藏)

怎样提取视频中的音频?当我们想从视频中提取出声音时,通常会遇到很多问题。无论是想单独提取出视频里的音频,还是把它转成方便储存或者分享的音频格式,这都会涉及到视频转音频的一个需求。因此,在这篇指南里&#xff0…

如何编写高质量更优雅的代码(Java)

1、函数式接口—FunctionalInterface 好处:高逼格、代码收拢、解藕、统一处理 适用范围:具有共性的接口调用代码 举个栗子: 在我们平时的微服务开发中,调用其他服务的接口,通常要把接口调用部分做异常处理(try catch…

为何交易价格可能超出预期?

当你尝试执行订单时,如果收到“报价超出”的提示,这通常意味着交易无法按你的预期价格成交。对于某些交易者来说,这可能会带来一些困扰,但在外汇等流动性极高的市场中,这种情况是相当常见的。 外汇市场之所以吸引众多…

Python系统教程01

Python 是一门解释性语言,相对更简单、易学,它可以用于解决数学问题、获取与分 析数据、爬虫爬取网络数据、实现复制数学算法等等。 1、print()函数: print()书写时注意所有的符号都是英文符号。print()输出内容时,若要输出字符…

A股低开高走,近3000点,行情要启动了吗?

A股低开高走,近3000点,行情要启动了吗? 今天的A股,让人瞪目结舌了,你们知道是为什么吗?盘面上出现2个重要信号,一起来看看: 1、今天两市低开高走,银行板块护盘指数&…

如何使用AI学习一门编程语言?

无论你是软件开发新手还是拥有几十年的丰富经验,总是需要学习新知识。TIOBE Index追踪50种最受欢迎的编程语言,许多生态系统为职业发展和横向转型提供了机会。鉴于现有技术具有的广度,抽空学习一项新技能并有效运用技能可能困难重重。 最近我…

Linux启动elasticsearch,提示权限不够

Linux启动elasticsearch,提示权限不够,如下图所示: 解决办法: 设置文件所有者,即使用户由权限访问文件 sudo chown -R 用户名[:新组] ./elasticsearch-8.10.4 //切换到elasticsearch-8.10.4目录同级 chown详细格式…

关于vue创建项目失败报错(镜像过期)的解决方案

在新建vue项目时出现以下错误: 原因: npm.taobao.org和registry.npm.taobao.org旧域名于2021年官方公告域名更换事件,已于2022年05月31日零时起停止服务,域名HTTPS证书于2024年1月22日正式到期,不可再用。 解决方案:…

昇思MindSpore学习总结七——模型训练

1、模型训练 模型训练一般分为四个步骤: 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 现在我们有了数据集和模型后,可以进行模型的训练与评估。 2、构建数据集 首先从数据集 Dataset加载代码&#xff0…

gdb及其使用

gdb调试一&#xff1a; 首先进入gdb&#xff0c;确定好进程&#xff0c;输入进程号 确定要调试哪个文件&#xff0c;然后输入&#xff1a;&#xff08;b为打断点&#xff09; (gdb) b serialization_protobuffer.h:write<ros::serialization::OStream>(ros::serializat…

python自动化办公之shutil

目录 1复制文件&#xff0c;此时存在2份相同文件 2移动文件&#xff0c;此时仅有1份文件 3删除文件&#xff0c;此时0份文件 用到的库&#xff1a;shutil&#xff0c;os 实现的效果&#xff1a;复制文件&#xff0c;移动文件&#xff0c;删除文件 代码&#xff1a; 1复制…

【机器学习】FFmpeg+Whisper:二阶段法视频理解(video-to-text)大模型实战

目录 一、引言 二、FFmpeg工具介绍 2.1 什么是FFmpeg 2.2 FFmpeg核心原理 2.3 FFmpeg使用示例 三、FFmpegWhisper二阶段法视频理解实战 3.1 FFmpeg安装 3.2 Whisper模型下载 3.3 FFmpeg抽取视频的音频 3.3.1 方案一&#xff1a;命令行方式使用ffmpeg 3.3.2 方案二&a…

Error: A JNl error has occurred, please check your installation and try again.

Eclipse 运行main方法的时候报错&#xff1a;Error: A JNl error has occurred, please check your installation and try again. 一、问题分析 导致这个问题&#xff0c;主要原因&#xff0c;我认为是在新版本中&#xff0c;默认的JDK编译版本与我们配置的JDK版本不一致导致的…

【Linux】:命令行参数

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux命令行参数的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入…

代码随想录算法训练营第59天:动态[1]

代码随想录算法训练营第59天&#xff1a;动态 两个字符串的删除操作 力扣题目链接(opens new window) 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#xff0c;每步可以删除任意一个字符串中的一个字符。 示例&#xff1a; 输入: …

JavaEE—什么是服务器?以及Tomcat安装到如何集成到IDEA中?

目录 ▐ 前言 ▐ JavaEE是指什么? ▐ 什么是服务器&#xff1f; ▐ Tomcat安装教程 * 修改服务端口号 ▐ 将Tomcat集成到IDEA中 ▐ 测试 ▐ 结语 ▐ 前言 至此&#xff0c;这半年来我已经完成了JavaSE&#xff0c;Mysql数据库&#xff0c;以及Web前端知识的学习了&am…

阅读这篇文章,彻底了解响应式网页设计

随着移动设备的普及&#xff0c;访问网站的方式发生了翻天覆地的变化。人们不再仅仅依靠桌面机来获取信息和享受在线服务。这给网页设计带来了巨大的挑战。如何构建一个能够在各种设备上流畅运行并提供一致用户体验的网站&#xff0c;已经成为每个网页设计师关心的问题。此时&a…