如果你是一个管理 Linux 服务器的系统管理员,你可能需要授予一些用户 SFTP 访问权限来上传文件到他们的主目录,同时希望他们仅可以在特定空间内活动。SSH 的 Subsystem 可以完成相关需求,本文记录实现方法。
简介 {#简介}
在本教程中,我们将解释如何设置 SFTP Chroot Jail 环境,该环境将限制用户使用自己的主目录。用户将只有 SFTP 访问,SSH 访问将被禁用。这些说明适用于任何现代的 Linux 发行版,包括 Ubuntu、 CentOS、 Debian 和 Fedora。
用户、组配置 {#用户、组配置}
创建专用的 SFTP 组 {#创建专用的-SFTP-组}
- 创建一个组
sftponly
,用于管理需要被 chroot 的用户,之后需要新增类似用户是可以直接放入组内
组名称可以自定义
向 SFTP 组内添加用户 {#向-SFTP-组内添加用户}
创建新用户 {#创建新用户}
用户名称可以自定义
- 选项含义
| 选项 | 含义 |
|----------------------|--------------------------------------------------------|
| -g sftponly | 将用户添加到 sftponly
组内 |
| -s /bin/false | 设置用户的登录 shell,通过设置shell指向 /bin/false
,用户将无法通过 SSH 登录 |
| -m -d /home/username | 创建用户的 Home 目录 |
- 为新用户设置密码
已经存在的用户 {#已经存在的用户}
如果需要将已经存在的用户设置为SFTP only,可以将现有用户添加到SFTP组,并禁用他的shell
设置用户家目录权限 {#设置用户家目录权限}
- 被限制 SFTP only 的用户家目录的所有者必须是 root
- 该步骤十分重要,是配置成功的前提条件之一
创建用户活动空间 {#创建用户活动空间}
按照上述设置后,用户无法在家目录中修改数据,如果需要为该用户配置他可以灵活操作的空间,那么可以为他创建专属的目录
- 为用户创建属于他的目录,以
test
目录为例
SSH 配置 {#SSH-配置}
- SFTP是SSH的一个子系统,支持所有的SSH认证机制。
- 使用文本编辑器打开
/etc/ssh/sshd_config
文件
-
找到
Subsystem sftp
开头的行,取消该行的注释并修改为 -
在配置文件结尾加入
- UsePAM 选项可能导致 SSH 服务在此种情况下无法重启,如果出现这种错误可以禁用 UsePAM,将
UsePAM
行注释掉
重启SSH {#重启SSH}
- 如果systemctl有问题可以使用
init.d
测试 {#测试}
SSH 禁用测试 {#SSH-禁用测试}
- 使用 SSH 登录系统
- 会提示:
This service allows sftp connections only.
并直接被登出。
sftp 测试 {#sftp-测试}
- sftp 登录
- 可以查看数据,可以在给定权限的文件夹中进行操作,但无法跳出当前目录
参考资料 {#参考资料}
文章链接:
https://www.zywvvd.com/notes/system/linux/sftp-jail/sftp-jail/