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.)

David
sumber
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"

glavić
sumber
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
iarroyo
sumber
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.

rubynorails
sumber
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