Linux 利用 SSH 自带配置实现 SFTP Chroot Jail

2022-08-06 16:06:43 浏览数 (1)

如果你是一个管理 Linux 服务器的系统管理员,你可能需要授予一些用户 SFTP 访问权限来上传文件到他们的主目录,同时希望他们仅可以在特定空间内活动。SSH 的 Subsystem 可以完成相关需求,本文记录实现方法。

简介

在本教程中,我们将解释如何设置 SFTP Chroot Jail 环境,该环境将限制用户使用自己的主目录。用户将只有 SFTP 访问,SSH 访问将被禁用。这些说明适用于任何现代的 Linux 发行版,包括 Ubuntu、 CentOS、 Debian 和 Fedora。

用户、组配置

创建专用的 SFTP 组
  • 创建一个组sftponly,用于管理需要被 chroot 的用户,之后需要新增类似用户是可以直接放入组内
代码语言:javascript复制
sudo groupadd sftponly

组名称可以自定义

向 SFTP 组内添加用户
创建新用户
代码语言:javascript复制
sudo useradd -g sftponly -s /bin/false -m -d /home/username username

用户名称可以自定义

  • 选项含义

选项

含义

-g sftponly

将用户添加到 sftponly 组内

-s /bin/false

设置用户的登录 shell,通过设置shell指向 /bin/false ,用户将无法通过 SSH 登录

-m -d /home/username

创建用户的 Home 目录

  • 为新用户设置密码
代码语言:javascript复制
sudo passwd username

已经存在的用户

如果需要将已经存在的用户设置为SFTP only,可以将现有用户添加到SFTP组,并禁用他的shell

代码语言:javascript复制
sudo usermod -G sftponly -s /bin/false username2
设置用户家目录权限
  • 被限制 SFTP only 的用户家目录的所有者必须是 root
  • 该步骤十分重要,是配置成功的前提条件之一
代码语言:javascript复制
sudo chown root: /home/username
sudo chmod 755 /home/username
创建用户活动空间

按照上述设置后,用户无法在家目录中修改数据,如果需要为该用户配置他可以灵活操作的空间,那么可以为他创建专属的目录

  • 为用户创建属于他的目录,以 test 目录为例
代码语言:javascript复制
sudo mkdir /home/username/test
sudo chmod 755 /home/username/test
sudo chown username:sftponly /home/username/test

SSH 配置

  • SFTP是SSH的一个子系统,支持所有的SSH认证机制。
  • 使用文本编辑器打开 /etc/ssh/sshd_config 文件
代码语言:javascript复制
sudo vim /etc/ssh/sshd_config
  • 找到 Subsystem sftp 开头的行,取消该行的注释并修改为
代码语言:javascript复制
Subsystem sftp internal-sftp

  • 在配置文件结尾加入
代码语言:javascript复制
Match Group sftponly
  ChrootDirectory %h
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

  • UsePAM 选项可能导致 SSH 服务在此种情况下无法重启,如果出现这种错误可以禁用 UsePAM,将 UsePAM 行注释掉
代码语言:javascript复制
# UsePAM yes
重启SSH
代码语言:javascript复制
#debian
sudo systemctl restart ssh
# CentOS
sudo systemctl restart sshd
  • 如果systemctl有问题可以使用 init.d
代码语言:javascript复制
/etc/init.d/ssh restart

测试

SSH 禁用测试
  • 使用 SSH 登录系统
代码语言:javascript复制
$ ssh username@192.168.10.12:3721

Connecting to 192.168.10.12:3721...
Connection established.
To escape to local shell, press 'Ctrl Alt ]'.

WARNING! The remote SSH server rejected X11 forwarding request.
This service allows sftp connections only.

Connection closed.

Disconnected from remote host(192.168.10.12:3721) at 11:05:08.

Type `help' to learn how to use Xshell prompt.
  • 会提示: This service allows sftp connections only. 并直接被登出。
sftp 测试
  • sftp 登录
代码语言:javascript复制
sftp username@192.168.10.12:3721


Connecting to 192.168.10.12:3721...
Connection established.
To escape to local shell, press 'Ctrl Alt ]'.

Your current local directory is
C:UsersAdministratorDocumentsNetSarang Computer7XshellSessions

Type `help' to browse available commnands.
sftp:/> 

  • 可以查看数据,可以在给定权限的文件夹中进行操作,但无法跳出当前目录

参考资料

  • How to Set Up SFTP Chroot Jail

0 人点赞