
SFTP Chroot 配置

有时在 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 登录:
可以看到顺利登陆。还可以看到显示出的路径是 “/”,也就是 Chroot 正常生效。
至此 SFTP Chroot 就配置好了,配置起来还是比较简单的,不需要像受限 Shell 那样弄一大堆乱七八糟的东西,而且也确实能够实现一定的安全性。
说句题外话,Xshell 和 Xftp 针对个人免费挺久了,而且也早就不限制标签页数量了。还是挺良心的。