跳转至主要内容

晴雨技术笔记

SFTP Chroot 配置

杏川铭心 杏川铭心
发表于 2025年5月16日

有时在 Linux 系统上,我们可能会希望设立一个单独的账户用来管理某一部分文件,比如单个网站中的文件等,同时又不希望该账户可以访问到系统中的其他部分。其实 SFTP Chroot 就可以很好的实现这一功能,特别适合于不需要提供完整 Shell 的情况。进行这样的独立配置也可以很好的提高服务器的安全性。

配置 SFTP Chroot 用户

主流的方法是创建一个用户组,然后对该用户组进行 SFTP Chroot 的操作,便于后续管理。

groupadd sftponly

然后创建用户,并把用户添加到该组:

adduser user1 -g sftponly -m -s /sbin/nologin
passwd user1

本文拿 user1 这个很沉闷的用户名举例,请根据实际情况修改。上述命令可以同时创建用户并分配组,也可以先创建用户,后用 usermod 来修改组。注意 -s /sbin/nologin,这个参数指定了用户不能够通过 SSH 来登录传统的 Shell。

接着修改 OpenSSH 的配置文件:

vim /etc/ssh/sshd_config

输入以下内容:

Subsystem sftp internal-sftp
    Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

最后重启 SSH 服务:

systemctl restart sshd

修改目录权限

上面的操作做完之后,OpenSSH 就会开始尝试将用户限制到其家目录中。

不过这时候直接登录是会报错的,原因是被 SFTP Chroot 的用户的 Chroot 目录的属主必须是 root,而默认情况下,家目录的属主是对应用户。

所以需要修改目录属主:

chown root:root ~user1

修改完之后,用户就不能在家目录中修改任何内容了,所以我们还需要创建一个目录供用户上传文件。也正是因为这个原因,建议把 Chroot 到的目录设置为希望该用户能够操作的目录的上一级。

mkdir ~user1/incoming/
chown user1:sftponly ~user1/incoming/

最后检查效果,先尝试用 Xshell 登录一下:

 

 

可以看到传统的 Shell 无法登录,提示此服务仅允许 SFTP 连接(This service allows sftp connections only)。

改用 Xftp 用 SFTP 登录:

 

SFTP 顺利登陆

可以看到顺利登陆。还可以看到显示出的路径是 “/”,也就是 Chroot 正常生效。

至此 SFTP Chroot 就配置好了,配置起来还是比较简单的,不需要像受限 Shell 那样弄一大堆乱七八糟的东西,而且也确实能够实现一定的安全性。

说句题外话,Xshell 和 Xftp 针对个人免费挺久了,而且也早就不限制标签页数量了。还是挺良心的。

杏川铭心
杏川铭心

名字越改越尬,但是网站一点没动🤪 曾用名Frank419(现在也是我在很多地方的用户名),网站站长。

分类:
标签:

上一篇文章

Windows Server Core 2022 安装 (二) 

下一篇文章

无更新文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注