ftp服务

文章目录

  • 一、概述
    • 1.1 标准模式
    • 1.2 被动模式
  • 二、FTP作用与工作原理
    • 2.1 FTP的作用和模式以及通信方式
    • 2.2 FTP工作原理与流程
      • 2.2.1 主动模式的工作原理
      • 2.2.2 被动模式的工作原理
      • 2.2.3 主动和被动模式的区别
  • 三、搭建和配置FTP服务
    • 3.1 安装前准备工作
      • 3.1.1 关闭防火墙和增强型安全功能
      • 3.1.2 查看信息
    • 3.2 开启FTP服务
      • 3.2.1 切换服务配置目录并做备份
      • 3.2.2 匿名用户案例
        • 修改配置文件
        • 匿名访问测试
      • 3.3 设置用户模式登录
        • 修改配置文件
        • 重启服务
        • 用户登录测试
        • 修改匿名用户和本地用户的默认根目录
      • 3.4 使用 user_list 用户列表文件
        • 修改 user_list 文件
        • 修改配置文件
  • 四、总结

一、概述

​ FTP(File Transfer Protocol,文件传输协议)是典型的 C/S 架构的应用层协议,需要由服务端软件和客户端软件两个部分共同实现文件传输功能。FTP 客户端和服务器之间的连接是可靠的,面向连接的,为数据的传输提供了可靠的保证。FTP 使用 TCP 协议的 20 和 21 端口,其中 21 端口用于传输指令,20 端口用于传输数据。

FTP 支持两种模式:标准模式(Standard,即 Active,主动方式)和被动模式(Passive,即 PASV,被动方式)。标准模式下,FTP 客户端发送 PORT 命令到 FTP 服务器;被动模式下,FTP 客户端发送 PASV 命令到 FTP 服务器。

1.1 标准模式

​ FTP 客户端首先与 FTP 服务器的 TCP 21 端口建立连接,通过这个通道发送命令。当客户端需要接收数据时,在这个通道上发送 PORT 命令。PORT 命令包含了客户端用于接收数据的端口。在传送数据时,服务器通过自己的 TCP 20 端口发送数据,服务器必须与客户端建立一个新的连接用于数据传输。

1.2 被动模式

​ 被动模式下,客户端与服务器建立控制通道的过程与标准模式类似。当客户端通过控制通道发送 PASV 命令时,FTP 服务器打开一个位于 1024 和 5000 之间的随机端口,并通知客户端在此端口上进行数据传输请求。然后,FTP 服务器通过这个端口传输数据,此时不再需要建立新的连接。

二、FTP作用与工作原理

2.1 FTP的作用和模式以及通信方式

​ FTP 是 Internet 上用来传送文件的协议。VSFTP(Very Secure FTP)是一种安全的 FTP 服务,采用 C/S 模式。FTP 服务器默认使用 TCP 协议的 20 和 21 端口与客户端通信,20 端口用于建立数据连接并传输文件数据,21 端口用于建立控制连接并传输 FTP 控制命令。

2.2 FTP工作原理与流程

​ FTP 数据连接分为主动模式和被动模式。FTP 会话包含控制通道和数据传输通道两种模式,主动模式和被动模式。以 FTP 服务器为参照,主动模式是服务器主动连接客户端进行数据传输,被动模式是服务器等待客户端连接进行数据传输。

2.2.1 主动模式的工作原理

​ FTP 客户端连接到 FTP 服务器的 21 号端口,发送用户名和密码,客户端随机开放一个端口(1024 以上),发送 PORT 命令到 FTP 服务器,告知服务器客户端采用主动模式并开放端口。FTP 服务器收到 PORT 主动模式命令和端口后,通过服务器的 20 号端口与客户端开放的端口连接,发送数据。

2.2.2 被动模式的工作原理

​ 被动模式(PASV)工作原理如下:FTP 客户端连接到 FTP 服务器的 21 号端口,发送用户名和密码,然后发送 PASV 命令到 FTP 服务器。服务器在本地随机开放一个端口(1024 以上),并告知客户端这个端口号,客户端再连接到服务器开放的端口进行数据传输。

2.2.3 主动和被动模式的区别

​ 主动模式是服务器主动发起数据连接,被动模式是服务器被动等待数据连接。主动和被动模式的选择通常取决于网络环境和防火墙配置。

三、搭建和配置FTP服务

3.1 安装前准备工作

3.1.1 关闭防火墙和增强型安全功能

systemctl stop firewalld    # 关闭防火墙
systemctl disable firewalld  # 开机时自动关闭防火墙
setenforce 0         # 临时关闭增强型安全功能

3.1.2 查看信息

yum info vsftpd
# 或者
rpm -q | grep vsftp

image-20240714193536217

如果没有安装,使用 yum 安装:

yum install -y vsftpd

3.2 开启FTP服务

systemctl start vsftpd
systemctl enable vsftpd     # 开机时自动启动 FTP 服务

image-20240714194125378

3.2.1 切换服务配置目录并做备份

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

image-20240714194209743

3.2.2 匿名用户案例

设置匿名用户访问的 FTP 服务(最大权限)

修改配置文件
vim /etc/vsftpd/vsftpd.confanonymous_enable=YES    # 开启匿名用户访问,默认已开启
write_enable=YES    # 开放服务器的写权限(若要上传,必须开启),默认已开启
anon_umask=022    # 设置匿名用户所上传数据的权限掩码(反掩码)
anon_upload_enable=YES    # 允许匿名用户上传文件,默认已注释,需取消注释
anon_mkdir_write_enable=YES   # 允许匿名用户创建(上传)目录,默认已注释,需取消注释
anon_other_write_enable=YES    # 允许删除、重命名、覆盖等操作,需添加
chmod 777 /var/ftp/pub/ # 为匿名访问 FTP 的根目录下的 pub 子目录设置最大权限,以便匿名用户上传数据

image-20240714201042127

image-20240714200208618

匿名访问测试

在 Windows 系统打开开始菜单,输入 cmd 命令打开命令提示符

# 建立 FTP 连接
ftp 192.168.78.22
# 匿名访问,用户名为 ftp,密码为空,直接回车即可完成登录
ftp> pwd          # 匿名访问 FTP 的根目录为 Linux 系统的 /var/ftp/ 目录
ftp> ls           # 查看当前目录
ftp> cd pub       # 切换到 pub 目录
ftp> get 文件名    # 下载文件到当前 Windows 本地目录
ftp> put 文件名   # 上传文件到 FTP 目录
ftp> quit         # 退出

image-20240714202003915

image-20240714202033481

3.3 设置用户模式登录

设置本地用户验证访问 FTP,并禁止切换到 FTP 以外的目录(默认登录的根目录为本地用户的家目录)。

修改配置文件
vim /etc/vsftpd/vsftpd.conflocal_enable=YES              # 启用本地用户
anonymous_enable=NO          # 关闭匿名用户访问
write_enable=YES              # 开放服务器的写权限(若要上传,必须开启)
local_umask=077               # 可设置仅宿主用户拥有被上传的文件的权限(反掩码)
chroot_local_user=YES         # 将访问禁锢在用户的宿主目录中
allow_writeable_chroot=YES    # 允许被限制的用户主目录具有写权限

image-20240714202452297

重启服务
systemctl restart vsftpd
用户登录测试
ftp 192.168.10.12

或者在浏览器中输入:

ftp://zhangsan@192.168.10.12

image-20240714203702841

修改匿名用户和本地用户的默认根目录
anon_root=/var/www/html       # anon_root 针对匿名用户
local_root=/var/www/html      # local_root 针对系统用户

3.4 使用 user_list 用户列表文件

修改 user_list 文件
vim /etc/vsftpd/user_list
# 在末尾添加 zhangsan 用户
zhangsan
修改配置文件
vim /etc/vsftpd/vsftpd.confuserlist_enable=YES    # 启用 user_list 用户列表文件
userlist_deny=NO       # 设置白名单,仅允许 user_list 用户列表文件中的用户访问。默认为 YES,为黑名单,禁用列表中的用户

image-20240714203852385

image-20240714204048399

四、总结

  1. 什么是 FTP
  2. VSFTP 模式
  3. 工作原理模式:主动和被动
  4. FTP 端口和作用
  5. FTP 配置文件
  6. 实验匿名用户与本地用户登录权限和方式
  7. 用户黑白名单

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

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

相关文章

交易平台Zero Hash现已支持SUI交易

Zero Hash是一家领先的加密货币和稳定币基础设施平台,为包括Stripe、Shift4和Franklin Templeton在内的公司提供支持,现在也支持对SUI的访问。此举使Zero Hash的客户及其终端用户能够使用SUI。 提供API和SDK以及专注于无缝连接法币、加密货币和稳定币的…

Linux rsync文件同步工具

scp的不足 1. 性能问题 单线程传输 SCP只使用单线程进行传输,这意味着在传输大文件或大量小文件时,其传输速度和效率可能不如其他多线程工具。 无法压缩数据传输 SCP不支持内置的压缩机制,这在传输大文件时会导致带宽使用效率较低。 2.…

【Python 项目】类鸟群:仿真鸟群

类鸟群:仿真鸟群 仔细观察一群鸟或一群鱼,你会发现,虽然群体由个体生物组成,但该群体作为一个整体似乎有它自己的生命。鸟群中的鸟在移动、飞越和绕过障碍物时,彼此之间相互定位。受到打扰或惊吓时会破坏编队&#xf…

香橙派AIpro:体验强劲算力,运行ROS系统

文章目录 前言一、香橙派AIpro开箱及功能介绍1.1香橙派AIpro开箱1.2香橙派AIpro功能介绍 二、香橙派AIpro资料下载及环境搭建2.1资料下载2.2环境搭建2.3使用串口启动进入开发板2.4使用HDMI线接入屏幕启动 三、部署ROS系统四、香橙派AIpro的使用和体验感受 前言 本篇文章将带体…

查找PPT中某种字体的全部对应文字

本文章的目的是找到某种字体的文字,而不是替换某种字体的文字,也不是将某种字体全部替换为另外一种文字。 第一步:在PPT中按下ALTF11 出现以下窗口 第二步:点击插入->模块 第三步:将以下代码输入到窗体中 Sub F…

[leetcode]partition-list 分隔链表

. - 力扣(LeetCode) class Solution { public:ListNode* partition(ListNode* head, int x) {ListNode *smlDummy new ListNode(0), *bigDummy new ListNode(0);ListNode *sml smlDummy, *big bigDummy;while (head ! nullptr) {if (head->val &l…

钉钉扫码登录第三方

钉钉文档 实现登录第三方网站 - 钉钉开放平台 (dingtalk.com) html页面 将html放在 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>登录</title>// jquery<script src"http://code.jqu…

redis redisson(仅供自己参考)

redis 通过setnx实现的分布式锁有问题 如图&#xff1a; 解决的新的工具为&#xff08;闪亮登场&#xff09;&#xff1a;redisson redisson可重入锁的原理 实现语言lua&#xff1a; 加锁实现脚本语言&#xff1a; 释放锁的脚本语言&#xff1a; 加锁的lua -- 首先判断这个锁…

[GWCTF 2019]我有一个数据库

我起初以为是sql注入 抓包什么都没有 扫描一下吧 全是文件包&#xff0c;找找有没有有用的 没啥用&#xff0c;但是我们还扫到了一个东西 访问phpmuyadmin/index.php发现什么用 然后我把index.php搞掉了发现version CVE-2018-12613 那么我们看看哦 ?targetdb_sql.php%…

hutool处理excel时候空指针小记

如图所示&#xff0c;右侧的会识别不到 参考解决方案&#xff1a; /***Description: 填补空缺位置为null/空串*Param: hutool读取的list*return: 无*Author: y*date: 2024/7/13*/public static void formatHutoolExcelArr(List<List<Object>> list) {if (CollUtil…

SCI一区级 | Matlab实现GJO-CNN-LSTM-Multihead-Attention多变量时间序列预测

SCI一区级 | Matlab实现GJO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测 目录 SCI一区级 | Matlab实现GJO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现GJO-CNN-LSTM-Mutilhead-Attention金豺优化算…

【C语言】指针(3):探索-不同类型指针变量

目录 一、字符指针变量 二、数组指针变量 三、二维数组传参的本质 四、函数指针变量 4.1 函数指针变量 4.2 函数指针变量的使用 4.3 函数指针变量的拓展 五、函数指针数组 六、转移表的应用 通过深入理解指针&#xff08;1&#xff09;和深入理解指针&#xff08;2&am…

【Redis】简单了解Redis中常用的命令与数据结构

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Redis的特点和适用场景三、Redis的数据类型和使用3.1字符串&#xff08;String&…

【HTML入门】第十二课 - iframe框架

在早期没有出现Vue和React之前呢&#xff0c;做管理系统&#xff0c;iframe是非常普遍的技术。比如管理系统左侧有非常多的菜单&#xff0c;然后点击菜单后&#xff0c;右边就要展现不同的页面。 又或者呢&#xff0c;我们看一些网站&#xff0c;他们侧边展示着五彩绚烂的广告&…

docker安装mysql, 虚拟机连接mysql

docker已安装&#xff1a;安装教程docker和docker的安装-CSDN博客docker是容器技术&#xff08;软件&#xff09;&#xff0c;提供标准的应用镜像&#xff08;包含应用&#xff0c;和应用的依赖&#xff09;可以轻松在docker里安装应用&#xff0c;每个应用独立容器。https://b…

如何搭建互联网医院系统源码?医疗陪诊APP开发实战详解

今天&#xff0c;小编将为大家讲解如何搭建一个完整的互联网医院系统源码&#xff0c;并介绍医疗陪诊APP的开发实战。 一、互联网医院系统的架构设计 搭建一个完整的互联网医院系统&#xff0c;需要从架构设计开始。一个典型的互联网医院系统通常包含以下几个核心模块&#xf…

[web]-sql注入-白云搜索引擎

ctrlu查看源代码&#xff0c;发现前端有js过滤 <script>function myFunction(){var xdocument.getElementById("number").value;var adocument.getElementById("word").value;var ba.replace(/[\ |\~|\|\!|\|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\|\…

Elasticsearch基础概念

Elasticsearch 是一款开源的,ESTful风格的 分布式搜索、存储、分析引擎; 常见的使用场景 网站搜索,代码搜索等日志管理与分析,应用系统性能分析,安全指标监控等数据库同步,将数据库某个表的数据同步到elasticsearch上然后提供搜索服务 ES基本概念 文档 我们向elasticsearch存…

钡铼网关: 轻松实现PLC与OPC UA服务器的双向通信

在当今工业4.0的大潮下&#xff0c;实现不同设备、系统之间的高效通信和数据交换已大势所趋&#xff01;PLC与OPC UA服务器的对接&#xff0c;对于打造智能工厂具有重要意义&#xff0c;本文将深入探讨钡铼技术的网关如何实现这一过程&#xff0c;为用户提供快速且低成本的解决…

JAVA从入门到精通之入门初阶(二)

1. 自动类型转换 自动类型转换&#xff1a;类型范围小的变量可以赋值给类型范围大的变量 byte->int public class java_7_10 {public static void main(String[] args) {//自动类型转换//类型范围小的变量可以赋值给类型范围大的变量 byte->intbyte a 12;int b a;//自动…