【Linux】搭建SFTP文件服务器

https://blog.csdn.net/weixin_43764974/article/details/130915066

一、协议介绍
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协议的主要特点包括:

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

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

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

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

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

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

FTP的基本工作原理如下:

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

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

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

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

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

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

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

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

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)的基本工作原理如下:

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

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

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

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

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

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

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

1.3 ssh协议
1.31 特点

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

SSH协议的主要特点包括:

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

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

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

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

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

1.32 基本工作原理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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文件服务器

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

创建SFTP用户组和用户:

创建一个新的用户组,用于管理SFTP用户。

groupadd GSFTP

1

创建一个新的SFTP用户,并将其添加到My_sftp组中。

useradd -m -G GSFTP-s /bin/false june
passwd june# 为用户设置密码

1
2

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

设置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用户,可以无限制操作该目录下的文件;

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

修改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转发

检查配置是否正确

sshd -t

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

在这里插入图片描述

重启SSH服务器:配置完成后,重新启动SSH服务器以使更改生效。

sudo service ssh restart  # 或 systemctl restart sshd

1

连接到SFTP服务器:现在,您可以使用SFTP客户端(如FileZilla、WinSCP或命令行的sftp工具)连接到搭建好的SFTP服务器。

sftp username@server_ip

1

提示输入密码,并可以开始使用SFTP客户端进行文件传输和管理操作。
三、连接测试
3.1 电脑连接

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

使用一些带有sftp功能的文件APP就可以连接了,比如owfiles、谷歌的Documents


发表评论

电子邮件地址不会被公开。 必填项已用*标注