我真的很想知道人们如何建议这样做chmod或chown完全缺乏OP服务器设置的细节。
根据到目前为止提到的所有内容,我可以假设OP是以这种方式运行的:NGINX的运行方式为www-data。
PHP-FPM以不同的用户名运行(因此出现权限问题)。假设PHP-FPM池的用户名是foo。
让我们概述这种设置的最佳实践。这样一来,您将很快获得良好的状态,而不会遇到任何权限问题。
谁必须拥有文件
通常(无论是否有多站点服务器),您都需要一个拥有站点文件的特定用户。用户应该永远是www-data。为此,它必须是您创建的一个单独的用户:foo。
通常,该用户foo将被设置为运行PHP-FPM池的用户。
因此,请为foo用户设置正确的所有权:chown -R foo:foo /path/to/your/site/html
由于PHP-FPM脚本的运行方式为foo,现在该目录及其中的所有文件均由该所有者拥有foo,因此PHP-FPM可以在那里毫无问题地完成工作。这样,您将绝对不会有PHP无法创建/访问内容的可能性。
授予对Web服务器的访问权限
请记住,该设置涉及两个用户:一个是Web服务器的(www-data),另一个是PHP-FPM的(foo)。
既然文件已正确拥有foo,我们需要授予读取它们的权限www-data。为什么只看书?因为NGINX与在此设置中写入文件系统无关。它只需要读取文件和遍历目录。
通常通过使Web服务器的用户成为站点用户组的成员来完成此授予的方式。一开始很难理解,但是我会更加冗长:
假设有一个站点文件data.txt,该文件现在归foo:foo所有者所有-Linux中的所有权是双重所有权:文件由foo用户和foo组拥有。
目前,该foo组只有一个成员:foo用户。
我们需要做的是将另一个成员添加到该foo组:www-data用户。
因此:usermod -a -G foo www-data
此后,该foo组将具有以下成员:foo用户,www-data用户。
现在我们可以继续使用权限了:)
应该有什么权限
既然我们已经完成了所有权,剩下的重要一点就是以这种方式调整所有文件和目录的权限:目录应允许+x组的遍历()
文件应允许读取(+r)组
必须具有这些权限www-data才能读取每个网站文件和目录。
最有可能的是,您不需要显式设置这些设置,因为umask设置(此处将不涉及本主题)将已经设置为所有文件都已具有这些权限。
但是,如果您需要修复自己的东西,则可以执行以下操作:chmod -R g+rX /path/to/your/site/html
大写X确保+x仅针对目录设置。
安全起见
在为这种设置设置了正确的文件和组所有权之后,您可以进一步提高安全性并设置更严格的限制chmod。
例如,Magento安全chmod 遵循该安装程序的约定,因此chmod,0400对于PHP文件和0640媒体文件,您可以使用的权限:)
除非您要处理一个真正奇怪的用例,否则最后chmod一位应始终为0。