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

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

权限是 Linux 中让我困惑的问题。目前,我的 NGinx 和 PHP-FPM 实例都以用户和组身份运行:

www-数据

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

例子,文件将同时上传到用户和组 www-data。现在,由于我在 Web 应用程序中设置权限 (0440) 的方式,我无法使用我的普通帐户通过 ssh 登录来下载这些文件。这无法更改。

我正在考虑更改我的 nginx 和 php 实例以保留该组,但将它们更改为以我的用户名运行。

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

答案1

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

我建议您创建具有尽可能小权限的专用用户,该用户将拥有 webroot 目录并用于 FTP/SSH 上传和运行 php。您应该更改 PHP-FPM 配置,在 worker 部分中有用户条目和 NGINX 配置,这样您就可以使您的网站文件不可读且更安全。

不要使用特权(sudo 功能、在站点 docroot 之外的写入权限)用户运行 PHP,这可能会导致服务器安全受到威胁。

答案2

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

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

答案3

出于安全原因,我尝试避免让 nginx/php 执行以 www-data 为拥有的脚本。

相关内容