跳转至主要内容
晴雨技术笔记

SFTP Chroot 配置

杏川铭心 杏川铭心
发表于 2025年5月16日
  • 本文最后编辑于 431 天前,部分信息可能已严重过时,请注意甄别。
  • 有时在 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 针对个人免费挺久了,而且也早就不限制标签页数量了。还是挺良心的。

    • 特别提醒:

      评论看到就会回,但是不保证速度,有的时候站长忘记看的话就会出现审核好几天也没有动静的情况……

      有垃圾评论检查,如果评论之后直接消失、没反应说明被识别为垃圾评论了。

      如果等不及的话,可以加群!

    杏川铭心
    杏川铭心

    群号:1101838302,欢迎友好交流 :P 曾用名Frank419(现在也是我在很多地方的用户名),网站站长。

    分类:
    标签:

    发表回复

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