Как мне изменить пользователя NGINX?

37

У меня есть сценарий PHP, который создает каталог и выводит изображение в каталог. Это работало просто отлично под Apache, но мы недавно решили переключиться на NGINX, чтобы больше использовать нашу ограниченную оперативную память. Я использую команду 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
Если вы используете fastcgi, проверьте, можете ли вы suexec phpscripts. это позволит вам запускать разные сайты под своим конкретным пользователем. Я уверен, что некоторые инструкции по настройке доступны онлайн.
Хакре

Ответы:

58

Запустите nginx & php-fpm как www: www

1. Nginx

Отредактируйте nginx.conf и установите для пользователя значениеwww www;

Если главный процесс запускается от имени пользователя root, то nginx установит setuid () / setgid () в значение USER / GROUP. Если GROUP не указан, то nginx использует то же имя, что и USER. По умолчанию это ни один пользователь и никто или группа nogroup или --user = USER и --group = GROUP из скрипта ./configure.

2. PHP-FPM

Отредактируйте php-fpm.conf и установите для пользователя и группы значение www.

пользователь - пользователь процессов Unix. По умолчанию "www-data"

группа - Unix группа процессов. По умолчанию "www-data"

Glavic
источник
1
Хорошо, я только что изменил nginx.conf (он был установлен user www-data). Тем не менее, я не вижу ни одного пользователя, определенного в php-fpm.conf. Должен ли я просто добавить его в начало, используя тот же синтаксис ( user www www)?
Дэвид
Синтаксис php-conf отличается от os nginx.conf. Найдите [www]часть и добавьте user=wwwв следующую строку и group=wwwв следующую.
Главич
Я получил следующее сообщение об ошибке при перезапуске Nginx: Перезапуск Nginx: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
Дэвид
Затем вы можете запустить Nginx и php-fpm как пользователь с соответствующими правами доступа для соответствующих каталогов или создать нового пользователя с именем www, выполнив команду «sudo useradd -g www www». Пожалуйста, дайте нам знать, если вам нужно более подробное объяснение.
Роман Приходченко
1
@xorinzor: нет, используйте то, что у вас есть: D
glavić
25

В Ubuntu 14.04 файл для изменения пользователя и группы в PHP-FPM является: /etc/php5/fpm/pool.d/www.conf. В этом файле измените эти параметры:

user = www
group = www
listen.owner = www
listen.group = www
iarroyo
источник
3
Это также относится и к Ubuntu 16.10.
Craimasjien
1
Это также относится и к Ubuntu 18.04
silicrockstar
Это было бы очень хорошим дополнением к принятому ответу.
Ашкан Х. Назар
Для PHP 7.2 это в/etc/php/7.2/fpm/pool.d/www.conf
Cromax
6

Чтобы ответить на ваш вопрос, просто измените userстроку nginx.confследующим образом:

user    [username];

Пример:

user    www-data;

Предпочтительный пользователь для запуска Nginx, поскольку фактически отличается в разных операционных системах. Иногда Nginx должен работать как www-data. В других случаях это на самом деле должно работать как nobody.

В некоторых операционных системах (таких как Windows) это даже не имеет значения, и userстрока nginx.confможет быть закомментирована или полностью исключена.

rubynorails
источник
Если я добавляю пользовательскую директиву и перезапускаю службу Nginx, она выдает ошибку, говорящую о том, что «пользователь» является неведомой директивой - поэтому нормально просто оставить ее вне?
JoeTidee
Да, в зависимости от ОС и / или Nginx, некоторые версии не требуют явной директивы пользователя.
Rubynorails
Мне пришлось поместить директиву пользователя в самый верх моего конфигурационного файла Nginx, чтобы он был распознан.
JoeTidee