FTP 通过 SSH chroot 权限

FTP 通过 SSH chroot 权限

我正在尝试在我的服务器上设置一个上传目录,但这样做非常困难。系统上的所有其他用户都需要可以访问目录中的上传内容,但用于上传的用户帐户应该没有任何访问权限(除了上传之外),因此我将上传用户帐户 chroot 到他们自己的目录中。出于政策考虑,我使用 FTP 而不是 SSH,并且我有以下设置:

上传目录:

 /var/uploads/uploaduser/

(我使用这个是因为 uploaduser 帐户不是普通帐户,不应被视为普通帐户;但是,我非常愿意接受有关如何执行此操作的其他建议。)

权限设置如下:

/var/
drwxr-xr-x  25 root root  4096 Mar 30 10:04 var/

/var/uploads
drwxr-xr-x  3 root root 4096 Mar 23 12:22 uploads/

/var/uploads/uploaduser
drwx---r-x  3 root root 4096 Apr  4 10:14 uploaduser/

现在,当我使用 FileZilla 或任何其他客户端将文件上传到 uploaduser 目录时,我收到“权限被拒绝”错误。但是,如果我更改 uploaduser 目录的所有权或更改其权限,我会收到此错误:

Couldn't read packet: Connection reset by peer

这似乎是一种“做也不是,不做也不是”的情况。

我已进行以下设置/etc/ssh/sshd_config

Match user uploaduser
ChrootDirectory  /var/uploads/destiny/
AllowTcpForwarding no
X11Forwarding no
ForceCommand internal-sftp

我正在使用 VSFTP,它对于所有其他涉及通过 SSH 的 FTP 的应用程序都运行良好。

ETA:我正在使用 Amazon EC2 实例作为我的网络服务器,它正在运行 Amazon Linux AMI。

答案1

我现在也正在学习这一点,并且认为我已经克服了你所遇到的困难。

首先,您的上传目录与您的不匹配ChrootDirectory。我假设这是一个打字错误。

我学到了以下一些知识:

  • 配置 SFTP 时不使用 VSFTP
  • SFTP 是使用 SSH 内置 SFTP(internal-sftp)的 SSH

现在使用ChrootDirectory...

  • 路径必须存在
  • 目录必须有用户和组(root:root)
    • 你做的
    • 因此,SFTP 用户不能在此目录中写入任何内容
  • ChrootDirectory在里面创建另一个目录content(例如)
    • 此目录必须有上传用户(SFTP 用户)作为用户和组(uploaduser:uploaduser)
    • 我认为这是你缺少的部分
  • 您可能需要更改初始目录结构,因为上传的内容现在将位于/var/uploads/uploaduser/content

据我了解...

  • 用户将无法退出ChrootDirectory
    • 我相信这也被称为监狱!
  • 我还没有找到一种方法来创建一个监狱根目录可写的监狱(目前)
  • 我曾考虑让用户访问当前的 root:root 目录,但他们仍然能够看到所有内容
    • 如果我使用,/home他们将能够看到所有用户目录(但没有访问权限)

希望这能有所帮助。如果有人知道如何让 jail 可写,我会很感兴趣!

相关内容