Як змінити користувача NGINX?


36

У мене є скрипт PHP, який створює каталог і виводить зображення в каталог. У Apache це працювало чудово, але нещодавно ми вирішили перейти на NGINX, щоб більше використовувати обмежену пам’ять. Я використовую команду PHP mkdir () для створення каталогу:

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

Після переходу на NGINX я отримую таке попередження:

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

Я вже перевірив усі дозволи батьківських каталогів, тому я визначив, що, ймовірно, потрібно змінити "користувача" NGINX або PHP-FPM, але я не знаю, як це зробити (мені ніколи не вказувати користувача дозволи для APACHE). Я не можу знайти багато інформації з цього приводу. Будь-яка допомога була б чудовою!

(Примітка. Окрім цієї невеликої повіси, перехід на NGINX був досить безпроблемним; я використовую його вперше, і для буквального зайняття NGINX буквально знадобилося лише 10 хвилин. Тепер я просто прасую з приводів.)


1
Якщо nginx був встановлений менеджером пакунків, найкраще, мабуть, просто скористатися 'ps', щоб побачити, як користувач nginx працює, і змінити власника каталогу на цього користувача. Зазвичай безпека налаштована досить добре за замовчуванням пакетами, зміна користувача може порушити щось інше.
Йоахім Ісакссон

nginx.confі www.confза замовчуванням IIRC.
PeeHaa

Якщо ви використовуєте fastcgi, перевірте, чи можете ви виконати супровід phpscripts. що дозволить вам запускати різні сайти під конкретного користувача. Я впевнений, що деякі інструкції з налаштування доступні в Інтернеті.
хакре

Відповіді:


57

Запустіть nginx & php-fpm як www: www

1. Nginx

Відредагуйте nginx.conf та встановіть користувача наwww www;

Якщо основний процес запускається як root, то nginx встановить () / setgid () на USER / GROUP. Якщо GROUP не вказано, то nginx використовує те саме ім'я, що і USER. За замовчуванням це ніхто не користувач і ніхто або група ніггрупу або --user = USER і --group = GROUP зі сценарію ./configure.

2. PHP-FPM

Відредагуйте php-fpm.conf та встановіть користувача та групу на www.

користувач - користувач Unix процесів. За замовчуванням "www-data"

група - група процесів 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 як користувача, який має відповідні дозволи для відповідних каталогів, або створити нового користувача під назвою www, запустивши "sudo useradd -g 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

Це було б дуже вдалим доповненням до прийнятої відповіді.
Ашкан Х. Назарій

Для 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можна коментувати або повністю виключати.


Якщо я додаю в інструкцію користувача і перезавантажую службу Nginx, вона видає помилку, кажучи про те, що "користувач" є невідомою директивою - чи добре це просто залишати її?
JoeTidee

Так, залежно від ОС та / або Nginx, деякі версії не потребують явної інструкції користувача.
rubynorails

Мені довелося розмістити директиву користувача в самому верху мого конфігураційного файлу Nginx, щоб він був розпізнаний.
JoeTidee
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.