NGinx和PHP应该以什么用户身份运行?


15

许可对于Linux来说让我有些困惑。因此,目前我的NGinx和PHP-FPM实例都与用户和组一起运行:

www数据

这是标准吗?遇到文件上传时遇到麻烦。

例如,文件将与用户和组www-data一起上传。现在,由于我是如何在Web应用程序中设置权限(0440)的,所以我无法使用普通帐户通过ssh登录来下载这些文件。这是无法更改的。

我当时想更改我的nginx和php实例以保留该组,但是将它们更改为以我的用户名运行。

在这里处理权限的正确方法是什么?谢谢。

Answers:


12

它是这样工作的:当您通过FTP / SSH登录并上传文件时,这些文件是在您的许可下创建的。您的webroot可能是世界可写的(0777),这是不安全的-系统中的每个用户都可以在其中写入内容。PHP以不同的用户权限运行(它们是在PHP-FPM配置中指定的,而不是在Nginx配置中指定的),并且由于目录是可写的,因此PHP用户(www-data)也可以在其中写入。但是此文件的所有者是www-data,而不是您的帐户。在文件系统权限级别上,它们是2个不同的帐户。

我建议您创建具有最小特权的专用用户,该用户将拥有webroot目录,并将用于FTP / SSH上传并运行php。您应该更改PHP-FPM配置,在工作程序部分中,有用户条目和NGINX配置,因此您可以使您的网站文件不被世界范围阅读并且更安全。

不要以特权用户(sudo功能,写特权外地docroot)运行PHP,这可能会损害服务器安全性。


1
好的答案是,我创建了一个新用户,新文件夹,将所有内容复制了过来,应用了正确的权限并更改了用户的根目录。效果很好。谢谢。
Pixel开发人员

我可以仅将FTP用户添加到www-data组中,而不创建专用用户吗?它可以解决@ThePixelDeveloper的问题吗?谢谢。
Vladyslav Turak

2

www-data用户组是相当标准。它可能是其他系统上的www或Web,但思路是相同的:使用专用帐户运行Web服务。因此,当您的Web服务器受到威胁时,攻击者将只能访问该帐户已被授予的文件。

如果用户必须管理Web服务,则应将用户添加到相关组(www-data)或允许他向相关用户su(或sudo)(仍为www-data)。


10
使用www-data的原因是,它是一个具有零特权的帐户-它无法写入整个文件系统上的任何文件,只能读取世界可读的文件。以前,您将使用内置用户“ nobody”来实现此目的。但是,通过创建“ www-data”,您可以允许该用户写入某些文件,而不必使这些文件可全局写入(这很糟糕)。“ www-data”具有与“ nobody”一样特权的基本原理是正确的。
thomasrutter 2011年

@thomasrutter,据我了解,我应该在www-data组中的www-data用户下运行Nginx和PHP-FPM。如果我希望该用户能够readwrite到某个文件夹,则需要给他适当的权限。在大多数情况下,这将是Web根文件夹/var/www/html755权限。我对吗?谢谢!
Vladyslav Turak '18

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.