Як змінити користувача 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.