我正在尝试在我的服务器上设置一个上传目录,但这样做非常困难。系统上的所有其他用户都需要可以访问目录中的上传内容,但用于上传的用户帐户应该没有任何访问权限(除了上传之外),因此我将上传用户帐户 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 可写,我会很感兴趣!