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

权限是我一段时间在Linux上困惑的东西。 所以在那一刻我的NGinx和PHP-FPM实例都在用户中运行:

www数据

这是标准吗? 当我遇到file upload时遇到麻烦。

例如 ,一个文件将被上传与用户和组www-data。 现在,由于我如何在我的Web应用程序中设置权限(0440),我无法通过sshlogin我的普通帐户来下载这些文件。 这不能改变。

我正在考虑改变我的nginx和php实例来保持组,但改变它们在我的用户名下运行。

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

这是如何工作的:当你通过FTP / SSHlogin并上传文件时,它们是用你的权限创build的。 可能你的webroot是世界可写的(0777),这是不安全的 – 系统中的每个用户都可以在那里写东西。 PHP以不同的用户权限运行(它们在PHP-FPMconfiguration中指定,而不是在nginxconfiguration中),并且由于目录是世界可写的,PHP用户(www-data)也可以在那里写入。 但是这个文件的所有者是www-data,而不是你的账户。 它们是文件系统权限级别中的两个不同的帐户。

我build议你创build专用用户最小的权限,这将拥有webroot目录,将用于FTP / SSH上传,并会运行PHP。 您应该更改PHP-FPMconfiguration,在工作区部分有用户input和NGINXconfiguration,这样可以使您的网站文件不可读,更安全。

不要使用特权(sudofunction,写入权限外部docroot)用户运行PHP,这可能会导致服务器安全性的妥协。

为了安全起见,我尽量避免让nginx / php执行拥有www-data的脚本。

www-data用户和组是非常标准的。 它可能是www或其他系统上的web,但这个想法是一样的:用专门的帐户运行web服务。 因此,当您的Web服务器遭到入侵时,攻击者将只能访问该帐户已被授予的文件。

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