Linux搭建SFTP服务器
案例:搭建SFTP服务器
SFTP(SSH文件传输协议)
SFTP(SSH文件传输协议)是一种安全的文件传输协议,用于在计算机之间传输文件。它基于SSH(安全外壳协议)的子系统,提供了加密的、可靠的数据传输通道,用于在客户端和服务器之间安全地传输文件。
SFTP的特点:
- 安全性: SFTP通过SSH协议进行数据传输,使用了加密和身份验证机制,因此提供了高度的安全性,能够有效防止数据被窃听和篡改。
- 功能丰富: SFTP支持文件上传、下载、删除、重命名等文件操作,同时还支持文件夹的创建和管理,提供了丰富的功能以满足各种文件传输需求。
- 跨平台性: SFTP是一种标准化的协议,可以在多种操作系统上使用,包括Linux、Windows、macOS等,因此非常灵活和通用。
- 灵活性: SFTP允许用户使用多种客户端工具进行文件传输,包括命令行工具、图形界面工具以及基于Web的工具,使得用户可以根据自己的偏好选择合适的工具进行操作。
SFTP的应用场景:
- 远程服务器管理: 系统管理员可以使用SFTP来管理远程服务器,例如上传、下载和更新文件,进行日志文件的查看和分析等操作。
- 网站维护: 网站管理员可以使用SFTP来上传和下载网站文件,更新网站内容,管理网站的静态资源和动态脚本文件等。
- 备份和恢复: 用户可以使用SFTP来进行文件备份和恢复操作,将重要数据备份到远程服务器上,以防止本地数据丢失或损坏。
- 文件共享: 团队成员可以使用SFTP来共享文件和资源,进行协作编辑和版本控制,保持团队之间的工作同步和一致。
下面我们来在Linux中搭建一台SFTP服务器
步骤序号 | 步骤描述 |
---|---|
1 | 安装OpenSSH服务器软件包 |
2 | 配置SSH服务,启用SFTP子系统 |
3 | 创建SFTP用户组 |
4 | 创建SFTP用户,设置家目录和访问权限 |
5 | 重启SSH服务使配置生效 |
6 | 测试SFTP连接,确认服务器能够接受SFTP客户端的连接 |
1、创建用户组
在搭建SFTP服务器时创建用户组是为了更好地管理和控制用户的访问权限。简单来说,通过创建用户组,你可以将具有相似权限和访问需求的用户组织在一起,并轻松地为他们设置统一的文件访问权限和限制。这样可以更有效地管理SFTP服务器的安全性,并确保只有授权用户能够访问和传输文件。
# 创建一个新的用户组,用于管理SFTP用户。
groupadd GWSFTP
2、创建用户
创建用户是为了允许特定的个体或实体通过SFTP协议访问服务器并进行文件传输。单独设置用户还有以下好处
- 身份验证:每个用户都有自己的用户名和密码,这样可以确保只有授权的用户能够访问服务器。
- 访问控制:可以根据每个用户的需求和角色设置不同的访问权限,限制其对文件系统的访问范围,从而确保安全性。
- 跟踪和管理:通过用户账户,管理员可以追踪每个用户的活动,包括登录时间、文件传输记录等,并对用户进行管理和监控。
- 个性化配置:每个用户可以有自己的配置文件、家目录和设置,这样可以根据用户的需要进行个性化定制。
# 创建一个新的SFTP用户,并将其添加到 GWSFTP 组中。
useradd -m -G GWSFTP -s /bin/false hrfan_sftp# 为用户设置密码
passwd hrfan_sftp
# -m 选项表示创建用户的主目录,如果不存在则会自动创建。
# -G GWSFTP选项表示将新用户添加到GWSFTP组中。
# -s /bin/false选项表示指定用户的登录shell为/bin/false,这意味着该用户无法登录到系统。
# hrfan_sftp是新创建的用户名。
3、设置SFPT目录
单独设置SFTP目录是为了限制用户的访问范围,提高服务器的安全性。具体来说, 还有以下几点优点
- 限制访问范围:将用户限制在特定的目录下,可以防止其访问服务器上的其他敏感文件和目录,降低了潜在的安全风险。
- 减少误操作:用户只能在其指定的目录下进行操作,减少了意外删除或修改其他重要文件的风险。
- 简化权限管理:通过单独设置SFTP目录,管理员可以更轻松地管理用户的访问权限,而不必担心用户越权访问其他目录。
- 提高隔离性:将不同用户的文件隔离在不同的目录下,有助于提高文件的隔离性,减少因用户错误操作或恶意行为而造成的影响范围。
# 设置SFTP的文件目录,可以执行以下操作最好按照上面的思路来,否则可能连不上SFTP服务器:首先建立file目录,他的拥有者必须是root,并且其他用户不能拥有写入的权限(ChrootDirectory 这个选项要求的),即权限不能超过755(否则连不上)很明显,这样,我们使用SFTP用户登录就只能进行下载操作,无法上传文件;所以在/file/IN目录下建一个用于上传和下载的目录,他的拥有者可以是SFTP用户,可以无限制操作该目录下的文件;
# 创建SFTP用户目录文件
mkdir /file
# 分配文件所属的组
chown root:GWSFTP /file
# 修改权限
chmod 755 /file
# 创建专属用户的文件
mkdir -p /file/IN
chown hrfan_sftp:GWSFTP /file/IN
chmod 755 /file/IN
4、修改服务器的SFTP配置
# 编辑/etc/ssh/sshd_config文件,注释其中的Subsystem sftp /usr/libexec/openssh/sftp-server,然后新增配置如下:
# 我的SFTP配置
Subsystem sftp internal-sftp # SFTP子系统使用内置的SFTP服务器
Match Group GWSFTP # 以下配置仅适用于属于该组的用户
ChrootDirectory /file # 目录限制
ForceCommand internal-sftp # 强制用户使用内置的SFTP服务器进行会话,而不允许执行其他命令
AllowTcpForwarding no # 禁止TCP转发
X11Forwarding no # 禁止X11转发
5、检查配置是否正确
sshd -t# 重启 sshd
systemctl restart sshd
6、修改端口
# 如果使用的是 firewall-cmdfirewall-cmd --permanent --zone=public --add-port=5678/tcp
# 需要先开启防火墙端口firewall-cmd --reload
# 修改 /etc/ssh/sshd_config文件 注释进行修改 Port 5678
# 查询sftp连接日志 tail -f /var/log/auth.log
7.测试是否连接成功
相关文章:

Linux搭建SFTP服务器
案例:搭建SFTP服务器 SFTP(SSH文件传输协议) SFTP(SSH文件传输协议)是一种安全的文件传输协议,用于在计算机之间传输文件。它基于SSH(安全外壳协议)的子系统,提供了加密的…...

MobaXterm无法上传整个文件夹,只能上传的单个文件
问题描述: 本来想使用MobaXterm上传.vscode文件夹上传到服务器,但是选择文件夹打开后只能选择文件夹下面的子文件无法上传整个文件。 解决方案: 1、简单暴力 2、压缩后解压...

Android 中get请求网络数据 详细举例
请求链接 https://api.bilibili.com/x/web-interface/ranking 1.添加网络权限 依赖等 implementation com.squareup.okhttp3:okhttp:4.9.3 implementation com.google.code.gson:gson:2.8.92.写请求类network package com.example.myapplication;import android.graphics.Bi…...

每日五道java面试题之mysql数据库篇(六)
目录: 第一题. MySQL中InnoDB引擎的行锁是怎么实现的?第二题. InnoDB存储引擎的锁的算法有三种第三题. 什么是死锁?怎么解决?第四题. 数据库的乐观锁和悲观锁是什么?怎么实现的?第五题. 为什么要使用视图&a…...

Latex——多张图排列
一、方式一(subfig 与 subfloat 配合使用) % Need:\usepackage{subfig} \begin{figure}[htbp] % \setlength{\abovecaptionskip}{0.2cm} % \setlength{\belowcaptionskip}{-0.5cm} \centering\subfloat[MOT15]{\label{fig:a}\includegrap…...

前端复选框问题-节点赋值未选中最后显示时确变成选中状态?
问题: 前两天一同事请教我:前端复选框问题-节点赋值未选中最后显示时确变成选中状态? 还有就是明明传过为的是false,在控制台上打印确变成选中状态,如下图: 以下是前端vue代码: <Scroll h…...

JavaScript命名标识符规范,前端开发面试
前端的现状 提到现状,必须先提到一个概念 大前端。由于近几年互联网的发展,尤其是移动互联网的发展,有的大前端概念将 Native 归入前端的范畴,有的大前端概念将 Node 甚至只渲染页面的 PHP 归入前端范畴,但不管怎么说…...

从零学习Linux操作系统 第三十部分 部署Anisble
一、ansible实验环境的部署 主控机 更改服务器主机名 hostnamectl set-hostname westos_ansible.westos.org 主服务器需要能够实现上网 修改网卡使之能够上网 能ping通 代表可以连接外网 搭载本地软件仓库 并且挂载镜像 装载 dnf install httpd -y 让其开机启动并且…...

C++对象模型剖析(六)一一Data语义学(三)
Data 语义学(三) “继承” 与 Data member 上期的这个继承的模块我们还剩下一个虚拟继承(virtual inheritance)没有讲,现在我们就来看看吧。 虚拟继承(Virtual Inheritance) 虚拟继承本质就是…...

Java 代理模式详解(附案例源代码)
前言 Java代理模式是一种设计模式,在 Java 开发中被广泛应用。它允许我们通过添加一个代理对象来控制对另一个对象的访问,从而提供了一种间接访问实际对象的方法。 代理模式可以分为静态代理和动态代理两种。静态代理是在代码实现阶段就确定了代理…...

七牛云 上传 文件 file is empty
问题 七牛云 上传 文件 file is empty 详细问题 笔者进行Android 开发,使用URI上传文件,上传核心代码 具体报错信息 {ver:8.7.0,ResponseInfo:1709276329412131,status:-6, reqId:, xlog:null, xvia:null, host:null, time:1709276329,error:file is…...

【AI视野·今日Sound 声学论文速览 第五十二期】Tue, 5 Mar 2024
AI视野今日CS.Sound 声学论文速览 Tue, 5 Mar 2024 Totally 18 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers SA-SOT: Speaker-Aware Serialized Output Training for Multi-Talker ASR Authors Zhiyun Fan, Linhao Dong, Jun Zhang, Lu Lu, Zejun M…...

使用 BLAS 调用加快生成的独立代码中的矩阵运算
为了提高某些低级向量生成的代码的执行速度,并 矩阵运算(如矩阵乘法)在独立代码中,指定您 要MATLAB Coder™生成 BLAS 调用。BLAS 是一个用于低级向量和矩阵计算的软件库,它具有 几个高度优化的机器特定实现。代码生成…...

一台服务器,最大支持的TCP连接数是多少?
一个服务端进程最大能支持多少条 TCP 连接? 一台服务器最大能支持多少条 TCP 连接? 一、原理 TCP 四元组的信息:源IP、源端口、目标IP、目标端口。 一个服务端进程最大能支持的 TCP 连接个数的计算公式:最大tcp连接数客户端的IP…...

微信小程序云开发教程——墨刀原型工具入门(编辑页面)
引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用…...

flutter打包app
Flutter 打包APP (Android & IOS)_encountered error while building for device.-CSDN博客 使用命令行 keytool -genkey -v -keystore ../key -keyalg RSA -keysize 2048 -validity 10000 -alias key 将在文件根目录上一层生成key文件࿰…...

力扣543. 二叉树的直径
Problem: 543. 二叉树的直径 文章目录 题目描述思路复杂度Code 题目描述 思路 1.最大直径 左子树的最大深度 右子树的最大深度; 2.定义一个变量maxDiameter记录最大直径,并编写一个递归函数maxDepth,利用树的后序遍历每次递归求取leftMax&a…...

python网络爬虫教程笔记(1)
系列文章目录 文章目录 系列文章目录前言一、爬虫入门1.爬虫是什么?2.爬虫工作原理3.爬虫基本原理4.工作流程5.HTTP请求6.HTTP响应7.HTTP原理:证书传递、验证和数据加密、解密过程解析8.Urllib.request库的使用9.TCP3次握手,4次挥手过程 总结…...

C# 异步返回类型详解
在现代软件开发中,异步编程已经成为一种重要的编程范式,尤其是在需要与I/O密集型操作交互的上下文中,比如网络请求、数据库操作等。C# 语言提供了强大的异步支持,使得异步编程变得更加简单和直观。本文将详细介绍C#中异步返回类型…...

BAT等大厂必问技术面试题,【2024Android最新学习路线
下面分享一下我在爱奇艺的面经 面试前的话:在面试时一定不要受前面没有过的面试的影响,一定要有一个好的心态,不要面试还没开始就自己把自己思绪搞乱了 一共进行了4轮面试 爱奇艺一面 50min 项目 主要介绍了以前做过的项目,分析…...

72. 编辑距离【leetcode】/动态规划难
72. 编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 “horse”, word2 “ros”…...

【MySQL】视图、索引
目录 视图视图的用途优点视图的缺点创建视图查看视图修改视图删除视图注意事项 索引索引的原理索引的数据结构二分查找法Hash结构Hash冲突!!! B树二叉查找树 存在问题改造二叉树——B树降低树的高度 B树特点案例继续优化的方向 改造B树——B树…...

反编译java生成的.class文件
java代码编译后生成xxx.class文件,有时候需要反编译这个class文件看代码是怎么写的,可以使用下面这个工具。 工具已经上传到资源,链接: https://download.csdn.net/download/weixin_42556307/88915887 具体使用如下: …...

Cookie 探秘:了解 Web 浏览器中的小甜饼
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

Python线性代数数字图像和小波分析之二
要点 数学方程:数字信号和傅里叶分析,离散时间滤波器,小波分析Python代码实现及应用变换过程: 读取音频和处理音频波,使用Karplus-强算法制作吉他音频离散傅里叶计算功能和绘制图示结果计算波形傅里叶系数正向和反向&…...

LC.exe”已退出,代码为 -1
尽管网络上已经有许多详尽的说明和资料,但鉴于个人对大量文字的理解有反感,我就写一个更为直观、简洁的方式来呈现我的解决方案。 1.问题图片。 2.删除licenses.licx 3.问题解决...

springboot + jpa + 达梦数据库兼容 Mysql的GenerationType.IDENTITY主键生成策略
导入达梦数据库对hibernate的方言包 <dependency><groupId>com.dameng</groupId><artifactId>DmDialect-for-hibernate5.6</artifactId><version>8.1.2.192</version></dependency>配置文件中添加方言配置和主键生成策略配置…...

Redis优化与应用
Redis性能调优 - Redis的性能调优是一个比较复杂的过程,需要从多个方面进行优化,如内存使用、命令使用等。 - 案例:减少不必要的持久化操作。默认情况下,Redis会执行RDB和AOF两种持久化方式。如果不需要持久化,或者可…...

深入了解Kafka的文件存储原理
Kafka简介 Kafka最初由Linkedin公司开发的分布式、分区的、多副本的、多订阅者的消息系统。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存是根据Topic进行归类,发送消息者称为Producer&…...

RabbitMQ 高级
在昨天的练习作业中,我们改造了余额支付功能,在支付成功后利用RabbitMQ通知交易服务,更新业务订单状态为已支付。 但是大家思考一下,如果这里MQ通知失败,支付服务中支付流水显示支付成功,而交易服务中的订单…...