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