如何更改NGINX用户?


37

我有一个PHP脚本,它创建一个目录并将图像输出到该目录。在Apache下,这工作得很好,但是我们最近决定改用NGINX,以更多地利用我们有限的RAM。我正在使用PHP mkdir()命令创建目录:

mkdir(dirname($path['image']['server']), 0755, true);

切换到NGINX后,我收到以下警告:

Warning: mkdir(): Permission denied in ...

我已经检查了父目录的所有权限,因此我确定我可能需要更改NGINX或PHP-FPM'用户',但是我不确定该怎么做(我从来不必指定用户APACHE的权限)。我似乎找不到太多的信息。任何帮助将是巨大的!

(注意:除了这种挂断,向NGINX的切换非常无缝;我是第一次使用它,从字面上看,它仅用了10分钟就可以开始和运行NGINX。现在,我正在熨烫纠结)。


1
如果nginx是由软件包管理器安装的,那么最好的办法就是只使用'ps'来查看nginx的用户身份,并将目录所有者更改为该用户。通常,默认情况下,软件包对安全性的设置非常好,更改用户可能会破坏其他功能。
约阿希姆·伊萨克森

nginx.conf并且www.conf默认IIRC。
PeeHaa 2012年

如果您使用的是fastcgi,请检查是否可以执行phpscript。这样您就可以在其特定用户下运行不同的网站。我确定一些安装说明可以在线获得。
hakre 2012年

Answers:


58

将Nginx和php-fpm运行为www:www

1. Nginx

编辑nginx.conf并将用户设置为www www;

如果主进程以root身份运行,则nginx将setuid()/ setgid()设置为USER / GROUP。如果未指定GROUP,则nginx使用与USER相同的名称。默认情况下,它是nobody用户,nobody或nogroup组或./configure脚本中的--user = USER和--group = GROUP。

2. PHP-FPM

编辑php-fpm.conf并将用户和组设置为www

user-进程的Unix用户。默认的“ www-data”

group-Unix进程组。默认的“ www-data”


1
好的,我刚刚更改了nginx.conf(将其设置为user www-data)。但是,我看不到中定义了任何用户php-fpm.conf。是否应该使用相同的语法(user www www)将其添加到顶部?
大卫

php-conf语法与os nginx.conf不同。找到[www]零件并user=www在下一行中添加group=www
glavić

重启nginx的:重启nginx的时候,我得到了以下错误:[emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed
大卫

然后,您可以以具有适当目录权限的用户身份运行Nginx和php-fpm,也可以通过运行“ sudo useradd -g www www”来创建一个名为www的新用户。如果您需要更详细的说明,请告诉我们。
罗曼·普里霍德琴科

1
@xorinzor:没有,用你所拥有的:d
glavić

24

Ubuntu的14.04的文件,以改变用户PHP-FPM是:/etc/php5/fpm/pool.d/www.conf。在此文件中,更改以下参数:

user = www
group = www
listen.owner = www
listen.group = www

3
Ubuntu 16.10也是如此。
Craimasjien

1
Ubuntu 18.04也是这种情况
Siliconrockstar

这将是对已接受答案的很好补充。
Ashkan Kh。Nazary

对于PHP 7.2,它位于/etc/php/7.2/fpm/pool.d/www.conf
Cromax

6

要回答您的实际问题,就是像这样更改usernginx.conf

user    [username];

例:

user    www-data;

Nginx运行的首选用户实际上在操作系统之间有所不同。有时Nginx应该以www-data。其他时候它实际上应该运行为nobody

在某些操作系统(例如Windows)上,这甚至都没有关系,并且可以注释掉user行中的行nginx.conf或将其完全排除。


如果我在其中添加用户指令并重新启动Nginx服务,它会抛出一个错误消息,说明“用户”是一个unknwn指令-因此可以不做任何设置吗?
JoeTidee

是的,取决于操作系统和/或Nginx,某些版本不需要显式的用户指令。
rubynorails

我必须将用户指令放置在我的Nginx配置文件的最顶部,以使其能够被识别。
JoeTidee
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.