【Linux】搭建SFTP文件服务器

news2024/12/28 19:28:04

  • 一、协议介绍
    • 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
在这里插入图片描述



~

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

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

相关文章

chatgpt赋能python:Python如何实现不换行

Python如何实现不换行 Python是一种高级编程语言,它的应用领域非常广泛,尤其是在数据分析、人工智能、网络爬虫等领域中拥有广泛的应用。而在Python中,有时候需要控制输出内容的样式,比如在输出时避免出现换行,这个需…

Bootstrap中的js插件使用

1. 标签页 1.1 init <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevic…

sqli_labs21-23

less21 这题是cookie注入&#xff0c;如果不登录进去是看不到cookie信息的&#xff0c;所以我们要先登录进去 用户admin&#xff0c;密码admin 抓包后发现cookie字段有base64编码信息&#xff0c;选中后burp自动检测翻译 既然是cookie注入并且字段是被加密了的&#xff0c;说明…

chatgpt赋能python:Python中5/2问题引发的思考

Python中5/2问题引发的思考 在Python中&#xff0c;我们常常遇到数字计算的问题&#xff0c;比如5/2。当我们在Python中执行如下代码时&#xff1a; print(5/2)输出结果为2.5。 但是在其他编程语言中&#xff0c;比如C和Java&#xff0c;同样的计算结果是2&#xff0c;而不是…

chatgpt赋能python:Pythonnumpy库下载教程:学习数据分析必备工具

Python numpy库下载教程&#xff1a;学习数据分析必备工具 介绍 Python是一种优秀的脚本语言&#xff0c;常用于数据分析、机器学习等领域&#xff0c;而Numpy是Python中最基础的科学计算库&#xff0c;提供了大量针对数组及矩阵操作的函数和方法。然而&#xff0c;对于初学者…

jQuery元素操作和尺寸位置

1. 遍历元素 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width,…

Kubernetes_核心组件_kubelet_kubelet服务全解析

文章目录 前言一、查看kubelet当前运行1.1 查看kubelet当前运行1.2 kubelet配置文件1.3 kubelet启动参数文件1.4 kubelet启动全过程 (自定义启动参数文件) 二、kubelet启动过程2.1 kubelet启动过程2.2 自定义kubelet所有文件并运行步骤1&#xff1a;新建静态token文件和user&am…

Fourier分析入门——第11章——Fourier变换

目录 第11章 Fourier变换(Transform) 11.1 引言 11.2 逆向正弦和余弦变换(The Inverse Cosine and Sine Transforms) 11.3 正向正弦和余弦变换(The Forward Cosine and Sine Transforms) 11.4 离散谱对比谱密度(Discret spectra vs. spectral density) 11.5 Fourier变换的…

chatgpt赋能python:Python中4.5/2等于多少?——解密Python的除法运算

Python中4.5/2等于多少&#xff1f;——解密Python的除法运算 Python作为一种常用的编程语言&#xff0c;在业界有着广泛的应用。而除法是Python中常用的运算之一。但是&#xff0c;当我们输入4.5/2时&#xff0c;会得到什么样的结果呢&#xff1f;这篇文章将解密Python的除法…

Spring Boot:从入门到实践的全面指南

文章目录 1. Spring Boot简介及特性1.1 简介&#xff1a;什么是Spring Boot1.2 特性&#xff1a;Spring Boot的优势与特点1.3 四大核心&#xff1a;Spring Boot的核心组成 2. Spring Boot入门案例2.1 Spring Boot项目开发步骤2.2 创建一个Spring MVC的Spring Boot Controller2.…

chatgpt赋能python:Python不能参加奥赛的原因

Python不能参加奥赛的原因 Python 是一种广泛使用的高级编程语言&#xff0c;以其简单易学、可读性高等特点受到了众多程序员的喜爱&#xff0c;但是它在国际奥林匹克竞赛中并不被允许参赛。本文将会介绍 Python 不能参加奥赛的原因&#xff0c;并且分析该限制是否合理。 原因…

使用 GitHub Actions 自动部署 Hexo 个人博客

文章目录 申请 GitHub Token源码仓库配置 Github Action重新设置远程仓库和分支查看部署 每次部署 Hexo 都需要运行 hexo cl & hexo g & hexo d 指令三件套完成推送到远程仓库&#xff0c;随着文章越来越多&#xff0c;编译的时间也会越来越长&#xff0c;通过 Github …

前缀树概念

前缀树&#xff08;prefix tree&#xff09; 准备一个Str[]&#xff0c;数组中元素有[“abc”,“bcd”,“abg”,“bcde”,“qwe”]&#xff0c;如何将数组中元素加到树中呢&#xff1f; 从最开始的字符串abc说&#xff0c;第一个字符是a&#xff0c;从一个空的头节点出发&#…

jQuery属性操作和内容文本值

1. 属性操作 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width,…

全局CSS样式1

1. 响应式基础 1.1 init <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compati…

chatgpt赋能python:Python两行三列列表:更高效的数据展示方式

Python 两行三列列表&#xff1a;更高效的数据展示方式 在Python编程中&#xff0c;经常会需要对数据进行展示。而最常见的方式则是使用列表。然而&#xff0c;当数据量较大时&#xff0c;传统的列表显示方式显得过于冗长。Python两行三列列表的使用&#xff0c;不仅可以增加代…

chatgpt赋能python:Python不挂科,学会这些技能就足够

Python不挂科&#xff0c;学会这些技能就足够 Python已成为现代编程语言中最受欢迎的一种&#xff0c;它擅长处理数据、人工智能等复杂的软件开发任务。互联网时代的到来也让Python的使用场景更加广泛&#xff0c;从前后端开发到数据分析。无论是学习Python的初学者还是有一定…

MQTT(3):MQTT协议原理

官方文档中对于MQTT协议包的结构有着具体的说明&#xff1a;http://mqtt.org/documentation 在MQTT协议中&#xff0c;一个MQTT数据包由&#xff1a;固定头&#xff08;Fixed header&#xff09;、可变头&#xff08;Variable header&#xff09;、消息体&#xff08;payload&…

chatgpt赋能python:介绍Python在SEO中的重要性

介绍Python在SEO中的重要性 随着互联网的不断发展&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;变得越来越重要。SEO一直是网络营销的重要组成部分&#xff0c;可以增加网站的可见性和流量。Python作为一种强大的编程语言&#xff0c;可以帮助网站优化人员更好地管理和…

LIMA和QLoRA论文解读

《LIMA: Less Is More for Alignment》 paper: https://arxiv.org/abs/2305.11206 Meta在2023年5月发布了论文《LIMA: Less Is More for Alignment》&#xff0c;基于LLaMa-65B微调了大模型LIMA&#xff0c;号称只用了1000个精心策划的问题和答复进行微调&#xff0c;就达到了…