Bagaimana cara mengubah pengguna NGINX?


37

Saya memiliki skrip PHP yang membuat direktori dan menampilkan gambar ke direktori. Ini berfungsi dengan baik di bawah Apache tetapi kami baru-baru ini memutuskan untuk beralih ke NGINX untuk memanfaatkan lebih banyak RAM kami yang terbatas. Saya menggunakan perintah PHP mkdir () untuk membuat direktori:

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

Setelah beralih ke NGINX, saya mendapatkan peringatan berikut:

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

Saya sudah memeriksa semua izin dari direktori induk, jadi saya telah menentukan bahwa saya mungkin perlu mengubah 'pengguna' NGINX atau PHP-FPM tapi saya tidak yakin bagaimana melakukan itu (saya tidak pernah harus menentukan pengguna izin untuk APACHE). Sepertinya saya tidak dapat menemukan banyak informasi tentang ini. Bantuan apa pun akan luar biasa!

(Catatan: Selain hang-up kecil ini, beralih ke NGINX cukup mulus; Saya menggunakannya untuk pertama kalinya dan secara harfiah hanya membutuhkan waktu sekitar 10 menit untuk bangun dan berjalan dengan NGINX. Sekarang saya hanya menyetrika keluar ketegaran.)


1
Jika nginx diinstal oleh manajer paket, yang terbaik mungkin hanya menggunakan 'ps' untuk melihat apa yang dijalankan pengguna nginx dan mengubah pemilik direktori ke pengguna tersebut. Biasanya keamanan diatur dengan cukup baik secara default oleh paket, mengubah pengguna dapat mengganggu hal lain.
Joachim Isaksson

nginx.confdan www.confsecara default IIRC.
PeeHaa

Jika Anda menggunakan fastcgi, periksa apakah Anda dapat menghapus skrip php. yang akan memungkinkan Anda untuk menjalankan situs yang berbeda di bawah pengguna spesifik mereka. Saya yakin beberapa instruksi pengaturan tersedia secara online.
hakre

Jawaban:


58

Jalankan nginx & php-fpm sebagai www: www

1. Nginx

Edit nginx.conf dan atur pengguna kewww www;

Jika proses master dijalankan sebagai root, maka nginx akan setuid () / setgid () ke USER / GROUP. Jika GROUP tidak ditentukan, maka nginx menggunakan nama yang sama dengan USER. Secara default itu bukan pengguna dan siapa pun atau grup nogroup atau --user = USER dan --group = GROUP dari skrip ./configure.

2. PHP-FPM

Edit php-fpm.conf dan atur pengguna dan grup ke www.

pengguna - pengguna proses Unix. Default "www-data"

grup - Unix grup proses. Default "www-data"


1
Oke saya baru saja mengubah nginx.conf (disetel ke user www-data). Namun, saya tidak melihat ada pengguna yang didefinisikan di php-fpm.conf. Haruskah saya menambahkannya ke atas menggunakan sintaks yang sama ( user www www)?
David

sintaks php-conf tidak sama dengan os nginx.conf. Temukan [www]bagian dan tambahkan user=wwwdi baris berikutnya, dan group=wwwdi baris berikutnya.
glavić

Saya mendapat error berikut ketika restart nginx: Restart nginx: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
David

Kemudian Anda bisa menjalankan Nginx dan php-fpm sebagai pengguna yang memiliki izin yang sesuai untuk direktori yang sesuai atau membuat pengguna baru bernama www dengan menjalankan "sudo useradd -g www www". Harap beri tahu kami, jika Anda membutuhkan penjelasan lebih rinci.
Roman Prykhodchenko

1
@xorinzor: tidak, gunakan apa yang Anda miliki: D
glavić

25

Di Ubuntu 14.04 file perubahan pengguna dan kelompok di PHP-FPM adalah: /etc/php5/fpm/pool.d/www.conf. Dalam file ini ubah parameter ini:

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

3
Ini juga berlaku untuk Ubuntu 16.10.
Craimasjien

1
Ini juga berlaku untuk Ubuntu 18.04
siliconrockstar

Ini akan menjadi tambahan yang sangat bagus untuk jawaban yang diterima.
Ashkan Kh. Nazary

Untuk PHP 7.2 ada di/etc/php/7.2/fpm/pool.d/www.conf
Cromax

6

Untuk menjawab pertanyaan Anda yang sebenarnya adalah dengan hanya mengubah userbaris nginx.confseperti:

user    [username];

Contoh:

user    www-data;

Pengguna pilihan untuk Nginx untuk menjalankan karena sebenarnya berbeda antara sistem operasi. Terkadang Nginx seharusnya dijalankan sebagai www-data. Lain waktu itu seharusnya dijalankan sebagai nobody.

Pada beberapa sistem operasi (seperti Windows), bahkan tidak masalah, dan usersaluran masuk nginx.confdapat dikomentari atau sepenuhnya dikecualikan.


Jika saya menambahkan direktif pengguna dan me-restart layanan Nginx, itu melontarkan kesalahan yang mengatakan bahwa 'pengguna' adalah arahan yang tidak diketahui - apakah itu boleh-boleh saja meninggalkannya?
JoeTidee

Ya, tergantung pada OS dan / atau Nginx, beberapa versi tidak memerlukan arahan pengguna eksplisit.
rubynorails

Saya harus meletakkan petunjuk pengguna di bagian paling atas dari file konfigurasi Nginx saya agar bisa dikenali.
JoeTidee
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.