非root用户组启动sftp_如何在 Debian 10 中配置 Chroot 环境的 SFTP 服务 | Linux 中国

6c5015fe604cf9e26daa7021ce941947.pngSFTP 是最常用的用于通过 ssh 将文件从本地系统安全地传输到远程服务器的方法https://linux.cn/article-12186-1.html作者:Pradeep Kumar译者:郑

SFTP 意思是“安全文件传输协议(Secure File Transfer Protocol)” 或 “SSH 文件传输协议(SSH File Transfer Protocol)”,它是最常用的用于通过 ssh 将文件从本地系统安全地传输到远程服务器的方法,反之亦然。sftp 的主要优点是,除 openssh-server 之外,我们不需要安装任何额外的软件包,在大多数的 Linux 发行版中,openssh-server 软件包是默认安装的一部分。sftp 的另外一个好处是,我们可以允许用户使用 sftp ,而不允许使用 ssh 。

当前发布的 Debian 10 代号为 ‘Buster’,在这篇文章中,我们将演示如何在 Debian 10 系统中在 “监狱式的” Chroot 环境中配置 sftp。在这里,Chroot 监狱式环境意味着,用户不能超出各自的家目录,或者用户不能从各自的家目录更改目录。下面实验的详细情况:

◈ OS = Debian 10◈ IP 地址 = 192.168.56.151

让我们跳转到 SFTP 配置步骤,

5835329e-df38-eb11-8da9-e4434bdf6706.svg

步骤 1、使用 groupadd 命令给 sftp 创建一个组

打开终端,使用下面的 groupadd 命令创建一个名为的 sftp_users 组:

root@linuxtechi:~# groupadd sftp_users5835329e-df38-eb11-8da9-e4434bdf6706.svg

步骤 2、添加用户到组 sftp_users 并设置权限

假设你想创建新的用户,并且想添加该用户到 sftp_users 组中,那么运行下面的命令,

语法:

# useradd -m -G sftp_users

让我们假设用户名是 jonathan

root@linuxtechi:~# useradd -m -G sftp_users jonathan

使用下面的 chpasswd 命令设置密码:

root@linuxtechi:~# echo "jonathan:" | chpasswd

假设你想添加现有的用户到 sftp_users 组中,那么运行下面的 usermod 命令,让我们假设已经存在的用户名称是 chris

root@linuxtechi:~# usermod -G sftp_users chris

现在设置用户所需的权限:

root@linuxtechi:~# chown root /home/jonathan /home/chris/

在各用户的家目录中都创建一个上传目录,并设置正确地所有权:

root@linuxtechi:~# mkdir /home/jonathan/uploadroot@linuxtechi:~# mkdir /home/chris/uploadroot@linuxtechi:~# chown jonathan /home/jonathan/uploadroot@linuxtechi:~# chown chris /home/chris/upload

注意: 像 Jonathan 和 Chris 之类的用户可以从他们的本地系统上传文件和目录。

5835329e-df38-eb11-8da9-e4434bdf6706.svg

步骤 3、编辑 sftp 配置文件 /etc/ssh/sshd_config

正如我们已经陈述的,sftp 操作是通过 ssh 完成的,所以它的配置文件是 /etc/ssh/sshd_config,在做任何更改前,我建议首先备份文件,然后再编辑该文件,接下来添加下面的内容:

root@linuxtechi:~# cp /etc/ssh/sshd_config /etc/ssh/sshd_config-orgroot@linuxtechi:~# vim /etc/ssh/sshd_config......#Subsystem sftp /usr/lib/openssh/sftp-serverSubsystem sftp internal-sftpMatch Group sftp_users X11Forwarding no AllowTcpForwarding no ChrootDirectory %h ForceCommand internal-sftp......

保存并退出文件。

为使上述更改生效,使用下面的 systemctl 命令来重新启动 ssh 服务:

root@linuxtechi:~# systemctl restart sshd

在上面的 sshd_config 文件中,我们已经注释掉了以 Subsystem 开头的行,并添加了新的条目 Subsystem sftp internal-sftp 和新的行。而

Match Group sftp_users –> 它意味着如果用户是 sftp_users 组中的一员,那么将应用下面提到的规则到这个条目。

ChrootDierctory %h –> 它意味着用户只能在他们自己各自的家目录中更改目录,而不能超出他们各自的家目录。或者换句话说,我们可以说用户是不允许更改目录的。他们将在他们的目录中获得监狱一样的环境,并且不能访问其他用户的目录和系统的目录。

ForceCommand internal-sftp –> 它意味着用户仅被限制到只能使用 sftp 命令。

5835329e-df38-eb11-8da9-e4434bdf6706.svg

步骤 4、测试和验证 sftp

登录到你的 sftp 服务器的同一个网络上的任何其它的 Linux 系统,然后通过我们放入 sftp_users 组中的用户来尝试 ssh 和 sftp 服务。

[root@linuxtechi ~]# ssh root@linuxtechiroot@linuxtechi's password:Write failed: Broken pipe[root@linuxtechi ~]# ssh root@linuxtechiroot@linuxtechi's password:Write failed: Broken pipe[root@linuxtechi ~]#

以上操作证实用户不允许 ssh ,现在使用下面的命令尝试 sftp:

[root@linuxtechi ~]# sftp root@linuxtechiroot@linuxtechi's password:Connected to 192.168.56.151.sftp> ls -ldrwxr-xr-x 2 root 1001 4096 Sep 14 07:52 debian10-pkgs-rw-r--r-- 1 root 1001 155 Sep 14 07:52 devops-actions.txtdrwxr-xr-x 2 1001 1002 4096 Sep 14 08:29 upload

让我们使用 sftp 的 get 命令来尝试下载一个文件:

sftp> get devops-actions.txtFetching /devops-actions.txt to devops-actions.txt/devops-actions.txt 100% 155 0.2KB/s 00:00sftp>sftp> cd /etcCouldn't stat remote file: No such file or directorysftp> cd /rootCouldn't stat remote file: No such file or directorysftp>

上面的输出证实我们能从我们的 sftp 服务器下载文件到本地机器,除此之外,我们也必须测试用户不能更改目录。

让我们在 upload 目录下尝试上传一个文件:

sftp> cd upload/sftp> put metricbeat-7.3.1-amd64.debUploading metricbeat-7.3.1-amd64.deb to /upload/metricbeat-7.3.1-amd64.debmetricbeat-7.3.1-amd64.deb 100% 38MB 38.4MB/s 00:01sftp> ls -l-rw-r--r-- 1 1001 1002 40275654 Sep 14 09:18 metricbeat-7.3.1-amd64.debsftp>

这证实我们已经成功地从我们的本地系统上传一个文件到 sftp 服务中。

现在使用 winscp 工具来测试 sftp 服务,输入 sftp 服务器 IP 地址和用户的凭证:

676306b19946c709f5e7679002eb2443.png

在 “Login” 上单击,然后尝试下载和上传文件:

d05834fbbbb4bb5da55ab1d58b5a1a06.png

现在,在 upload 文件夹中尝试上传文件:

9981edb025128726372c340b7568542d.png

上面的窗口证实上传是完好地工作的,这就是这篇文章的全部。如果这些步骤能帮助你在 Debian 10 中使用 chroot 环境配置 SFTP 服务器s,那么请分享你的反馈和评论。


via: https://www.linuxtechi.com/configure-sftp-chroot-debian10/

作者:Pradeep Kumar 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

6435329e-df38-eb11-8da9-e4434bdf6706.svg

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

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

相关文章

java权限修饰符

java权限修饰符 java一共有四种访问控制符1、private 表示私有,只有自己类能访问2、default 表示没有修饰符修饰,只有同一个报的类能访问3、protected 表示可以被同一个包的类以及其他包中的子类访问4、public 表示可以被该项目的所有包中的所有类访问类…

java封装练习

java封装练习 /*** 以面向对象的思想,编写自定义类描述图书信息。设定属性包括:书名、作者、出版社名、价格* 方法包括:信息介绍** 要求:* 1、设置属性的私有访问权限,通过公有的get、set方法实现对属性的访问* 2、限…

接口自动化测试_Python自动化测试学习路线之接口自动化测试「模块四」

01.接口自动化测试概念(接口测试的定义与意义;接口测试的实现方式和接口自动化的实现流程)02.HTTP协议(通信协议原理;HTTP与HTTP协议详解(请求,响应,请求方法,状态码)、session、cookie、token鉴权)03.JSON数据格式(JSON与XML的比较;JSON的语法规则;JSON的数据类型)…

java继承实现

java继承实现 /*** 继承*/ public class Animal { //默认animal集成objectprivate String color;private int age;public Animal(){super();}public Animal(String color,int age){this.color color;this.age age;}public void eat(){System.out.println("吃饭"…

spss多元非线性曲线拟合_快速掌握SPSS数据分析

在和SPSSAU的用户交流中,我们发现本是非常简单的数据分析原理以及软件工具,结果非常多的同学完全不会SPSS数据分析,不知道如何学习,即使学过相关原理,但对具体数据进行分析时也有非常多问题。这不禁让我们思考&#xf…

继承情况下构造方法的调用过程-java

继承情况下构造方法的调用过程-java super关键字:可以看做是直接父类对象的引用。每个子类对象都会有一个super引用 指向其直接父类对象。super可以:1、调用成员变量 super.color 2、调用成员方法 super.show 3、调用构造方法 super&#xff0…

多态--Java

多态--Java 多态指的是同一个方法调用,由于对象不同可能会有不同的行为。编译器类型指的是‘’左边的类型,运行时类型指的是‘’右边的类型。当有继承关系时,可能发生编译器 和运行期类型不同的情况,即编译期类型是父类类型&…

tex文件用什么软件打开_pdf怎么打开?用什么软件打开pdf?

时光荏苒,转眼2020年还有几个月就结束了,我们公司最近举办了"2020年工作季度总结"大会,领导要求每个部门的不同职员要写一份总结,讲述自己这段时间的经验和教训。而我作为办公室文秘,负责收集他们的个人总结…

Java一个小练习----String类型转换int类型

Java一个小练习 把字符串str分割程String数组,然后转换成int数组,排序 String str "123 345 89 93 2 6573 223" 然后在拼接成一个字符串如下: "2 89 93 123 223 345 6573" /*** String str "123 345 89 93 2…

高级语言的编译过程和解释过程_进来了解一下C语言真正的编译过程看你掌握了吗?...

C语言 前言说实话,很多人做了很久的C/C,也用了很多IDE,但是对于可执行程序的底层生成一片茫然,这无疑是一种悲哀,可以想象到大公司面试正好被问到这样的问题,有多悲催不言而喻,这里正由于换工作的缘故&…

final关键字---Java

final关键字---Java final关键字的作用1、修饰变量:被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。2、修饰方法:该方法不可被子类重写,但是可以被重载。3、修饰类:修饰的类不能被继承。注意:1、…

下载java离线文档的方法

第一种使用方法,直接下载 https://stackoverflow.com/questions/6986993/how-to-download-javadoc-to-read-offline 第二种方法,使用zeal软件 zeal简介:https://zealdocs.org/ 个人认为第二种方法好一点

接口-----java

接口就是规范,定义的是一组规则,体现了现实世界中“如果你是...则必须你能....”的思想。 如果你是天使,则必须能飞。如果你是汽车,则必须能跑。接口的本质就是契约,就像我们人间 的法律一样,大家都要遵守。…

如何利用flume进行日志采集

介绍 Apache Flume 是一个分布式、可靠、高可用的日志收集、聚合和传输系统。它常用于将大量日志数据从不同的源(如Web服务器、应用程序、传感器等)收集到中心化的存储或数据处理系统中。 基本概念 Agent(代理): …

接口应用:内部比较器Comparable

接口应用:内部比较器Comparable public interface Comparable {public int compareTo(Object obj); }public class Book implements Comparable{private String bookName;private String author;private String publisher;private double price;Overridepublic int…

axios进行图片上传组件封装

文章目录 前言图片上传接口(axios通信)图片上传使用upload上传头像效果展示总结 前言 node项目使用 axios 库进行简单文件上传的模块封装。 图片上传接口(axios通信) 新建upload.js文件,定义一个函数,该函数接受一个上传路径和一…

JDK1.8的接口新特性

JDK1.8的接口新特性 JDK7及其之前1、接口的变量都是public final static 全局静态常量,无变化。2、接口中都是抽象abstract方法,不能有static方法(因为abstract和static、final、private不能共存)JDK1.8及其之后1、接口中可以添加…

多相机坐标转换_使用KITTI数据集实现坐标转换

本文的主要内容,是讨论如何将KITTI激光雷达的点云数据,映射到图像中去。KITTI数据集是怎么采集的下面这幅图是车的俯视图,可以看到,用到了2个彩色相机,2个灰度相机,1个激光雷达。1个GPS/IMU。图1 KITTI车俯…

内部类-----Java

内部类-----Java 内部类是一类特殊的类,指的是定义在一个类的内部的类,在Java中内部类主要分为非静态内部类、静态内部类、局部 内部类、匿名内部类。 非静态内部类,作为类的成员存在,和成员变量、构造方法、代码块并列。因为是…

api数据加密的定义_API 设计基础规范

首先,请务必记住 API 设计和使用的一个重要法则 Postels Law(又称作稳健性原则):Be liberal in what you accept, be conservative in what you send下面是关于 API 设计的一些基本问题API First将 API 视作产品,并向产品开发一样设计和维护 API在代码实…