为什么我的新 SFTP 用户不能在不同的目录下工作?

为什么我的新 SFTP 用户不能在不同的目录下工作?

我正在尝试为我的服务器创建一个新的 SFTP 帐户。当我按照以下说明操作时确切地,则一切正常:https://www.thegeekstuff.com/2012/03/chroot-sftp-setup/

我可以guestuser通过 与用户建立联系,浏览我的主目录,然后从进入sftp上一级。incoming/sftp/guestuser

我甚至可以将ChrootDirectory中的值/etc/ssh/sshd_config具体更改为/sftp/guestuser,而不是实现%u参数。因此,硬编码的目录名称可以正常工作。

ChrootDirectory但从那时起,如果我所做的只是将我的组的更改sftpusers为我实际网站在的目录/var/www/www.example.com,那么我将无法sftp再通过该用户的命令进行连接。 shell 输出:

远程主机关闭了与 www.example.com 的连接。无法读取数据包:对端重置了连接

我当然这么做了:

  1. 确保我的目录incoming中有该文件夹/var/www/www.example.com
  2. /var/www/www.example.com将和的所有权设置/var/www/www.example.com/incomingguestuser:sftpusers
  3. /尝试通过执行以下操作将用户的主目录设置为usermod guestuser -d /

/sftp/guestuser目录(它工作的目录)归所有root:root,因此的权限/var/www是否开启root:root并不重要(?)

为什么我无法更改新 SFTP 用户的主目录?

更新

我可以将目录更改为:

  • /sftp
  • /
  • /var
  • /var/www

这些都有效。但是一旦再进入/var/www,例如/var/www/test,它就不起作用了。我尝试从原始目录名称中删除点www.example.com,但没有什么效果。

这也不是关于子目录层数的限制,因为/sftp/guestuser/incoming这样也可以。使用新目录进行测试则/web/www.example.com不行。

答案1

好的,我终于找到原因了。我为ChrootDirectory用户定义的目录必须归所有root

如果我希望我的用户能够上传东西(这显然他无法在根拥有的目录中做到这一点),那么我需要在其中创建一个子目录,并在-d创建或编辑用户时通过参数将该目录设置为他的主目录。

如果所有权在任何时候发生变化,使得ChrootDirectory归属于尝试通过 ftp 进入的用户,则该broken pipe消息将再次出现。将所有权更改回root,用户即可再次连接。

相关内容