首页 > 其他分享 >sftp服务

sftp服务

时间:2023-04-02 23:44:56浏览次数:27  
标签:FTP 服务 端口 SFTP ssh 服务器 sftp

sftp

sftp介绍

SFTP(SSH File Transfer Protocol,也称 Secret File Transfer Protocol),是一种基于SSH(安全外壳)的安全的文件传输协议。使用SFTP协议可以在文件传输过程中提供一种安全的加密算法,从而保证数据的安全传输,所以SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低。

SFTP是SSH的一部分,SFTP没有单独的守护进程,它必须使用SSHD守护进程(端口号默认是22)来完成相应的连接操作,sftp服务作为ssh的一个子服务,是通过 /etc/ssh/sshd_config 配置文件中的 Subsystem 实现的,如果没有配置 Subsystem 参数,则系统是不能进行sftp访问的。所以,要分离ssh和sftp服务的话,基本的思路是创建两个sshd进程,分别监听在不同的端口,一个作为ssh服务的deamon,另一个作为sftp服务的deamon。

FTP

FTP是TCP/IP协议组中的协议之一,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。
FTP 是基于(C/S)模型而设计的,由两个部分组成:

  • FTP服务器(用来存储文件)
  • FTP客户端(用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源)

默认情况下FTP协议使用TCP端口中的20和21这两个端口。21端口用于传输控制信息,而是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用被动模式则具体使用哪个端口要服务器端和客户端协商决定。FTP传输模式分为以下两种:

  • 主动模式(Port)
    【图片】
    FTP客户端首先和FTP服务器的TCP21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。

  • 被动模式(Passive)
    【图片】
    在建立控制通道与主动模式相似,但建立连接后是Pasv命令。FTP服务器收到Pasv命令后便随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,通过三次握手建立通道,然后FTP服务器将通过这个端口进行数据的传送。

注意:很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。

FTP与SFTP区别

  1. 安全通道

FTP 不提供任何安全通道来在主机之间传输文件;
SFTP协议提供了一个安全通道,用于在网络上的主机之间传输文件。

  1. 使用的协议

FTP使用 TCP/IP协议。
SFTP是SSH协议的一部分,它是一种远程登录信息,安全文件传送协议。

  1. 链接方式

FTP使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。
SFTP是在客户端和服务器之间通过SSH协议(TCP端口22)建立的安全连接来传输文件。

  1. 安全性

FTP密码和数据以纯文本格式发送,大多数情况下是不加密的,安全性不高。
SFTP会在发送之前加密数据,二进制的形式传递,是无法 "按原样" 阅读的,安全性较高。

SFTP的安装和配置

安装SFTP需要一个SSH服务器作为前提,SSH服务器一般都已经在Linux系统中安装好,只需要根据自己的需要进行相应的配置。具体步骤如下:

安装OpenSSH服务器:

yum -y install openssh-server

创建SFTP用户组和用户

groupadd sftp
useradd -g sftp -s /sbin/nologin sftpuser
mkdir /home/sftpuser/{.ssh,sftpdir}
touch /home/sftpuser/.ssh/authorized_keys 
chmod 600 /home/sftpuser/.ssh/authorized_keys
chown root.root /home/sftpuser && chmod 755 /home/sftpuser
chown sftpuser.sftp -R /home/sftpuser/{.ssh,sftpdir}

这将创建一个名为sftpuser的用户,其家目录为/home/sftpuser

修改OpenSSH配置文件:

cp /etc/ssh/sshd_config{,.bak}
vim /etc/ssh/sshd_config

将以下几项配置修改为如下内容:

#Subsystem sftp /usr/libexec/openssh/sftp-server   
Subsystem sftp internal-sftp -l INFO -f AUTH
Match group sftpusers     # 限制SFTP子系统的使用仅适用于sftp用户组中的用户。
ChrootDirectory %h        # 将用户的根目录限制为其家目录。
X11Forwarding no          # 禁止X11转发,以提高安全性。
AllowTcpForwarding no     # 禁止TCP转发,以提高安全性。
ForceCommand internal-sftp   # 强制所有SFTP会话使用内部的SFTP子系统,以避免shell访问。

这个配置中,Subsystem sftp internal-sftp 是指将所有SFTP连接重定向到OpenSSH的内部SFTP子系统。

  • “-l INFO” 参数是用来设置日志级别为“INFO”。这将记录所有重要的信息,如启动和停止服务、连接和断开连接等。
  • “-f AUTH” 参数是用来指定日志文件的位置。日志文件路径为“/var/log/auth.log”,所有与SFTP身份验证相关的信息都将被记录在这个文件中。

sftp-server 是OpenSSH服务器默认使用的SFTP服务器程序,它运行在独立的进程中,通过SFTP协议提供文件传输服务。它具有很好的兼容性,可以与大多数SFTP客户端一起使用,而且功能比较完整,可以满足大多数用户的需求。但是,由于它运行在独立的进程中,因此需要更多的系统资源,并且可能存在安全漏洞。

internal-sftp 是OpenSSH服务器提供的另一种SFTP服务器实现方式,它是一个内部的SFTP服务器,与OpenSSH服务器在同一进程中运行。它的优点是可以更好地控制对文件系统的访问,而且对系统资源的消耗更少,从而提高了服务器的性能。但是,由于它的实现方式不同于sftp-server,因此可能存在与某些SFTP客户端不兼容的情况。

重新启动SSHD服务

sudo systemctl restart sshd

SFTP验证连接方式

账户密码验证:使用账户ID和密码进行验证,凭据验证过程中是加密的。

passwd sftpuser
# vim /etc/ssh/sshd_config
PasswordAuthentication yes

SSH密钥验证:通过SSH密码进行验证。

访问端生成密钥,将公钥上传至sftp /home/user/.ssh/authorized_keys中,实现免密访问
ssh-keygen -t rsa -b 4096 -C "SFTP key"

sftp服务端配置
# vim /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# ChallengeResponseAuthentication yes       # 用于启用或禁用基于挑战响应协议的身份验证(多因素身份验证)。例如使用Google Authenticator进行身份验证。

SFTP的使用

标签:FTP,服务,端口,SFTP,ssh,服务器,sftp
From: https://www.cnblogs.com/chuyiwang/p/17281814.html

相关文章

  • SignalR服务端及客户端实现
    服务器端:引用nuget:1、Microsoft.AspNet.SignalR.SelfHost2、Microsoft.Owin.CorsinternalclassProgram{staticvoidMain(string[]args){stringuri="http://localhost:8081";using(WebApp.Start(uri))......
  • 电子商务网站行为分析及服务推荐
    连接数据库importosimportpandasaspd#修改工作路径到指定文件夹os.chdir("D:\Python\数据处理")#第一种连接方式fromsqlalchemyimportcreate_engineengine=create_engine('mysql+pymysql://root:[email protected]:3306/7law?charset=utf8')connection=......
  • NodeJS 实战系列:个人开发者应该如何选购云服务
    这文章至少值一千元,因为这是我保守估计花出去的冤枉钱(请自行脑补一个苦笑的emoji)文章中会穿插选择云服务的一些建议,当然也会提供一些“薅羊毛”的技巧。不过在此之前我们要想清楚一件更重要的事情:我为了什么购买云服务做产品还是做技术这个问题不仅决定了你接下来的购买策略,还......
  • CentOS7服务器2T及2T以下磁盘挂载
    CentOS7服务器2T及2T以下磁盘挂载目录CentOS7服务器2T及2T以下磁盘挂载0.环境信息1.详细挂载步骤1.1.查看当前系统磁盘使用情况1.2.查看是否有未知硬盘未挂载1.3.分区1.3.1.依次输入以下命令1.4.格式化分区1.5.挂载硬盘1.5.1.创建挂载目录——挂载点/挂载位置1.5.2.挂载硬......
  • 第11章 电子商务网站用户行为分析及服务推荐
    一、背景与挖掘目标  二、分析方法与过程网站智能推荐的主要步骤如下:从系统中获取用户访问网站的原始记录。分析用户访问内容,用户流失及用户分类等。对数据进行预处理,包含数据去重,数据变换,数据分类等过程。以用户访问html后缀的网页为关键条件,对数据进行处理。对比多......
  • nginx 下监听同一端口通过路径转发不同服务
    注意v1d2最优先匹配server{listen80;server_namelocalhost; location/v1d2{proxy_passhttp://127.0.0.1:8088;} location/{ root/data/dist; try_files$uri$uri/@router; indexindex.htm......
  • 十一章电子商务网站用户行为分析及服务推荐
    第一部分代码一:python访问数据库importpandasaspdfromsqlalchemyimportcreate_engineengine=create_engine('mysql+pymysql://root:102011@localhost/test?charset=utf8')sql=pd.read_sql('all_gzdata',engine,chunksize=10000)''......
  • 第十一章 电子商务网站用户行为分析及服务推荐
    #代码11-1Python访问数据库importosimportpandasaspd#修改工作路径到指定文件夹#os.chdir('./data')#第一种连接方式fromsqlalchemyimportcreate_engineengine=create_engine('mysql+pymysql://root:123456@localhost:3306/test_1?charset=utf8')sql=p......
  • 5 分钟读懂开源服务框架 Dubbo 及其最新规划
    Dubbo简介一句话定义ApacheDubbo是一款微服务开发框架,它帮助解决微服务开发中的通信问题,同时为构建企业级微服务的提供服务治理能力,Dubbo不绑定编程语言,我们的目标是为所有主流语言提供对等的微服务开发体验。基本架构Dubbo从架构图上分为数据面和控制面。在数据面,使用Dubbo......
  • 5 分钟读懂开源服务框架 Dubbo 及其最新规划
    Dubbo简介一句话定义ApacheDubbo是一款微服务开发框架,它帮助解决微服务开发中的通信问题,同时为构建企业级微服务的提供服务治理能力,Dubbo不绑定编程语言,我们的目标是为所有主流语言提供对等的微服务开发体验。基本架构Dubbo从架构图上分为数据面和控制面。在数据面,使用......