Pengguna Apa yang harus dijalankan oleh NGinx dan PHP?

15

Izin adalah sesuatu yang membingungkan saya untuk Linux. Jadi, pada saat ini, instance NGinx dan PHP-FPM saya berjalan dengan pengguna dan grup:

www-data

Apakah ini standar? Saya mengalami masalah ketika menemukan file yang diunggah.

Contoh , sebuah file akan diunggah baik dengan data pengguna dan grup. Sekarang, karena cara saya mengatur izin (0440) di aplikasi web saya, saya tidak bisa masuk melalui ssh dengan akun normal saya untuk mengunduh file-file itu. Ini tidak bisa diubah.

Saya sedang berpikir untuk mengubah contoh nginx dan php saya untuk menjaga grup, tetapi mengubahnya untuk berjalan di bawah nama pengguna saya.

Apa cara yang benar untuk menangani izin di sini? Terima kasih.

Pengembang Pixel
sumber

Jawaban:

12

Beginilah cara kerjanya: Ketika Anda masuk melalui FTP / SSH dan mengunggah file, mereka dibuat dengan izin Anda. Mungkin webroot Anda bisa ditulis oleh dunia (0777), tidak aman - setiap pengguna dalam sistem dapat menulis sesuatu di sana. PHP berjalan dengan hak pengguna yang berbeda (ditentukan dalam konfigurasi PHP-FPM, bukan konfigurasi nginx), dan karena direktori dapat ditulis oleh dunia, pengguna PHP (www-data) juga dapat menulis di sana. Tetapi pemilik file ini adalah www-data, bukan akun Anda. Mereka adalah 2 akun berbeda di tingkat izin sistem file.

Saya sarankan Anda untuk membuat pengguna yang berdedikasi dengan hak istimewa yang sesedikit mungkin, yang akan memiliki direktori webroot dan akan digunakan untuk unggahan FTP / SSH DAN akan menjalankan php. Anda harus mengubah konfigurasi PHP-FPM, di bagian pekerja ada entri pengguna dan konfigurasi NGINX, sehingga Anda dapat membuat file situs web Anda tidak dapat dibaca dunia dan lebih aman.

Jangan jalankan PHP dengan pengguna istimewa (kemampuan sudo, tulis hak istimewa dokumen di luar kantor), yang dapat menyebabkan kompromi keamanan server.

Kristaps
sumber
1
Jawaban yang bagus, saya membuat pengguna baru, folder baru, menyalin semuanya, menerapkan izin yang benar dan chroot pengguna. Bekerja dengan baik. Terima kasih.
Pengembang Pixel
Bisakah saya menambahkan pengguna FTP saya ke www-datagrup daripada membuat pengguna khusus? Apakah ini menyelesaikan masalah @ ThePixelDeveloper? Terima kasih.
Vladyslav Turak
2

The www-datapengguna & kelompok yang cukup standar. Mungkin www atau web di sistem lain tetapi idenya sama: Jalankan layanan web dengan akun khusus. Dengan demikian, ketika server web Anda disusupi, penyerang hanya akan dapat mengakses file yang telah diberikan akun ini.

Jika pengguna harus mengelola layanan web, Anda harus menambahkan pengguna ke grup yang relevan (www-data) atau mengizinkannya untuk su (atau sudo) ke pengguna yang relevan (masih www-data).

Benoit
sumber
10
Alasan untuk www-data adalah karena ini adalah akun dengan nol hak istimewa - tidak dapat menulis ke file apa pun di seluruh sistem file, tidak membaca apa pun kecuali file yang dapat dibaca dunia. Sebelumnya, Anda akan menggunakan "tidak ada" pengguna bawaan untuk mencapai ini. Namun, dengan membuat "www-data" Anda memiliki kemungkinan untuk memungkinkan pengguna ini menulis ke beberapa file, tanpa harus membuat file-file tersebut dapat ditulis oleh dunia (yang buruk). Prinsip dasar, bahwa "www-data" sama istimewanya dengan "tidak ada" dalam segala hal, berlaku.
thomasrutter
@ Thomas, dari apa yang saya mengerti, saya harus menjalankan Nginx dan PHP-FPM di bawah pengguna data-www yang ada di grup data-www. Jika saya ingin pengguna ini dapat read& writeke beberapa folder, saya perlu memberinya izin yang tepat. Dalam kebanyakan kasus, ini akan menjadi folder root web /var/www/htmldan 755izin. Apakah saya benar? Terima kasih!
Vladyslav Turak
1

Saya mencoba untuk menghindari memiliki nginx / php mengeksekusi skrip yang dimiliki sebagai www-data untuk alasan keamanan.

Ed Bloom
sumber
9
maukah Anda menguraikan hal itu?
Karussell