在我使用了 1.5 周的 Debian 6 VPS 上大量使用 SSH 之后,我想开始通过 SFTP 上传文件。我之前已经尝试过,但使用的是 root 帐户,由于安全性更改,使用 SSH 不再可行。
所以我创建了一个单独的用户,我们叫他sftp用户目前,谁属于该团体安全FTP他在 sshd_config 中得到了一个特殊条目:
Match Group sftp
ChrootDirectory /var/www
ForceCommand internal-sftp
PasswordAuthentication yes
所以,他很幸运,不需要密钥文件即可连接,但他只能访问 /var/www。好吧,这样就行了,我可以完美登录并查看那里的所有文件。但由于这些文件归 root 用户所有,他无法上传任何内容,这让他变得毫无用处。
在探索文件权限的过程中,我读过很多八进制数字组合和奇怪的解决方法,但没有一个是完全合适的。如果我理解正确的话,chmod 只能用于使目录对特定用户可写(根在这种情况下),组(猜猜怎么着,根在本例中为 \o/) 或其他。在不破坏 PHP-FPM 和 nginx 的情况下解决这个问题的“最佳”想法是添加sftp用户到根组。虽然我认为这不是一个好主意,但这应该不会造成太大的破坏,因为sftp用户已 chroot 并且无法打开 shell。但无论如何这都不起作用,我无法写入那里的任何文件,甚至无法使用sftp用户在里面根团体。
话虽如此,我还是需要帮助才能找到适合我目的的东西。我并不指望像我在这里写的一样有一大段文字,只是一些小提示能指引我正确的方向。
答案1
我所做的是为 sftpuser 创建一个主卷(我们称之为 /sftphome),它必须由 root 拥有并具有以下权限和所有权:
/sftphome
drwxr-xr-x root root
然后 sftpuser 的 sftp 主目录也必须由 root 拥有:
/sftphome/sftp用户
drwxr-xr-x root root
然后创建sftpuser可以上传下载的目录:
/sftphome/sftpuser/上传
drwx------ sftpuser sftpuser
当然要确保/sftphome已正确配置:
ChrootDirectory /sftphome
最终结果是,当 sftpuser 登录到 sftp 服务器时,该用户将被定向到/sftphome/sftp用户然后必须进入上传才能上传和下载文件。