【Linux】搭建SFTP文件服务器

  • 一、协议介绍
    • 1.1 FTP 协议
      • 1.11 特点
      • 1.12 基本工作原理
    • 1.2 SFTP协议
      • 1.21 特点
      • 1.22 基本工作原理
    • 1.3 ssh协议
      • 1.31 特点
      • 1.32 基本工作原理
    • 1.4 其他常见文件传输协议
  • 二、搭建Linux的SFTP文件服务器
  • 三、连接测试
    • 3.1 电脑连接
    • 3.2 手机连接

一、协议介绍

1.1 FTP 协议

1.11 特点

FTP(File Transfer Protocol)是一种用于在计算机之间传输文件的标准网络协议。它提供了一种简单而常用的方式来上传和下载文件,以及进行文件管理操作。

FTP协议的主要特点包括:

  1. 客户端-服务器架构:FTP使用客户端-服务器模型,其中客户端是发送文件请求的一方,而服务器是存储文件并响应客户端请求的一方。

  2. 文件传输功能:FTP允许用户通过上传和下载文件来进行数据传输。客户端可以从服务器上下载文件到本地计算机,也可以将本地计算机上的文件上传到服务器。

  3. 目录和文件管理:FTP支持对远程服务器上的目录和文件进行管理操作。用户可以创建、删除、重命名和移动目录,以及执行类似的操作来处理文件。

  4. 匿名访问:FTP支持匿名访问,允许用户通过提供一个公共用户名(通常是"anonymous")而无需提供密码来访问公共服务器上的文件。

  5. 身份验证和安全性:FTP支持多种身份验证方法,包括基于用户名和密码的验证以及基于加密证书的验证。然而,标准的FTP协议在数据传输过程中没有加密,因此数据在传输过程中可能会被窃听或篡改。

除了标准的FTP协议,还有一些衍生的协议,如FTPS(FTP over SSL/TLS)和SFTP(SSH File Transfer Protocol)。这些协议添加了加密和安全功能,以增强数据传输的安全性。

1.12 基本工作原理

FTP的基本工作原理如下:

  1. 建立连接:客户端与服务器之间通过TCP/IP建立连接。默认情况下,FTP使用端口号21作为控制连接的端口

  2. 身份验证:客户端向服务器发送用户名和密码进行身份验证。如果是匿名访问,客户端可以使用公共用户名"anonymous",通常无需提供密码。

  3. 控制连接:一旦身份验证成功,控制连接建立起来。通过控制连接,客户端发送各种指令给服务器,如上传文件、下载文件、创建目录等。

  4. 数据连接:FTP使用不同的数据连接模式来传输文件。两种常见的模式是主动模式和被动模式。

    • 在主动模式下,服务器主动地在 数据端口(默认端口号20) 上监听并等待客户端的连接请求。客户端向服务器发送请求后,服务器建立数据连接并传输文件。

    • 在被动模式下,服务器在一个随机的端口上监听,并将该端口信息发送给客户端。客户端随后连接到该端口,建立数据连接并进行文件传输。

  5. 文件传输:一旦数据连接建立,文件传输可以开始。客户端发送相应的指令,如上传文件(STOR)、下载文件(RETR)、删除文件(DELE)等,服务器根据指令执行相应的操作。

  6. 控制连接关闭:文件传输完成后,控制连接可以关闭,释放资源。如果客户端需要进行其他操作,可以重新建立控制连接。

FTP通过建立控制连接和数据连接的方式实现文件传输。控制连接用于发送指令和进行身份验证,数据连接则用于实际的文件传输。这种分离的结构使得FTP能够灵活地进行文件管理和数据传输操作。

1.2 SFTP协议

1.21 特点

SFTP(SSH File Transfer Protocol,以前一直以为是Secure FTP,不过确实Secure😂)是一种安全的文件传输协议,用于在计算机之间传输文件。它建立在SSH(Secure Shell)协议之上,利用SSH的安全性和加密功能来保护文件传输过程中的数据安全。

SFTP提供了对文件的上传、下载、删除和重命名等基本操作。与传统的FTP协议相比,SFTP使用了加密通道,使得传输过程中的文件和用户凭据都得到了保护,提供了更高的安全性

SFTP的工作方式与FTP类似,但在底层实现和数据传输上有所不同。它使用SSH协议进行身份验证和建立安全连接,然后通过该连接进行文件传输。SFTP支持文件和目录的列表显示,以及对文件的读取和写入操作。

SFTP还支持文件的压缩和解压缩功能,可以减少文件传输的大小,提高传输效率。此外,SFTP还支持文件的随机访问,可以跳过文件的特定部分,从指定位置开始读取或写入数据。

SFTP是SSH(SecureShell)的一部分。SSH是一种用于安全远程登录和文件传输的协议,而SFTP是在SSH协议之上建立的一种安全文件传输协议。

SSH协议提供了加密通信和身份验证机制,使得用户可以安全地远程登录到其他计算机,并在计算机之间传输文件。SFTP利用了SSH协议的安全性和加密功能,提供了更加安全可靠的文件传输方式。

在SSH协议中,SFTP作为一种子协议存在,用于处理文件传输的相关操作。因此,当你使用SFTP进行文件传输时,实际上是通过SSH协议来建立安全连接,并使用SFTP子协议进行文件传输操作。

1.22 基本工作原理

SFTP(SSH File Transfer Protocol)的基本工作原理如下:

  1. SSH连接建立:客户端与服务器建立SSH连接,使用SSH协议进行安全通信。SSH提供了加密和身份验证机制,确保数据传输的安全性和可信度。(端口号是熟知的22)

  2. SFTP子协议:在SSH连接建立后,客户端通过发送SFTP指令告知服务器要使用SFTP协议进行文件传输操作。

  3. 文件传输操作:客户端发送各种指令给服务器,如上传文件(PUT)、下载文件(GET)、删除文件(RM)等,服务器根据指令执行相应的文件传输操作。

  4. 加密通信:SFTP利用SSH协议提供的安全通信渠道,对传输的文件数据进行加密,保证传输过程中的数据机密性和完整性。

  5. 目录和文件管理:SFTP支持对远程服务器上的目录和文件进行管理操作,客户端可以发送指令来创建、删除、重命名和移动目录,以及进行类似的文件管理操作。

  6. 数据传输通道:在SFTP中,数据传输通过SSH连接上的子通道进行,这些子通道是基于SSH连接建立的。

  7. 断开连接:当文件传输完成或会话结束时,客户端可以发送断开连接请求,关闭SFTP连接。

1.3 ssh协议

1.31 特点

SSH(Secure Shell)是一种用于安全远程登录数据传输的网络协议。它提供了加密的通信通道,使得用户可以安全地远程连接到其他计算机,并在网络上进行安全的数据传输。

SSH协议的主要特点包括:

  1. 加密通信:SSH使用对称加密、非对称加密和消息认证码(MAC)等技术来保护通信过程中的数据安全。这样,即使在公共网络上进行传输,数据也会以加密形式进行,防止被未经授权的人窃取或篡改。

  2. 身份验证:SSH提供多种身份验证机制,包括基于密码、公钥和证书的身份验证方式。这些方法可以确保只有授权用户能够访问远程系统。

  3. 端口转发:SSH支持端口转发功能,允许用户通过安全通道在本地计算机和远程计算机之间建立安全的数据传输通道。这对于安全地访问远程服务或在本地主机上运行远程应用程序非常有用。

  4. X11转发:SSH支持X11转发,可以将远程图形界面应用程序的显示转发到本地计算机上。这使得用户可以在远程主机上运行图形化应用程序,并在本地主机上查看和操作应用程序的界面。

  5. 文件传输:SSH协议可以用于安全地传输文件。通过SCP(Secure Copy Protocol)或SFTP(SSH File Transfer Protocol),用户可以在本地计算机和远程计算机之间进行安全的文件传输操作。

1.32 基本工作原理

SSH(Secure Shell)的基本工作原理如下:

  1. 连接建立:客户端发起连接请求并与服务器建立TCP连接。默认情况下,SSH使用端口号22进行连接。

  2. 协议版本交换:客户端和服务器交换SSH协议的版本信息,并协商选择一个适当的协议版本进行后续通信。

  3. 密钥交换(Key Exchange):客户端和服务器使用密钥交换协议(如Diffie-Hellman)生成共享密钥。这个密钥将用于加密后续通信过程中的数据。

  4. 用户身份验证:客户端向服务器发送用户身份验证请求,并提供相应的身份验证信息。常见的身份验证方法包括基于密码、公钥和证书的身份验证。

  5. 加密通信:一旦身份验证成功,客户端和服务器使用共享密钥对通信进行加密。这确保了数据在传输过程中的机密性,防止被未经授权的人窃听或篡改。

  6. 建立会话:一旦加密通信建立,客户端和服务器之间可以建立会话。在会话期间,客户端可以向服务器发送各种命令和请求,并接收服务器的响应。

  7. 命令执行:客户端发送命令给服务器执行,例如执行Shell命令、运行远程程序等。服务器执行命令并将结果返回给客户端。

  8. 断开连接:会话结束后,客户端可以主动发送断开连接请求,或者由于超时或其他原因,连接可能会自动断开。

SSH通过建立安全的加密通道、用户身份验证和加密通信等机制,确保了远程登录和数据传输过程的安全性。它采用密钥交换来生成共享密钥,用于加密通信,并提供了可靠的用户身份验证。这样,用户可以在不安全的网络环境中安全地远程连接到服务器并进行安全的数据传输和远程操作。

1.4 其他常见文件传输协议

常见文件传输协议包括以下几种:

  1. FTP(File Transfer Protocol):FTP是最早和最常见的文件传输协议,用于在计算机之间传输文件。它使用客户端-服务器架构,支持文件上传、下载和目录管理等功能。

  2. SFTP(SSH File Transfer Protocol):SFTP是在SSH(Secure Shell)协议之上运行的文件传输协议。它提供了通过SSH加密通道进行安全的文件传输和管理操作,具有更高的安全性。

  3. FTPS(FTP over SSL/TLS):FTPS是基于FTP的安全扩展,使用SSL/TLS加密传输数据。它通过添加安全性层来保护FTP传输过程中的数据,提供了加密的文件传输选项。

  4. SCP(Secure Copy):SCP是在SSH协议之上进行安全文件传输的协议。它提供了通过SSH加密通道进行文件复制和传输的功能,类似于cp命令。(比如使用WinSCP软件传输文件)

  5. HTTP(Hypertext Transfer Protocol):HTTP是用于在Web上传输数据的协议,通常用于传输HTML页面和其他媒体资源。尽管HTTP主要用于Web内容传输,但也可以用于文件下载。

  6. HTTPS(HTTP Secure):HTTPS是基于HTTP的安全扩展,使用SSL/TLS加密数据传输。它通过添加安全性层来保护HTTP传输过程中的数据,适用于安全的文件下载和传输。

  7. SMB(Server Message Block)协议是一种网络文件共享协议,它允许计算机上的应用程序读取和写入文件以及从计算机网络中的服务器程序请求服务。SMB协议可以在TCP/IP协议或其他网络协议上使用。SMB协议最初由IBM制定,后来被微软和英特尔采用并发展成为Microsoft网络的通讯协议。它主要用于在计算机间共享文件、打印机、串口等资源,电脑上的网上邻居就是靠它实现的。(我一直用它来和局域网内的设备共享Windows文件夹)。

  8. WebDAV(Web-based Distributed Authoring and Versioning)是一种基于HTTP协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web服务器直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。WebDAV协议提供了一个框架,使用户能够在服务器上创建、更改和移动文档。它最重要的特性包括维护关于作者或修改日期等属性、命名空间管理、集合和覆盖保护。属性维护包括创建、删除和查询文件信息等操作。命名空间管理涉及在服务器命名空间内复制和移动网页。集合涉及创建、删除和列出各种资源。最后,覆盖保护处理与文件锁定相关的方面。

SFTP和SCP:

  • SCP(Secure Copy)和SFTP(SSH File Transfer Protocol)都是基于SSH协议的文件传输工具,它们都提供安全的文件传输功能。但是,它们之间也有一些区别。
  • SCP类似于cp命令,它提供了快速传输文件和基本文件属性(例如访问权限和时间戳)的功能。它使用RCP传输文件和SSH提供身份验证和加密1。
  • SFTP则更像一个远程文件管理协议,它不仅可以传输文件,还允许对远程文件进行一系列操作,例如查看目录、删除文件和目录等。此外,SFTP还支持断点续传。

二、搭建Linux的SFTP文件服务器

  1. 安装SSH服务器:确保系统上安装了SSH服务器软件,这个不必多说;

  2. 创建SFTP用户组和用户:

  • 创建一个新的用户组,用于管理SFTP用户。
groupadd GSFTP
  • 创建一个新的SFTP用户,并将其添加到My_sftp组中。
useradd -m -G GSFTP-s /bin/false june
passwd june# 为用户设置密码

-m选项表示创建用户的主目录,如果不存在则会自动创建。
-G GSFTP选项表示将新用户添加到GSFTP组中。
-s /bin/false选项表示指定用户的登录shell为/bin/false,这意味着该用户无法登录到系统。
最后,june是新创建的用户名。

  1. 设置SFTP的文件目录,可以执行以下操作:
mkdir /Net_share
chown root:My_sftp  /Net_share
chmod 755 /Net_share
mkdir /Net_share/File_save
chown june:GSFTP /Net_share/File_save
chmod 755 /Net_share/File_save

最好按照上面的思路来,否则可能连不上SFTP服务器:

  • 首先建立Net_share目录,他的拥有者必须是root,并且其他用户不能拥有写入的权限(ChrootDirectory 这个选项要求的),即权限不能超过755(否则连不上);
  • 很明显,这样,我们使用SFTP用户登录就只能进行下载操作,无法上传文件;
  • 所以在Net_share目录下建一个用于上传和下载的目录,他的拥有者可以是SFTP用户,可以无限制操作该目录下的文件;

这是我之前报错的日志:
在这里插入图片描述

  1. 修改linux服务器的SFTP配置:

编辑/etc/ssh/sshd_config文件,注释其中的Subsystem sftp /usr/libexec/openssh/sftp-server,然后新增配置如下:

# 我的SFTP配置
Subsystem sftp internal-sftp  # SFTP子系统使用内置的SFTP服务器
Match Group GSFTP             # 以下配置仅适用于属于该组的用户
ChrootDirectory /Net_share    # 目录限制
ForceCommand internal-sftp    # 强制用户使用内置的SFTP服务器进行会话,而不允许执行其他命令
AllowTcpForwarding no         # 禁止TCP转发
X11Forwarding no              # 禁止X11转发

  1. 检查配置是否正确
sshd -t

如果没有报错,则可以执行第六步。如果有错误并且执行了第六步,则会导致ssh无法连接。这种情况一般不用重装服务器系统,可以在服务器的控制台使用vnc登录(应该都有这个选项的),检查上面的配置文件是否正确,然后重启ssh服务。

在这里插入图片描述

  1. 重启SSH服务器:配置完成后,重新启动SSH服务器以使更改生效。
sudo service ssh restart  # 或 systemctl restart sshd
  1. 连接到SFTP服务器:现在,您可以使用SFTP客户端(如FileZilla、WinSCP或命令行的sftp工具)连接到搭建好的SFTP服务器。
 sftp username@server_ip

提示输入密码,并可以开始使用SFTP客户端进行文件传输和管理操作。

三、连接测试

3.1 电脑连接

【WinSCP】强大的可视化远程文件传输 、管理工具 (支持多种协议,支持电脑与手机)

使用WinSCP新建会话,输入IP地址,sftp用户名,密码即可。

在这里插入图片描述

由于在配置文件中有ChrootDirectory /Net_share 这一句目录的限制,该用户组的用户使用sftp连接后,只能查看这个目录(及其子目录)

上图是我从本地电脑向服务器上传的视频文件,服务器对应的目录已经同步了:

在这里插入图片描述

一般服务器都是有ssh服务的,因此使用WinSCP的时候若以root用户登录,则可以访问和修改所有文件,而通过添加sftp用户的方式,很好的限制了用户的查看和修改权限。

3.2 手机连接

使用一些带有sftp功能的文件APP就可以连接了,比如owfiles、谷歌的Documents
在这里插入图片描述



~

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

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

相关文章

AI落地:高效学习指南

高效学习中有一个共识:学习最小可用知识,然后立马开始实践,做中学,不断获得反馈,不断在实践中改进。 现实生活中,如果我们想实现这种高效学习,基本上只能找一个老师1对1指导,费用贵…

【开发者指南】如何在MyEclipse中使用 XML编辑器

XML编辑器包括高级XML编辑功能。通过本文,你将了解其编辑功能和网页XML编辑,一起来看看吧~ 1. Web XML编辑器 MyEclipse Web XML编辑器包括高级XML编辑功能,如: 语法高亮显示标签和属性内容辅助实时验证(在您输入时)文档内容的源视图、设计…

160743-62-4,DMG PEG2000,1,2-二肉豆蔻酰-rac-甘油-3-甲氧基聚乙二醇2000

DMG PEG2000,DMG-mPEG2000,1,2-二肉豆蔻酰-rac-甘油-3-甲氧基聚乙二醇2000 Product structure: Product specifications: 1.CAS No:160743-62-4 2.Molecular formula: C34H66O 3.Molecular weight&#xff…

Java内部类(成员内部类、静态嵌套类、方法内部类、匿名内部类)

文章目录 一、内部类的共性二、为什么需要内部类三、静态内部类(静态嵌套类)四、成员内部类五、局部内部类(方法内部类)六、匿名内部类 Java 类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类…

挂耳式耳机品牌排行榜,看看谁被推荐上榜

下班路上就想放空自己刷会儿视频,但是马路、地铁还有公交上都会有嘈杂的声音影响,如果佩戴入耳式耳机放大声音不仅会过度屏蔽外界,同时还会损伤我们的耳朵,所以新近流行的开放式耳机很好的解决了这些问题,但也有很多小…

【Linux】深入了解冯诺依曼体系结构与操作系统

目录 导读 🌞专栏导读 🌞冯诺依曼 🌞冯诺依曼体系结构 🌛木桶效应 🌞操作系统(Operator System) 🌛概念 🌛设计OS的目的 🌛系统调用和库函数概念 导读 六一儿童节快到了&…

杜绝开源依赖风险,许可证扫描让高效合规「两不误」

目录 开源许可证及其常见类型 开源许可证扫描是软件研发过程中,不可或缺的工具 极狐GitLab 开源许可证扫描的优势与应用 Step 1:启用及设置许可证策略 Step 2:自动创建策略文件存放项目 Step 3:查看许可证合规情况 Step 4&…

实训可视化项目小结 --- 开启Python初始之旅

Python初试感悟 语言之间是相通的,大多数时候,百分之八十的问题,都可以用常用的容器以及内置函数来辅助解决。之前从未认真接触过Python,但此次学校实训要求使用Python做一个可视化,东西不难,我个人负责爬…

Hadoop学习---8、Hadoop数据压缩

1、Hadoop数据压缩 1.1 概述 1、压缩的好处和坏处 (1)优点:减少磁盘IO、减少磁盘储存空间 (2)缺点:增加CPU开销 2、压缩原则 (1)运算密集型的Job,少用压缩 &#xff08…

【2023 · CANN训练营第一季】应用开发(初级)第四章——模型推理

AscendCL运行资源管理 申请运行管理资源时,需按顺序依次申请: Device、Context、Stream,然后根据实际需求调用aclrtGetRunMode接口获取软件栈的运行模型(当同一个应用既支持在Host运行,也支持在Device运行时,在编程时需要就需要根…

Shap-E:3D资产的生成式AI大模型

OpenAI 刚刚发布了 Shap-E,这是一种基于文本提示和图像创建 3D 资产的生成模型,能够生成带纹理的网格和神经辐射场 ,从而实现各种 3D 输出。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 在本教程中,我们将引导你在 Go…

嵌入式软件测试笔记2 |TEmb方法概述

2 |TEmb方法概述 1 TEmb简介2 TEmb工作原理3 系统特性4 TEmb通用元素4.1 生命周期4.2 技术4.3 基础设施4.3.1 测试环境4.3.2 工具和测试自动化4.3.3 办公环境 4.4 组织 5 组合专用测试方法的机制5.1 常用系统特性5.2 特定方法5.3 LITO矩阵 1 TEmb简介 TEmb是一种方法&#xff…

Rocksdb相关学习

1 Basic Operations 先介绍一些 RocksDB 的基本操作和基本架构。 1.1 LSM 与 WriteBatch 参考文档5提到RocksDB 是一个快速存储系统,它会充分挖掘 Flash or RAM 硬件的读写特性,支持单个 KV 的读写以及批量读写。RocksDB 自身采用的一些数据结构如 LSM/…

picoctf_2018_rop chain

小白垃圾笔记,不建议阅读。 这道题目其实我是瞎做的. 本地调试需要写一个文件名为flag.txt的文件。 先检查下保护:(我把文件名改成pwn了),32位仅仅开启了nx 然后放到32位ida里: main函数如下&#xff1a…

全网最火爆,从接口测试到接口自动化测试总结,卷王进阶高级...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python接口自动化测…

element-ui菜单el-menu的使用

效果演示 先给大家看一下效果吧 el-menu详解 Menu Attributes# 属性名说明类型可选值默认值mode菜单展示模式stringhorizontal / verticalverticalcollapse是否水平折叠收起菜单(仅在 mode 为 vertical 时可用)boolean—falseellipsis是否省略多余的子项…

软件测试之自动化测试详解

文章目录 一.前言二.selenium介绍三.selenium的组成部分四.Selenium的环境搭建下载浏览器配置环境变量验证环境是否搭建成功 五.Selenium的API打开浏览器元素的定位操作测试对象等待操作信息获取鼠标操作键盘操作选项操作浏览器操作 六.需要用到的包 一.前言 自动化测试指软件…

SQL面试必备:100道高频考题解析

前言 在众多IT职场中,SQL技术一直是一个非常重要的技能点。如果你正在准备SQL相关的面试,那么这份“SQL面试 100 问”绝对是你不能错过的宝藏! 这份清单涵盖了100道高频考题,从基础知识到复杂应用都有所涉及,帮助你全…

树莓派485转USB串口调试教程

步骤1:接线方式:485转USB 注意接线口是否对应:A1B1 步骤2:查看串口配置—映射关系是否正确 命令:ls -l /dev serial0即GPIO映射的串口,默认是ttyS0,即mini串口 serial1即板载蓝牙映射的串口&am…

关于原生feign发起请求时,参数注解的相关问题

先说结论: POST请求必须指定请求头,body参数用RequestBody或者Param(需要一个一个写)。 GET请求,传参只能用QueryMap,后边变量是Map形式,哪怕是一个参数也必须放到map里边。如果是路径变量&…