NGINX kullanıcısını nasıl değiştiririm?


37

Bir dizin oluşturan ve dizine bir görüntü çıkaran bir PHP betiği var. Bu Apache altında gayet iyi çalışıyordu ancak son zamanlarda sınırlı RAM'imizi daha fazla kullanmak için NGINX'e geçmeye karar verdik. Dizini oluşturmak için PHP mkdir () komutunu kullanıyorum:

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

NGINX'e geçtikten sonra aşağıdaki uyarıyı alıyorum:

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

Üst dizinlerin tüm izinlerini zaten kontrol ettim, bu yüzden muhtemelen NGINX veya PHP-FPM 'kullanıcısını' değiştirmem gerektiğine karar verdim ancak bunu nasıl yapacağımdan emin değilim (asla bir kullanıcı belirtmek zorunda kalmamıştım) APACHE için izinler). Bu konuda fazla bilgi bulamıyorum. Herhangi bir yardım çok iyi olurdu!

(Not: Bu küçük bağlantının yanı sıra, NGINX’e geçiş oldukça sorunsuz oldu; ilk kez kullanıyorum ve tam anlamıyla sadece NGINX’e gidip koşmak yaklaşık 10 dakika sürdü. sapkınlıkları dışarı.)


1
Nginx bir paket yöneticisi tarafından kurulduysa, en iyisi muhtemelen nginx'in hangi kullanıcının çalıştığını görmek için 'ps' kullanmak ve dizinin sahibini o kullanıcı olarak değiştirmektir. Genellikle güvenlik paketleri tarafından varsayılan olarak oldukça iyi ayarlanmış, kullanıcının değiştirilmesi başka bir şeyi altüst edebilir.
Joachim Isaksson

nginx.confve www.confvarsayılan olarak IIRC.
PeeHaa

Fastcgi kullanıyorsanız, phpscripts'i ekleyebilecek olup olmadığını kontrol edin. bu, belirli kullanıcıları altında farklı siteler çalıştırmanıza izin verecektir. Bazı kurulum talimatlarının çevrimiçi olduğundan eminim.
hakre

Yanıtlar:


58

Nginx & php-fpm'yi www: www olarak çalıştırın

1. Nginx

Düzenleme nginx.conf ve set kullanıcı içinwww www;

Ana işlem root olarak çalıştırılırsa, nginx KULLANICI / GRUP olarak setuid () / setgid () ayarlayacaktır. GROUP belirtilmemişse, nginx, USER ile aynı adı kullanır. Varsayılan olarak hiç kimse kullanıcı veya hiç kimse veya nogrup grubu veya. /Configure betiğinden --user = USER ve --group = GROUP şeklindedir.

2. PHP-FPM

Düzenleme php-fpm.conf ve set kullanıcı ve grup www.

user - işlemlerin Unix kullanıcısı. Varsayılan "www-data"

grup - Unix süreçler grubu. Varsayılan "www-data"


1
Tamam az önce nginx.conf dosyasını değiştirdim (olarak ayarlandı user www-data). Ancak, içinde tanımlanmış bir kullanıcı göremiyorum php-fpm.conf. Aynı sözdizimini ( user www www) kullanarak en üstüne eklemeli miyim ?
David,

php-conf sözdizimi aynı os nginx.conf değildir. Parçayı bulun [www]ve bir user=wwwsonraki satıra ve bir sonrakine ekleyin group=www.
glavić

Yeniden Başlatma nginx: nginx yeniden başlattığında aşağıdaki hata var: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
David,

Daha sonra uygun dizinler için uygun izinlere sahip kullanıcı olarak Nginx ve php-fpm'yi çalıştırabilir veya "sudo useradd -g www www" komutunu çalıştırarak www adlı yeni bir kullanıcı oluşturabilirsiniz. Daha ayrıntılı bir açıklamaya ihtiyacınız olursa lütfen bize bildirin.
Roman Prykhodchenko

1
@ xorinzor: hayır, sahip olduklarınızı kullanın: D
glavić

24

In Ubuntu 14.04 değişiklik için dosya kullanıcı ve grubun içinde PHP-FPM geçerli: /etc/php5/fpm/pool.d/www.conf. Bu dosyada bu parametreleri değiştirin:

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

3
Bu aynı zamanda Ubuntu 16.10 için de geçerlidir.
Craimasjien

1
Bu aynı zamanda Ubuntu 18.04
siliconrockstar için

Bu, kabul edilen cevaba çok iyi bir katkı olacaktır.
Aşkan Kh. Nazary

PHP 7.2 için var/etc/php/7.2/fpm/pool.d/www.conf
Cromax

6

Asıl sorunuzu yanıtlamak , usersatırı şu şekilde değiştirmektir nginx.conf:

user    [username];

Örnek:

user    www-data;

Nginx'in çalışması olarak tercih edilen kullanıcı aslında işletim sistemleri arasında farklılık gösterir. Bazen Nginx'in olduğu gibi çalışması gerekiyordu www-data. Diğer zamanlarda aslında olarak çalışması gerekiyordu nobody.

Bazı işletim sistemlerinde (Windows gibi) farketmez, hatta usersatırdaki nginx.confyorum veya tamamen dışlanabilir.


Eğer kullanıcı direktifini eklersem ve Nginx servisini yeniden başlatırsam, 'kullanıcının' somut olmayan bir direktif olduğunu söyleyen bir hata verir - bu yüzden sadece dışarıda bırakmak uygun mudur?
JoeTidee

Evet, işletim sistemine ve / veya Nginx'e bağlı olarak, bazı sürümler açık bir kullanıcı yönergesi gerektirmez.
rubynorails

Tanınması için kullanıcı yönergesini Nginx config dosyamın en üstüne yerleştirmem gerekiyordu.
JoeTidee
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.