在 Debian 服务器上设置 chroot sftp

在 Debian 服务器上设置 chroot sftp

我正在尝试允许用户“user”通过 sftp 或 ssh 访问我的服务器。我想用 chroot 将他们关进一个目录中。我读了说明这里但是它不起作用。我做了以下事情:

  1. 用户添加用户
  2. 修改 /etc/ssh/sshd_config 并添加

    Match User user

    ForceCommand internal-sftp

    ChrootDirectory /home/duke/aa/smart 到文件底部

  3. 将子系统线路更改为Subsystem sftp internal-sftp

  4. 重新启动 sshd/etc/init.d/ssh restart

  5. 使用 PuTTY 以用户“user”身份通过 ssh 登录

Putty 显示“服务器意外关闭了连接”。

为什么会出现这种情况?如何解决?

编辑

根据以下建议,我把 sshd_config 的底部修改如下:

Match User user
   ChrootDirectory /tmp

还没有变化。我确实输入了密码,但我无法通过 ssh 或 sftp 连接。怎么回事?

答案1

您设置为 chroot 的目录必须由 root 拥有并具有 755 权限。

这是我用于设置的内容

Match user sftpuser
 ChrootDirectory /home/sftpuser
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

在家

drwxr-xr-x   5 root    users 4096 Jan 29 10:31 sftpuser

在/home/sftpuser

drwx------ 2 sftpuser users 4096 Jan 29 10:52 sftpuser

这将他们 chroot 到 /home/sftpuser 目录,但由于他们没有权限写入该目录,因此我为他们创建了第二个 sftpuser 目录以供写入。

答案2

我认为问题出在ChrootDirectory /home/duke/aa/smart。问题与权限有关。我认为您尝试登录到框的用户没有可执行权限。您可以尝试将其更改为某个目录,例如/tmp每个用户都有完全权限的目录。

答案3

检查 /var/log/auth.log 中是否存在 ssh 错误。

这可能是权限错误。chroot 目录必须由

仅供参考,我的工作配置如下所示(我更喜欢使用组访问而不是用户访问):

Subsystem       sftp    internal-sftp

AllowGroups sshusers sftponly

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

答案4

SSHD 对 chroot 权限非常严格;我找到了一个适合我的解决方案这里. 本质上,ChrootDirectory及其所有父目录需要由 root 拥有并具有 755 权限。您可以使用命令获取权限namei -l /path/to/chrootdirectory。在我的情况下,/tmp具有 777 权限,因此尝试连接时出现client_loop: send disconnect: Broken pipe错误。我将 chroot 移动到/opt/chrootjail并开始工作。

相关内容