我需要在 Ubuntu 18.04 上设置一个满足以下要求的 stfp 帐户:
- 可以上传到网站的子文件夹,即 example.com/subfolder/
- 上传的文件属于 www-data 组,因此对 nginx 可见
- 用户无法查看指定目录之外的内容
我做了一些研究,发现我需要的是 Chroot。
所以我尝试了这个:
adduser --home /var/www/mysite/uploadfolder --no-create-home myusers
usermod -aG www-data myusers
chmod 2770 /var/www/mysite/uploadfolder/
chmod -R g+w /var/www/mysite/uploadfolder/
setfacl -m g:www-data:rwx /var/www/mysite/uploadfolder/
然后我将其添加到 sshd_config:
Match User mvpdocs
ChrootDirectory /var/www/mysite/uploadfolder/
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
但这不起作用。我做了一些研究,OpenSSH 不允许这样做,因为 Chroot 文件夹必须由 root 拥有,并且不能由组写入。如果我将路径切换到 /home 目录中由 root 拥有的文件夹,那么它可以正常工作,但我需要用户上传到子目录。
我该如何解决这个问题?我可以符号链接目录并将符号链接的目录声明为 Chroot 的一部分吗?我看到有人提到这是可能的,但没有例子。
对于我来说,实现将简单的 sftp 帐户上传到网站子目录的最简单方法是什么?
编辑:
我使用过mount --bind /var/www/mysite/uploadfolder/ /home/user/docs/
并且它可以工作,但是所有上传的文件都归用户所有并且属于用户组。
我怎样才能让它们拥有组 www-data,以便可以通过 webserver 和 php 进行管理?