Linux配置SFTP用户的详细过程
0. 背景
Linux机器上已有路径/data/tomcat/apache-tomcat-8.5.96/webapps/webroot,需要在该路径之下配置一个目录对外暴露给业务人员使用。业务人员使用sftp协议上传文件。
下面是相关配置:
-
SFTP 用户名:iios
-
SFTP主目录:
/data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp -
iios用户的sftp目录(用户根目录):
/data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios -
iios用户sftp上传目录:
/data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/upload
注意:下面的命令皆在root用户下操作完成
1. 创建sftp相关目录 && 生成 sftp用户
创建目录:
mkdir -p /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/upload
Q:为什么创建了 /sftp/iios/upload 三级目录呢?
A:当sftp的方式用户登录到用户根目录(/sftp/iios/)后,根目录是无法写入的。所以还需要在用户根目录下创建upload目录。详细解释在文章末尾
创建角色:
-
创建用户组:
groupadd sftp -
useradd -g sftp -M -s /sbin/nologin iios- -g :指定用户组
- -M :不要创建该用户的家目录
- -s:指定该用户登录后使用的shell
有些文章/sbin/nologin 与 /bin/false 区别
- 配置该用户密码:passwd iios
2. 修改sftp 配置文件
-
vi /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server #注释掉此行并添加下列多行 Subsystem sftp internal-sftp Match User iios ChrootDirectory /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/ #chroot目录,按需自定义 X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp注意:ChrootDirectory 目录不能直接配置到用户sftp上传目录,需要配置到上一级即用户根目录
-
重启ssh服务:
service sshd reloadorsystemctl restart sshd
3. 配置sftp目录权限
注意:ChrootDirectory 的权限设定有两个非常重要的规则
- 从该目录开始上钻到系统根目录为止的目录的所有者有且仅是root
- 从该目录开始上钻到系统根目录为止的目录都不能具有群组写入权限
如果你的目录层级较多,记得逐级检查!!!
按上述规则设置SFTP主目录与用户根目录的目录权限
chown root:root /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/chown root:root /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iioschmod 755 /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/chmod 755 /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios
将iios用户sftp上传目录的目录权限设置为 iios ,这样iios才可以上传文件
chown iios:sftp data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/chmod 777 /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/
4. 测试sftp
- 终端中测试sftp 是否能登录: sftp iios@localhost …
- 之后使用sftp工具上传文件
5. QA
-
Q1:为什么创建了 /sftp/iios/upload 三级目录?
-
A1 :1. sshd_config配置文件的
ChrootDirectory配置的路径属主必须是root且只有属主拥有写权限,即ChrootDirectory(…/sftp/iios)最大权限也只有755
2. 即在iios的用户根目录中,iios用户没有写入权限
3. 为了保证iios有写入权限,只能在用户根目录再创建一个子目录(/upload),由于该目录不受规则约束,所以可以自由设置权限例如777 -
Q2 : 为什么会有
ChrootDirectory的规则(属主和写入权限)?文档出处在哪里? -
A2: 终端输入
man sshd_config,Description下翻到ChrootDirectory条目:原文摘录如下ChrootDirectory
Specifies the pathname of a directory to chroot(2) to after authentication. At session startup sshd(8) checks that all components of the pathname are root-owned directories which are not writable by any other user or group.
After the chroot, sshd(8) changes the working directory to the user’s home directory. Arguments to ChrootDirectory accept the tokens described in the TOKENS section.上文中:
- sshd会将ChrootDirectory 配置的路径的所有目录检查是否是 root所有且其他用户或其他组没有写入权限
- sshd会将ChrootDirectory 配置的路径之后作为用户的主目录
相关文章:
Linux配置SFTP用户的详细过程
0. 背景 Linux机器上已有路径/data/tomcat/apache-tomcat-8.5.96/webapps/webroot,需要在该路径之下配置一个目录对外暴露给业务人员使用。业务人员使用sftp协议上传文件。 下面是相关配置: SFTP 用户名:iios SFTP主目录:/data/tomcat/apa…...
前端---JavaScript篇
1. 介绍 JavaScript 是 前端开发人员必须学习的 3 门语言中的一门: HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 接下来开始详解JavaScript。 2.引入方法 js有两种导入方式,一种是内部脚本:直接在html页面中…...
使用vue-admin-template时,需要注意的问题,包括一定要去除mock.js注释
在使用vue-admin-template等前端框架时,如果你没有打算用他们的mock数据,在生产环境下一定要注释mock引用的代码,虽然它没有被调用,但是如果你不注释,就会被打包进去。 找到main.js,看如下代码:…...
力扣hot100 最大子数组和 动态规划 分治 无后效性 子问题划分
👨🏫 题目地址 无后效性 为了保证计算子问题能够按照顺序、不重复地进行,动态规划要求已经求解的子问题不受后续阶段的影响。这个条件也被叫做「无后效性」。换言之,动态规划对状态空间的遍历构成一张有向无环图,遍…...
C语言--每日选择题--Day28
第一题 1. 设a和b均为double型变量,且a5.5、b2.5,则表达式(int)ab/b的值是( ) A:6.500000 B:6 C:5.500000 D:6.000000 答案及解析 D 本题考查的是不同数据类型之间的变量进行运算时…...
Linux 安装 Minio 配置 HTTPS
安装 创建目录 [roott2 local]# mkdir minio [roott2 local]# cd minio [roott2 minio]# mkdir data下载 [roott2 minio]# wget https://dl.min.io/server/minio/release/linux-amd64/minio [roott2 minio]# chmod x minio # 赋权设置账号密码 minio 默认账号密码为 minio…...
xcode opencv
1、导入报错 Undefined symbols: linker command failed with exit code 1 (use -v to see invocation) 直接添加如下图内容即可...
Spark---资源、任务调度
一、Spark资源调度源码 1、Spark资源调度源码过程 Spark资源调度源码是在Driver启动之后注册Application完成后开始的。Spark资源调度主要就是Spark集群如何给当前提交的Spark application在Worker资源节点上划分资源。Spark资源调度源码在Master.scala类中的schedule()中进行…...
单片机开发常见问题集合
文章目录 发送串口数据偶尔丢失字节 发送串口数据偶尔丢失字节 场景: 在STM32单片机中进行串口数据发送,在Linux/Windows上进行串口数据接收,会偶发出现接收到的数据有某些字节丢失。 分析: 在STM32中可以使用printf用于发送串口…...
Matlab 点云曲率计算(之二)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前已经讨论过许多关于计算曲率的问题,这里使用一个通过拟合三次曲面方程的方式来计算曲率,计算过程如下图所示: 二、实现代码 %********...
C++11的原子变量
C11提供了一个原子类型std::atomic<T>,可以使用任意类型作为模板参数,C11内置了整型的原子变量,可以更方便的使用原子变量,使用原子变量就不需要使用互斥量来保护该变量了,用起来更简洁。例如,要做一…...
北京交通大学 计算机网络体系与协议(研) 考试试卷
计算机网络体系与协议2023年期末考试 时长:120分钟 学院: 学号: 姓名: 一、简答题(每题5分) 1.简述公开密钥密码体制的工作原理…...
python之pyqt专栏7-信号与槽3
在上一篇文章中python之pyqt专栏6-信号与槽2-CSDN博客中,我们可以了解到对象可以使用内置信号,这些信号来自于类定义或者继承过来的。我们可以对这些信号可以通过connect连接槽函数。 需求 现在有一个需求,有两个UI界面“untitled.ui”和“u…...
高噪点灰度图目标粗定位CoraseLocation
高噪点的灰度图目标粗定位 /* ** name: CoraseLocation ** brief: 粗定位 ** param:[in] srcGray 灰度图() ** param:[in] box 目标尺寸(像素) ** param:[ou] roi 目标定位结果 ** return: true成功,false…...
Android:Google三方库之Firebase集成详细步骤(二)
Analytics分析 1、将 Firebase 添加到您的 Android 项目(如果尚未添加),并确保在 Firebase 项目中启用了 Google Analytics(分析): 如果您要创建新的 Firebase 项目,请在项目创建过程中启用 G…...
java使用freemarker模板生成html,再生成pdf
1.freemarker模板生成html 添加Maven依赖 在pom.xml文件中添加以下依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency>创建Freemarker…...
图解系列--Web服务器,Http首部
1.用单台虚拟主机实现多个域名 HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。。比如,提供 Web 托管服务(Web Hosting Service)的供应商,可以用一台服务器为多位客户服务,也可以以每位客户持有的域名运行各自不…...
直线(蓝桥杯)
直线 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上, 那么这些点中任意两点确定的直线是同一条。 给定平面上 2 3 个…...
Android:从源码看FragmentManager如何工作
一个Activity中,在某一个容器中,更换不同的Fragment,从而显示不同的界面,这个场景相信大家已经非常熟悉了,也知道Activity是通过FragmentManager来管理嵌入的Fragments的,所以今天就来看看FragmentManager是…...
LabVIEW通过编程将图形类控件的X轴显示为时间戳
LabVIEW通过编程将图形类控件的X轴显示为时间戳 每个版本的LabVIEW中都有属性节点,可以以编程方式调整X轴和Y轴格式。对于不同版本的LabVIEW,这些属性节点无法在同一个位置找到。请参阅以下部分,了解特定版本LabVIEW的相关属性节点的位置。 …...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
