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.