如何在 Ubuntu 和 Debian 中创建仅 SFTP 用户

2023-11-17

SFTP(SSH 文件传输协议)是一种安全文件协议,用于通过加密的 SSH 传输会话访问、管理和传输文件。这里的SFTP only user是指创建一个仅通过SFTP访问服务器的帐户。该用户没有 SSH shell 访问权限。这允许您通过安全通道提供对特定文件和目录的有限访问。

这篇博文介绍了如何在 Ubuntu 和 Debian 系统上创建仅使用 SFTP 且没有 shell 访问权限的用户。

第 1 步 - 创建新用户

首先,在系统中创建一个用户帐户以用作 SFTP 用户。以下命令将创建一个名为的新帐户sftpuser没有 shell 访问权限。您可以更改您选择的用户名

sudo adduser --shell /bin/false sftpuser 

该命令将提示您为新帐户设置密码。

第 2 步 – 创建 SFTP 目录

现在,创建可供 SFTP 用户访问的目录结构。

sudo mkdir -p /var/sftp/files 

这里我们将只允许用户访问“files”目录。

现在,更改所有权files目录到sftpuser。这样SFTP用户只能对该目录进行读写。无法访问此目录之外的任何文件。

sudo chown sftpuser:sftpuser /var/sftp/files 

并设置所有者和组所有者/var/sftp扎根。 root 用户对此访问具有读/写访问权限。组成员和其他帐户只有读取和执行权限。

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

它将限制SFTP用户在下面写入文件/var/sftp目录。

步骤 3 – 仅为 SFTP 配置 ssh

/etc/ssh/sshd_config是OpenSSH服务器的主要配置文件。更改此配置文件时要小心,因为任何错误都可能导致连接丢失。

在文本编辑器中编辑 SSH 配置文件:

sudo vim /etc/ssh/sshd_config 

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


Match User sftpuser
	ForceCommand internal-sftp
	PasswordAuthentication yes
	ChrootDirectory /var/sftp
	PermitTunnel no
	AllowAgentForwarding no
	AllowTcpForwarding no
	X11Forwarding no
  

保存文件并关闭。

这些指令是:

  • 匹配用户定义仅应用 SFTP 配置的用户名。在我们的例子中是:sftpuser
  • ForceCommand 内部 sftp强制仅对用户进行 SFTP 访问并限制 shell 访问。
  • 密码验证 是允许用户进行密码验证。
  • Chroot目录 /var/sftp限制用户只能访问该目录下的目录。这里/var/sftp作为用户的根目录。
  • 允许代理转发 否指定是否允许 ssh-agent 转发。默认为是。
  • 允许Tcp转发 否指定是否允许 TCP 转发。默认为是。
  • X11转发号指定允许图形应用程序的地方

重新启动 SSH 服务以应用新设置:

sudo systemctl restart ssh 

就是这样。您已成功完成在基于 Debian 的系统上创建仅限 SFTP 用户的说明。

第 4 步 – 安全提示(选项)

以下是生产环境中 SFTP 帐户的一些基本但重要的安全提示。

  1. 在非标准端口上运行 SSH 服务器
  2. 禁止密码身份验证并配置基于密钥的身份验证
  3. 确保防火墙仅限于特定 IP 地址
  4. 并使 OpenSSH 软件包保持最新

结论

本教程介绍如何在 Ubuntu 系统中创建仅限 SFTP 的用户。它将禁用相同用户的 shell 访问,以仅限于指定的目录。

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

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

  • 如何使用java按上次更新时间对SFTP文件进行排序?

    I am having a set of text files in my FTP server 我想阅读今天之前上传的所有文件 其中我必须打印最后三个上传文件的属性 名称 上传时间 大小 现在我将能够打印 FTP 服务器中存在的文件的名称
  • 如何将 Mercurial 存储库克隆到已存在的目录中?

    我有一个客户的 Django 项目 正在本地开发 使用 Mercurial 进行版本控制 我将本地存储库推送到我的个人远程服务器 我保存所有项目的地方 然后当我部署它时 在任何 Web 服务器上 我从我的个人服务器克隆该存储库 这在大多数服
  • Jenkins Git 参数插件无法获取标签

    詹金斯版本 1 593 Git 参数插件 0 4 0 GIT 客户端插件 1 16 1 我使用私有 git 存储库 可以通过 ssh 访问 我的构建是参数化的 git参数是TAG TO BUILD 要构建的分支是refs tags TAG
  • Visual Studio Code - 一个工作区中的多个远程 SSH 连接?

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

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已要求用户提供他们的公共 id rsa pub ssh 密钥 然后将其放入 home theiraccount ssh authorized key
  • 与 ssh2_connect() 断开连接

    我已经使用 ssh2 连接ssh2 connect到服务器 但我没有看到任何方法在联机帮助页中 http php net ssh2 connect我应该如何结束连接 我不太喜欢在断开连接之前等待脚本结束 我可以用吗fclose 这听起来不对
  • 原始 ssh 连接(低级)

    作为一个小型 大型 业余爱好项目 我开始用 C 制作一个 非常原始的 ssh 2 0 客户端 这是为了探索和更好地理解 DH 并帮助加深我对加密的熟悉程度 根据 RFC 4253 我已经开始这样的初始连接 省略不相关的变量预设等 Rando
  • 使用 Jenkins Git 插件中的 SSH 密钥在构建期间运行 Git 命令

    我们在 Jenkins 上的构建作业作为发布构建的一部分运行一些 git 命令 例如 git push 和 git pull 因此需要一种在构建期间从 shell 运行经过身份验证的 git 命令的方法 我们的詹金斯奴隶不持有任何凭证 因为
  • 安全地记住 bash 脚本中的 ssh 凭据[重复]

    这个问题在这里已经有答案了 假设我有一个 bash 脚本 它通过 ssh 在远程计算机上执行命令 Do something here ssh otheruser host command1 Do something else ssh oth
  • 如何使用java与防火墙(路由器)建立ssh连接?

    由于某种原因 我需要连接到防火墙 基于Linux 并使用Java添加一些规则 用google搜索了一段时间后 我发现jsch是我最好的选择 但是当我 用它来执行命令 显示主机名 例如 返回错误 如果我 执行类似命令 ls l and who
  • 无法通过 SSH 连接到 EC2 实例

    因此 我从网上启动了我的实例 下载了密钥对并安装了它 大约一天的时间里一切都运行良好 然后我重新启动了计算机 但我无法再通过 SSH 连接到它 我尝试重新下载密钥对并重新安装它 但我不断收到 权限被拒绝 公钥 错误 这是详细的输出 我也尝试
  • 向 FTP 服务器执行跨域 XMLHTTPREQUEST 的语法是什么?

    我有一个 webDav CORS 插件 可以使用它在 webDav 服务器上 POST PUT GET REMOVE ALLDOCS 文件 我现在想对 FTP 做同样的事情 但我正在努力获取xmlhttprequest 工作语法 我只是收到
  • 使用 Python 了解何时已从 FTP 源完全接收文件

    我正在使用 Python 开发一个执行以下操作的应用程序 监视特定目录并监视文件 转移到它 文件完成传输后 运行一些 文件上的外部程序 我开发这个应用程序的主要问题是知道文件何时完成传输 据我所知 该文件将通过 SFTP 传输到特定目录 P
  • 当没有文件可供下载时,如何避免 SSIS FTP 任务失败?

    我正在使用 SQL Server 2005 并在 SSIS 中创建 ftp 任务 有时会有文件需要通过 ftp 传输 有时则不会 如果没有文件 我不希望任务或包失败 我已将从 ftp 任务到下一个任务的箭头更改为 完成 以便包运行 我已将允
  • 设置Paramiko模块的sftp.get()时间限制

    我正在使用 Paramiko 的 SFTP 客户端将文件从远程服务器下载到客户端 即获取操作 要传输的文件有点大 1GB 所以我希望如果时间超过10秒 get操作就会超时 但是设置连接的超时值不起作用 它似乎只是创建 SSH 连接的超时 而
  • 将密钥对添加到现有 EC2 实例

    我被给予AWS控制台访问正在运行 2 个实例的帐户 但我无法关闭 在生产中 但是 我想获得对这些实例的 SSH 访问权限 是否可以创建一个新的密钥对并将其应用到实例 以便我可以通过 SSH 访问 获取现有的pem当前无法选择创建实例所用的密
  • 是否可以使用流上下文在 PHP 下使用 FTPS?

    我了解到使用ftpsPHP for Windows 下的 ftp ssl connect 很困难 您被要求进入构建自己的二进制文件以包括 Open SSL 的漫长旅程 我找到了以下建议phpseclib http phpseclib sou
  • SSH 无法对 [email protected] 进行身份验证

    最近 我在 Github com 上注册了一个免费计划 我按照他们的说明生成 ssh 密钥以添加到我的帐户 然而 当我尝试ssh v email protected cdn cgi l email protection 我收到此错误 deb
  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • ssh远程变量赋值?

    以下内容对我不起作用 ssh email protected cdn cgi l email protection k 5 echo k 它只是返回一个空行 如何在远程会话 ssh 上分配变量 Note 我的问题是not关于如何将本地变量传

随机推荐

  • Mac5款高效实用软件,值得推荐

    目录 1 MarginNote 3 阅读批注学习笔记软件 2 iShot Mac截图 长截图 带壳截图 贴图 标注 取色 录屏 录音 OCR 翻译 合集工具 3 KeyCastr 实时显示按下的按键 4 MindNode 超美观的思维导图
  • odoo 12 : 权限安全(security)

    Odoo 中使用安全组来实现 权限授予组 组中分配用户 Odoo 应用通常有两个组 针对普通用户的用户组 包含额外应用配置权限的管理员组 1 安全组 group security 模型名 security xml security ir m
  • tensorflow中model.fit()用法

    tensorflow中model fit 用法 model fit 方法用于执行训练过程 model fit 训练集的输入特征 训练集的标签 batch size 每一个batch的大小 epochs 迭代次数 validation dat
  • layui switch 设置默认开关属性

    给元素定义ID switch order var flag true if flag document getElementById switch order setAttribute checked on else document ge
  • 最近超火的ChatGPT到底怎么样?体验完后我有哪些感受和思考?

    本文主题 ChatGPT 人工智能 官方网站 chat openai com 文章目录 前言 二 初识 三 深入 四 编程相关 编写 纠错 五 感想 六 展望 七 结语 前言 大家好 这次我们来聊一聊最近超级火的人工智能语音 ChatGPT
  • 针式打印机无电脑测试软件,针式打印机断针测试软件合集

    这是针式打印机断针测试软件合集 是一款适用于24针针式打印机的断针测试软件 针式打印机最大的弊端是有出现断针的可能性 会导致票据缺点少横 很容易出现误差 您可以使用该软件测试您的打印机是否存在断针以及是哪一个针断了 为您解决打印机的故障提供
  • 微信小程序实现左侧滑动导航栏

    微信小程序实现左侧滑动导航栏 1 左侧滑动导航栏图如下 2 这是我们左侧滚动栏的代码 wxml
  • 论文笔记:Deep Learning for Anomaly Detection inTime-Series Data: Review, Analysis,and Guidelines

    2021 的paper 1 时间序列数据异常的定义 离群值 outlier 与其他观察结果偏差过大 以至于怀疑它是由不同机制产生的 时间序列的异常值 某一个 些时间片的数值值 展现出与先前时间步长显着不同的意外行为 根据之前的文献 作者将时
  • 为 crontab 作业设置环境变量

    Crontab 是 Unix 和类 Unix 操作系统中的一个功能强大的实用程序 用于安排命令在固定时间 日期或间隔定期运行 这个强大的工具与环境变量相结合 可以为自动化和管理任务提供更强大的解决方案 但是什么是环境变量 如何在 Cront
  • MB、Mb 和 MiB(数字单位)之间的区别

    在当今的数字世界中 理解和区分各种数字单元的需求变得越来越重要 MB Mb 和 MiB 等单位经常用于表示文件大小 存储容量和数据传输速率 然而 围绕这些术语的混淆常常会导致误解和错误 本文旨在提供全面的指南 帮助您理解这些数字单位 它们的
  • 如何在 CentOS/RHEL 7/6 上使用 PHP/FastCGI 设置 Apache

    FastCGI功能与 CGI 的工作非常相似 FastCGI 与 CGI 相比 在一些地方存在差异 例如 FastCGI 进程是持久的 并且每个进程可以处理多个请求 FastCGI 允许通过在单个全双工连接上复用环境信息 标准输入 输出和错
  • 使用 PHP/JQuery 提交表单而不刷新页面

    在广阔的 Web 开发领域中 创建用户友好的体验至关重要 增强用户体验 UX 的一种方法是简化表单提交流程 传统的表单提交需要刷新页面来处理数据 这对于用户来说可能是令人沮丧且耗时的 使用 PHP 和 jQuery 可以克服这个问题并无需刷
  • 如何清除 Docker 容器的日志文件

    本教程将帮助您清除 Docker 容器上的日志文件 如果您的系统磁盘空间不足 并且您发现 docker 容器的日志文件占用了大量磁盘空间 您可以在本教程的帮助下找到日志文件位置并清除它们 清除 docker 容器的日志文件时 不需要停止它
  • 如何使用 DNF 将 Fedora 25 升级到 Fedora 26

    软呢帽26Fedora 的最新版本发布于2017 年 7 月 11 日 Fedora 工作站用户可能需要升级工作站才能使用最新版本 本教程将帮助您将 Fedora 25 升级到 Fedora 26 工作站使用命令行实用程序 DNF 这是升级
  • 如何通过示例将 Nginx 配置为负载均衡器

    Nginx 是一种流行的开源 Web 服务器软件 也可以用作负载均衡器 负载平衡是一种在多个服务器之间分配传入流量的技术 以提高性能 提高可用性并避免任何单个服务器过载 在本文中 我们将通过示例讨论如何将 Nginx 配置为负载均衡器 要将
  • 在 Bash 中计算除法和余数

    Bash 是一种功能强大的命令行界面和脚本语言 提供广泛的数学运算 包括除法和余数 除法和余数是各种编程和数学应用中使用的基本运算 本文将讨论如何在 Bash 中执行除法和求余运算及其用法 在 Bash 中计算除法 除法是一种数学运算 涉及
  • 如何在 Ubuntu 20.04 中使用 PHP 安装 ionCube

    ionCube 加载器是用于在服务器上加载 ionCube 编码文件的库 需要安装在网络服务器上才能在运行之前解码任何 ionCube 编码文件 ionCube 提供了加密 PHP 脚本的功能 以确保它们的安全 它还可以确保它们免受未经授权
  • 如何在 CentOS/RHEL 7/6 和 Fedora 27/26 上安装 NGINX Web 服务器

    NGINX Engine X is an powerful web server Its getting popular very fast due to its fast speed NGINX is also used as a rev
  • 如何在 CentOS、RHEL 和 Fedora 上安装 XCache for PHP

    XCache是一个快速 稳定的 PHP 操作码缓存器 这个相对较新的操作码缓存软件是由 mOo 开发的 XCache 优化性能 将 PHP 脚本的编译状态缓存到 RAM 中 并直接使用 RAM 中的编译版本 这可能会使 php 执行速度比默
  • 如何在 Ubuntu 和 Debian 中创建仅 SFTP 用户

    SFTP SSH 文件传输协议 是一种安全文件协议 用于通过加密的 SSH 传输会话访问 管理和传输文件 这里的SFTP only user是指创建一个仅通过SFTP访问服务器的帐户 该用户没有 SSH shell 访问权限 这允许您通过安