Jak zmienić użytkownika NGINX?


37

Mam skrypt PHP, który tworzy katalog i wyświetla obraz w katalogu. Pod Apache działało to dobrze, ale ostatnio zdecydowaliśmy się przejść na NGINX, aby lepiej wykorzystać naszą ograniczoną pamięć RAM. Korzystam z komendy PHP mkdir (), aby utworzyć katalog:

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

Po przejściu na NGINX pojawia się następujące ostrzeżenie:

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

Sprawdziłem już wszystkie uprawnienia do katalogów nadrzędnych, więc ustaliłem, że prawdopodobnie muszę zmienić „użytkownika” NGINX lub PHP-FPM, ale nie jestem pewien, jak to zrobić (nigdy nie musiałem określać użytkownika uprawnienia dla APACHE). Nie mogę znaleźć dużo informacji na ten temat. Każda pomoc byłaby świetna!

(Uwaga: Poza tym małym rozłączaniem przejście na NGINX jest dość płynne; używam go po raz pierwszy i dosłownie zajęło to około 10 minut, aby uruchomić się z NGINX. Teraz tylko prasuję załamania.)


1
Jeśli nginx został zainstalowany przez menedżera pakietów, najlepiej użyć po prostu „ps”, aby zobaczyć, który użytkownik działa jako nginx i zmienić właściciela katalogu na tego użytkownika. Zazwyczaj zabezpieczenia są dość dobrze ustawione przez pakiety, zmiana użytkownika może zdenerwować coś innego.
— Joachim Isaksson

nginx.confi www.confdomyślnie IIRC.
— PeeHaa,

Jeśli używasz fastcgi, sprawdź, czy możesz suexec skrypty phps. które pozwolą Ci uruchomić różne witryny pod ich konkretnym użytkownikiem. Jestem pewien, że niektóre instrukcje konfiguracji są dostępne online.
— hakre

Odpowiedzi:


58

Uruchom nginx i php-fpm jako www: www

1. Nginx

Edytuj plik nginx.conf i ustaw użytkownika nawww www;

Jeśli proces główny jest uruchamiany jako root, to nginx ustawi setuid () / setgid () na USER / GROUP. Jeśli nie określono GRUPY, nginx używa tej samej nazwy co USER. Domyślnie jest to nikt użytkownik i nikt, grupa nogroup lub --user = USER i --group = GROUP ze skryptu ./configure.

2. PHP-FPM

Edytuj plik php-fpm.conf i ustaw użytkownika i grupę na www.

użytkownik - uniksowy użytkownik procesów. Domyślne „dane www”

grupa - uniksowa grupa procesów. Domyślne „dane www”


1
Ok, właśnie zmieniłem nginx.conf (ustawiono na user www-data). Jednak nie widzę żadnego zdefiniowanego w użytkownikowi php-fpm.conf. Czy powinienem po prostu dodać go na górze za pomocą tej samej składni ( user www www)?
— David

Składnia php-conf to nie to samo, co os nginx.conf. Znajdź [www]część i dodaj user=wwww następnej linii i group=wwwnastępnej.
— glavić

Mam następujący błąd przy ponownym nginx: Ponowne nginx: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
— David

Następnie możesz uruchomić Nginx i php-fpm jako użytkownik, który ma odpowiednie uprawnienia do odpowiednich katalogów lub utworzyć nowego użytkownika o nazwie www, uruchamiając „sudo useradd -g www www”. Daj nam znać, jeśli potrzebujesz bardziej szczegółowych wyjaśnień.
— Roman Prykhodchenko

1
@xorinzor: nie, użyj tego, co masz: D
— glavić

24

W Ubuntu 14.04 plik do zmiany użytkownika i grupy w PHP-FPM jest: /etc/php5/fpm/pool.d/www.conf. W tym pliku zmień następujące parametry:

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

3
Dotyczy to również Ubuntu 16.10.
— Craimasjien

1
Dotyczy to również Ubuntu 18.04
— siliconrockstar

Byłby to bardzo dobry dodatek do zaakceptowanej odpowiedzi.
— Ashkan Kh. Nazary,

Dla PHP 7.2 jest w/etc/php/7.2/fpm/pool.d/www.conf
— Cromax

6

Aby odpowiedzieć na twoje aktualne pytanie, wystarczy zmienić userlinię w następujący nginx.confsposób:

user    [username];

Przykład:

user    www-data;

Preferowany użytkownik do uruchamiania Nginx, ponieważ tak naprawdę różni się między systemami operacyjnymi. Czasami Nginx powinien działać jako www-data. Innym razem powinien on działać jako nobody.

W niektórych systemach operacyjnych (takich jak Windows) nie ma to nawet znaczenia, a userwiersz nginx.confwejściowy można skomentować lub całkowicie wykluczyć.


Jeśli dodam dyrektywę użytkownika i zrestartuję usługę Nginx, pojawi się błąd informujący, że „użytkownik” to nieznana dyrektywa - czy w związku z tym można ją pominąć?
— JoeTidee

Tak, w zależności od systemu operacyjnego i / lub Nginx, niektóre wersje nie wymagają wyraźnej dyrektywy użytkownika.
— rubynorails

Musiałem umieścić dyrektywę użytkownika na samej górze pliku konfiguracyjnego Nginx, aby ją rozpoznać.
— JoeTidee
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.