如何在 Debian 11 中创建仅 SFTP 用户

2023-10-19

SFTP(SSH 文件传输协议)是一种安全文件协议,用于通过加密的 SSH 传输会话访问、管理和传输文件。安全第一是系统管理员的经验法则。在某些情况下,我们需要允许远程用户访问我们系统上的文件系统,但您不想允许他们获得 shell。这将为您提供一个安全通道来提供对特定文件和目录的有限访问。

本教程将帮助您在 Debian 11 系统上设置仅 SFTP 访问(无 shell 访问)。它将在您的系统上创建一个 chroot 环境,以将 SFTP 用户限制为只能访问特定目录。此外,它仅允许用户进行 SFTP 访问,而不允许 SSH 访问。

先决条件

  • 正在运行的 Debian 11 Bullseye Linux 系统
  • 您必须拥有具有 shell 访问权限的 sudo 特权帐户

第 1 步 – 创建新用户

首先,创建一个新用户来连接 sftp 服务器。以下命令将创建一个名为的新帐户sftpuser没有 shell 访问权限。您可以使用您选择或要求的任何名称。

sudo adduser --shell /bin/false sftpuser 

步骤 2 – 创建用于 SFTP 访问的目录

您已经为 sftp 创建了一个用户。现在,创建一个目录以配置为 sftp 的 chroot。对于这个例子,我将创建一个/var/sftp 目录。该目录必须具有 root 所有权才能配置为 chroot 目录。因此,我们将在 /var/sftp 下创建一个子目录,对 sftp 帐户具有写权限。

使用以下命令创建目录结构:

sudo mkdir -p /var/sftp/files 

接下来,我们必须对目录设置适当的权限,以配置为具有写入权限的 chroot 访问权限。这里 /var/sftp 必须具有 root 所有权和具有适当权限的组。要设置该权限,请键入:

sudo chown root:root /var/sftp 
sudo chmod 755 /var/sftp 

现在,更改权限"files"目录以允许对 sftpuser 进行写访问。要设置该权限,请键入:

sudo chown sftpuser:sftpuser /var/sftp/files 

一旦 sftpuser 连接到服务器,就会将 /var/sftp 作为根目录。他无法访问其外部的文件系统。此外,用户只能读取/写入“files”目录下的文件。

步骤 3 – 仅为 SFTP 配置 ssh

接下来,您需要配置 SSH 服务器以允许“sftpuser”仅通过 sFTP 连接服务器,而无需 shell 访问。要进行必要的更改,请编辑 SSH 配置文件。

sudo nano /etc/ssh/sshd_config 

并在文件末尾添加以下设置。


Match User sftpuser
	ForceCommand internal-sftp
	PasswordAuthentication yes
	ChrootDirectory /var/sftp
	PermitTunnel no
	AllowAgentForwarding no
	AllowTcpForwarding no
	X11Forwarding no
  
Chroot Settings for SFTP User
Chroot Configuration for SFTP User

仔细检查所有设置是否正确。然后保存更改并重新启动 SSH 服务以应用更改。

sudo systemctl restart ssh 

全部完成后,您的 Debian 系统上就成功创建了仅使用 SFTP 的功能。现在尝试使用新用户的凭据登录远程系统,并检查一切是否正常工作。

第 4 步 – 连接到 SFTP

可以使用命令行或 Filezilla 或 WinSCP 等图形应用程序连接到远程 SFTP 服务器。在本教程中,我将向您展示连接 SFTP 服务器的两种方法。

Linux 用户可以使用 sftp 命令行实用程序连接到远程 sftp 实例。

sftp sftpuser@sftp.tecadmin.net 

sftpuser@sftp.tecadmin.net's password:
sftp>

GUI界面或Windows用户可以使用图形化的sftp客户端。例如,使用 Filezilla 客户端连接远程系统上的仅远程 sftp 帐户。

验证没有 shell 访问权限:

由于此帐户配置为仅 SFTP 连接。因此,如果任何用户尝试通过 SSH 连接,身份验证成功后将立即断开连接。用户将收到以下消息:

ssh sftpuser@sftp.tecadmin.net 

sftpuser@sftp.tecadmin.net's password:
This service allows sftp connections only.
Connection to sftp.tecadmin.net closed.

结论

在本操作指南中,您学习了如何为 SFTP 用户创建 chroot 监狱环境,而无需对服务器进行 shell 访问。 Chroot 环境通过阻止用户访问定义目录之外的文件来保护文件系统。本教程是使用 Debian 11 Bullseye 系统创建和测试的,但这也适用于其他 Debian 版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Debian 11 中创建仅 SFTP 用户 的相关文章

  • 在sudoers中分别设置环境变量SSH_ASKPASS或askpass

    我正在尝试登录 ssh 服务器并执行以下操作 ssh email protected cdn cgi l email protection sudo echo foobar 不幸的是我收到一个错误 sudo no tty present a
  • 无法使用 SSH 连接到 docker 容器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • 如何使用 OpenShift 为裸域添加别名?

    如何使我的裸域指向我的 Openshift 应用程序 可以在 Openshift 在线仪表板中完成还是只能通过rhc公用事业 但是我不确定要执行哪些步骤 这是一个两步过程 首先 确保您有一个提供裸机支持的 DNS 提供商CNAMES 然后添
  • 是否可以在远程 ssh 命令中使用变量?

    我想在远程计算机上按顺序执行多个命令 并且后面的一些命令依赖于前面的命令 在最简单的例子中 我得到了这个 ssh my server echo this is my server abc 2 this is my server abc 2
  • JetBrains(IntelliJ、PhpStorm、WebStorm ...)带有 SSH 密钥的私有 git 存储库

    我的新 Web 服务器需要使用 RSA 2048 密钥进行身份验证 因此我生成了一个密钥 我将ir rsa and id rsa pub我的主文件夹中的文件 ssh Windows 10 但是当我使用 cvs 注释 用于拉或推 时 我收到错
  • 使用 Java 通过 SSH 连接到 MySQL

    我想使用 Java 连接到 Amazon EC2 服务器上的 MySQL 数据库 我可以使用 Jsch 库创建 ssh 隧道并将端口转发到该服务器 但是连接到数据库总是以异常结束 java io EOFException 无法从服务器读取响
  • 使用 SSH 从 BitBucket pip 安装自定义包,无需在 Docker 构建期间输入 SSH 密码

    我正在尝试 pip 安装 通过conda env create命令 来自 BitBucket 的自定义 python 包docker build命令 无需输入 SSH 密码 密码 这个问题类似于这另一个问题 https stackoverf
  • 直接通过 SSH 进入 docker 容器

    我有一些 docker 容器 现在我想通过 ssh 访问其中一个 这是工作我通过 ssh 连接到 docker 容器 但现在我遇到的问题是我不知道哪个用户可以访问这个容器 我已经对主机上的两个用户 网络和根 进行了尝试 但它们不起作用 知道
  • 如何使用 SSH 密钥和 Pageant 通过 Paramiko 连接到 SFTP

    我正在尝试使用受密码保护的 SSH 密钥通过 Paramiko 连接到 SFTP 我已将密钥加载到 Pageant 中 据我所知 Paramiko 支持该密钥 但我无法用它来解密我的私钥 我找到了这个例子here https stackov
  • 使用 bash 通过 ssh 启动进程,然后在 sigint 上终止它

    我想使用 ssh 在不同的机器上启动几个作业 如果用户随后中断主脚本 我想优雅地关闭所有作业 这是我正在尝试做的事情的一个简短示例 bin bash trap aborted SIGINT SIGTERM aborted kill SIGT
  • 如何使用 bash/expect 检查 SSH 登录是否有效

    我的团队管理着许多服务器 公司政策规定这些服务器上的密码必须每隔几周更改一次 有时 我们的官方密码数据库会因某种原因而过时 人们通常会忘记更新它 但有时我们要到几个月后才能识别这一点 因为我们并不总是使用每台服务器 我想编写一个脚本 从数据
  • 通过 SSH 隧道连接到 gitosis 服务器

    我的 MacBook 上有一个 SSH 隧道设置 就像这样 ssh o ServerAliveInterval 3 N L 22222 gitosis server 22 email protected cdn cgi l email pr
  • 如何在 AWS 上设置无密码 ssh

    如何在 AWS 集群上的节点之间设置无密码 ssh 以下设置无密码身份验证的步骤已针对 Centos 和 Ubuntu 进行了彻底测试 假设 您已经可以访问您的 EC2 机器 可能正在使用 pem 密钥 或者您拥有具有 root 权限的 u
  • 无法通过 SSH 连接到 openshift

    我在通过 SSH 访问 Openshift 时遇到问题 我仍然可以通过 Git 将代码推送到 Openshift 但是 当尝试通过 SSH 连接到 Openshift 时 服务器被拒绝 并显示错误 没有可用的受支持的身份验证方法 服务器发送
  • Paramiko 和伪 tty 分配

    我正在尝试使用 Paramiko 连接到远程主机并执行许多文本文件替换 i o e client exec command perl p i e s initial replaced g conf 其中一些命令需要作为 sudo 运行 这会
  • 尝试通过 SSH 克隆时“似乎不是 git 存储库”

    我有一台运行 Windows 10 的计算机 我想在其上托管 git 存储库 OpenSSH 正在运行 我可以通过 Powershell 通过 SSH 连接到机器 因此它是可连接的 我在该机器上名为 Test 的文件夹中创建了一个新的 gi
  • 当还必须切换用户时使用 JSch 到 SFTP

    我在 Java 客户端中使用 JSch 连接到远程服务器并使用 SFTP 获取一些文件 以下代码对我来说运行良好 JSch ssh new JSch JSch setConfig FileTransferConstants STRICT H
  • 使用 ansible SSH 到远程服务器

    我正在使用 ansible 来自动化一些任务 其中之一要求我ssh到服务器A 然后从A到B 然后从B到C 我似乎找不到任何方法来做到这一点 有什么建议么 鉴于您不使用 Paramiko 进行 ssh transport ssh https
  • 如何为函数启用 bash 自动完成功能?

    我已经阅读了关于 bash 自动完成的教程bash补全简介 http www debian administration org article 316 An introduction to bash completion part 1我正
  • Visual Studio Code - 一个工作区中的多个远程 SSH 连接?

    我最近开始喜欢上 Visual Studio Code 和远程 SSH 扩展 它确实彻底改变了我的工作流程 然而 我发现自己保持多个窗口打开 并通过与不同服务器的不同连接 我刚刚发现您可以将不同的文件夹添加到同一工作区 但是当连接到远程服务

随机推荐

  • 如何在 Debian 10 Linux 上安装 Node.js 和 npm

    Node js 是一个基于 Chrome JavaScript 构建的跨平台 JavaScript 运行时环境 旨在在服务器端执行 JavaScript 代码 使用 Node js 您可以构建可扩展的网络应用程序 npm 是 Node js
  • 如何在 Debian 9 上安装 Java

    在本教程中 我们将逐步介绍在 Debian 9 上安装 Java Java 是用于构建不同类型的应用程序和系统的最流行的编程语言之一 用 Java 开发的应用程序具有可扩展性 灵活性和可维护性 有两种不同的 Java 包 Java 运行时环
  • 如何在 Debian 9 上安装和使用 PHP Composer

    Composer是 PHP 的依赖管理器 类似于Node js 的 npm or Python 的点子 Composer 将提取您的项目所依赖的所有必需的 PHP 包并为您管理它们 本教程提供了在 Debian 9 系统上安装 Compos
  • 如何列出 CentOS 上已安装的软件包

    在本教程中 我们将向您展示如何列出和过滤 CentOS 上已安装的软件包 当您需要在另一台计算机上安装相同的软件包或想要重新安装系统时 了解如何列出 CentOS 系统上已安装的软件包会很有帮助 我们还将向您展示如何检查是否安装了特定的软件
  • 如何检查您的 CentOS 版本

    当您第一次登录 CentOS 计算机时 在进行任何工作之前 您可能需要检查系统上运行的 CentOS 版本 在本教程中 我们将展示几个不同的命令 了解如何检查系统上安装的 CentOS 版本 截至撰写本文时 CentOS Linux 拥有三
  • 如何在 CentOS 8 上添加交换空间

    交换空间是磁盘上的空间 当物理 RAM 内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 通常 在虚拟机上运行 CentOS 时 不存在交换分区 因此唯
  • 配置 Magento 2 在 CentOS 7 上使用 Varnish

    页面速度或加载时间对于在线商店的成功至关重要 加载时间是加载特定页面上的内容所需的总时间 加载时间越长 转化率越低 这也是谷歌考虑确定搜索引擎排名的最重要因素之一 在第一篇文章中 我们在 CentOS 7 机器上安装了 Magento 2
  • 自动启动 wampserver 在 Windows 10 上自动启动

    在向您展示如何自动启动 wampserver 之前 我先简单介绍一下 Wampserver 是 Windows 平台上最好的 Web 开发堆栈之一 与 xampp 相比 我更喜欢它 因为它有方便的托盘菜单 可以让我访问任何配置 您可以从此网
  • 使用 Sed 命令删除行:Linux 文本删除教程

    Using sed命令从文件或流中删除行是常见操作 使用删除行的基本语法sed如下 sed pattern to match d filename Here pattern to match是您要在文件的每一行中匹配的模式 如果一行包含指定
  • 使用 to_sql 将 Python Pandas DataFrame 导出到 SQL

    The to sql函数允许您将存储在 DataFrame 中的记录写入 SQL 数据库 通过使用 SQLAlchemy 可以使用该库支持的任何数据库 在接下来的部分中 我们将更深入地研究此功能并探索更多功能 目录 hide 1 基本语法和
  • Python NumPy arange() 教程

    NumPyarange 函数用于生成给定区间内的值序列 您可以将其视为数字范围生成器 它允许您创建一个 NumPy 数组 其值在指定范围内均匀分布 它提供了更多功能 例如使用浮点数的能力以及显式定义数组中包含的值的间隔的灵活性 在本教程中
  • Python 切片初学者指南

    在本教程中 您将了解切片在 Python 中的工作原理以及如何使用它来操作字符串 列表和元组等序列 我们还将演示 Python 切片对象如何创建可用于对序列进行切片的切片 这些知识将为您提供一个强大的工具来访问序列中的多个项目 以删除多个项
  • Python 中非常规颜色指南

    如果您一直在使用 Python 进行编程 那么您很可能至少遇到过一个提供处理颜色表示和自定义功能的库 From 图像处理从数据可视化到Web应用程序开发 你会发现颜色的使用无处不在 事实上 大多数用于最先进计算机视觉任务的现代深度神经网络都
  • 在 Pandas 中使用 loc 和 MultiIndex DataFrame

    在之前的教程中 我们讨论了locproperty 一种基于标签的数据选择方法 但是您是否知道在使用 loc 处理多级索引时可以优化您的选择 本教程将揭示在 Pandas 中使用 loc 和 MultiIndex DataFrame 的强大功
  • Python图像处理教程(使用OpenCV)

    在本教程中 您将学习如何使用 OpenCV 库在 Python 中处理图像 OpenCV 是一个用于实时图像处理的免费开源库 它用于处理图像 视频甚至直播 但在本教程中 我们将仅将处理图像作为第一步 在开始之前 我们先安装 OpenCV 目
  • 安装和配置 Linux LDAP 服务器

    两天前 一位网站访问者在网站上搜索 LDAP 但没有找到任何结果 这促使我发一篇有关 LDAP 服务器的帖子 因此我们填补了空白 将喜爱的内容带给访问者 目录 hide 1 什么是LDAP 2 LDAP 的用途 3 LDAP 服务器实施
  • Python 海象运算符(Python 3.8 赋值表达式)

    Python 海象运算符 正式名称为赋值表达式运算符 是在 Python 3 8 中引入的 它由冒号后跟等号表示 Python 社区将其称为 海象运算符 因为它类似于海象的一双眼睛和獠牙 目录 hide 1 对海象操作员的需求 2 Walr
  • 15 个用于网络诊断的 Linux ping 命令示例

    感谢 Linux 我们可以使用许多促进网络管理和诊断的工具 从这个意义上说 Linux ping 命令是系统管理员和网络管理员最有用的工具之一 它的基本功能是确定网络中的一台主机是否可达 然而 在这篇文章中 我们将讨论 Linux Ping
  • Matplotlib 教程(使用 pyplot 绘制图形)

    Matplotlib 是 Python 中的一个库 可创建 2D 图形来可视化数据 可视化总是有助于更好地分析数据并增强用户的决策能力 在本 matplotlib 教程中 我们将绘制一些图形并更改一些属性 如字体 标签 范围等 首先 我们将
  • 如何在 Debian 11 中创建仅 SFTP 用户

    SFTP SSH 文件传输协议 是一种安全文件协议 用于通过加密的 SSH 传输会话访问 管理和传输文件 安全第一是系统管理员的经验法则 在某些情况下 我们需要允许远程用户访问我们系统上的文件系统 但您不想允许他们获得 shell 这将为您