Ubuntu Server 22.04 SSH ChrootDirectory 通过 SFTP 访问时行为不符合预期

Ubuntu Server 22.04 SSH ChrootDirectory 通过 SFTP 访问时行为不符合预期

通常,在成功登录sftp并执行put命令后,我希望我的文件传输到登录用户的$HOME目录中。这是开箱即用的,但我想将用户限制sftp在他们的目录中(例如,$HOME这样他们就无法再向上一级)。cd

这是我ChrootDirectory按照文档使用的地方(https://linux.die.net/man/5/sshd_config

ChrootDirectory:指定身份验证后 chroot(2) 的路径。此路径及其所有组件必须是 root 拥有的目录,任何其他用户或组都无法写入

我认为我已经正确设置了文件夹/权限。我认为文档中的下一句话没有按预期工作或表现。

chroot 之后,sshd(8) 将工作目录更改为用户的主目录。

修改sshd_config为使用ChrootDirectory并成功通过用户访问服务器后sftp,工作目录并未设置为用户的 $HOME 目录,而是实际上设置为上一级。(例如,/home而不是/home/userTest)对用户来说,明显的解决方法是使用 cd 进入下一级的正确目录,但如果您使用某些自动化系统只是将数据通过 FTP 传输到当前工作目录,这可能会非常成问题。

我将首先展示一般情况,然后对其进行修改,以展示ChrootDirectory引入默认工作目录行为后的行为如何变化sshd_config

这按预期工作:

  1. 创建用户(用于-m创建此用户的主目录):sudo useradd -m userTest
  2. 给用户一个密码:sudo passwd userTest
  3. 注意userTest$HOME目录: cat /etc/passwd->userTest:x:1002:1004::/home/userTest:/bin/sh
  4. 为您刚刚创建的用户通过 sftp 连接到您的服务器:sftp userTest@<your-server>
  5. 注意登录成功后的工作目录:pwd->Remote working directory: /home/userTest

上面的例子完全按照预期工作,唯一的问题是userTest没有锁定到工作目录并且可以cd ..重置文件系统。

几本指南都对这个问题给出了相同的基本解决方案(https://linuxconfig.org/how-to-setup-sftp-server-on-ubuntu-20-04-focal-fossa-linux

添加前面的步骤

  1. 添加一个 sftp 组(这将用作我们的Match块的密钥sshd_config):sudo addgroup sftp
  2. 添加userTest用户到组:sudo usermod -a -G sftp userTest
  3. 编辑sshd_configsudo nano /etc/ssh/sshd_config
  4. 将以下几行添加到文件末尾
Match group sftp
ChrootDirectory /home
ForceCommand internal-sftp

(这基本上意味着属于该sftp组的任何用户都将受到ChrootDirectoryForceCommand规则的约束)

保存文件并重新启动 ssh: sudo systemctl restart ssh

验证指定的目录是否ChrootDirectory满足上述文档的要求: ls -ltr-> drwxr-xr-x 4 root root 4096 Jun 10 09:02 home(我相信这通过了)

再次比较开箱即用设置的结果和使用我们的新配置 sftp 的结果userTestsftp userTest@<your-server>

注意当前工作目录:pwd->Remote working directory: /

这并不是说有什么问题,我们预计工作目录会发生变化……但是让我们快速检查一下当前工作目录的内容:

ls -ltr-> drwxr-x--- 3 1002 1004 4096 Jun 10 09:10 userTest(!!!)

根据文档:

chroot 之后,sshd(8) 将工作目录更改为用户的主目录。

ls -ltr显示工作目录不在userTest主目录中,它实际上位于上一级。

有没有办法配置ChrootDirectory或其他方法使其按预期工作?

注意:ForceCommand从 sshd_config 中删除实际上会导致这个 11 年前作为勘误表关闭的其他问题? https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=681202

相关内容