基于SSH chroot权限的FTP

我试图在我的服务器上build立一个上传目录,而且最难的时候是这样做的。 上传到该目录需要系统上的所有其他用户都可以访问,但是用于上传的用户帐户应该根本没有访问权限(除了上传之外),所以我正在根据上传用户帐户只有自己的目录。 由于策略考虑,我通过SSH使用FTP,并且我已经进行了以下设置:

上传目录:

/var/uploads/uploaduser/ 

(我使用这个,因为uploaduser帐户不是一个普通的帐户,不应该这样对待;但是,我很乐意接受关于如何去做这件事的其他build议。)

权限设置如下:

 /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---rx 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,对于涉及FTP over SSH的所有其他应用程序,它都可以正常工作。

ETA:我使用Amazon EC2实例作为我的networking服务器,并运行Amazon Linux AMI。

我现在只是自己学习这个东西,并认为我刚刚得到了你来的驼峰。

首先,您的上传目录与您的ChrootDirectory不匹配。 我会认为这是一个错字。

有些事情我来学习:

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

现在使用ChrootDirectory

  • path必须存在
  • 该目录必须具有root用户和组(root:root)
    • 你的做法
    • 因此,SFTP用户无法在此目录中写入任何内容
  • ChrootDirectory内创build另一个名为content目录(例如)
    • 此目录必须以uploaduser (SFTP用户)作为用户和组(uploaduser:uploaduser)
    • 我认为这是你错过的部分
  • 您可能想要更改您的初始目录结构,因为上传的内容现在将位于/var/uploads/uploaduser/content

从我的理解…

  • 用户将无法离开ChrootDirectory
    • 也被称为监狱,我相信!
  • 我还没有find一个方法来创build一个jail根可写的监狱(还)
  • 我已经设想让一个用户可以访问一个当前的根目录,但是他们仍然能够看到所有的内容
    • 如果我使用/home他们将能够看到所有的用户目录(尽pipe没有访问权限)

希望这可以帮助。 如果有人知道如何使监狱成为可写,我会很有兴趣知道!