Apakah mungkin di nginx mengkonfigurasi pengguna yang berbeda per host virtual?
Sesuatu seperti
server {
user myprojectuser myprojectgroup;
...
}
Tidak, karena semua bait server dalam konfigurasi nginx dilayani dari rangkaian proses pekerja yang sama. Selain itu, dari perspektif keamanan, Anda lebih baik menjalankannya seperti itu, karena itu berarti bahwa konten secara otomatis tidak dapat ditulis oleh server web (tidak ada kebodohan seperti a chmod -R 0777
), sehingga jika ada kerentanan di nginx, tidak ada konten beresiko.
www-data
dan perms0710
ketika Anda mengatur vhost (karena ini membutuhkan root untuk mengkonfigurasi nginx, itu bukan masalah untuk memiliki otomatisasi Anda juga mengatur izin yang diperlukan). Maka isi dokumen hanya perluo+x
untuk direktori dano+r
file.www-data
, setiap pengguna yang dapat menyajikan skrip PHP atau proses cgi-bin dapat mengakses file apa pun yang dapat diakses olehwww-data
pengguna. Ini tampaknya tidak jelas bagi siapa pun yang menyimpan kata sandi basis data diconfig.php.inc
atau serupa pada mesin bersama.peter
danjohn
. Mereka meng-hosting halaman web mereka di~/public_html
. Tidak ada pendekatan berbeda yang tidak disebutkan oleh siapa pun yang membahas hal di atas, skrip .php memiliki izin yang sama dengan server web seperti yang juga dijalankan di bawahnyawww-data
. Ini berarti, sama seperti server web dan penerjemah PHP, ia dapat membaca skrip .php lainnya.Iya nih. Dimungkinkan dan direkomendasikan untuk keamanan ekstra (lihat mengapa di bawah).
Menimbang bahwa Anda menggunakan PHP-FPM (Anda mungkin, karena ini adalah yang paling biasa), Anda dapat membuat spool, yang dimiliki oleh pengguna yang berbeda, untuk setiap domain.
1. Buat gulungan:
Tambahkan gulungan ke
/etc/php/7.0/fpm/pool.d/www.conf
atau buat.conf
file baru untuk setiap gulungan baru.Kumparan # 1 (myuser1):
Kumparan # 2 (myuser2):
PS: Jaga listen.owner / listen.group ke pengguna nginx yang sama (biasanya www-data ).
2. Tetapkan setiap spool ke blok servernya (host virtual untuk pengguna apache):
Tuan rumah 1:
Tuan rumah 2:
Mulai ulang layanan FPM dan NGINX
Pengujian:
Buat file pinfo.php (atau apa pun nama) yang akan menunjukkan proses pengguna saat ini:
Atau buat file pinfo.php via bash:
Kemudian buka " http: //.../pinfo.php " di browser Anda.
Mengapa menggunakan banyak pengguna (alasan keamanan):
Jika Anda menjalankan semua situs web Anda di bawah pengguna yang sama ( www-data ), panggilan PHP ke sistem () / passthru () / exec () akan memiliki akses ke semua situs web! NGINX tidak akan melindungi Anda dari ini. PHP hanyalah sebuah contoh, tetapi bahasa server web populer mana pun memiliki panggilan serupa. Sebagai seorang peretas, Anda dapat " ls .. " untuk menavigasi melalui semua situs web dan " cp / echo / mv " untuk menulis kode Anda sendiri dalam file apa pun (termasuk file situs web lain). Sekalipun semua situs web di server dimiliki oleh orang yang sama (mis. Anda), disarankan untuk menjalankan setiap situs web dengan pengguna yang berbeda, karena itu akan mencegah peretas / virus (virus Wordpress) untuk mengakses situs web Anda yang lain.
sumber
Menanggapi komentar Ivan di atas dan yang tampaknya berlaku untuk OP. Dua hal:
Root dokumen aplikasi akan menjadi seperti
/blah/peterWeb/html
dan/blah/johnWeb/html
. Baik NGINX dan Apache2 tidak akan mengizinkan satu untuk membaca dengan teliti atau beroperasi di direktori lain bahkan jika keduanya menjalankan www-data sebagai grup.Menempatkan setiap pohon direktori di bawah izin pengguna mereka sendiri akan memungkinkan setiap pengguna untuk ssh / login ke sistem UNIX dan menjaga direktori mereka pribadi untuk masing-masing - hanya saja jangan menempatkan setiap pengguna ke dalam kelompok data-www. Jika Anda setuju, maka kalimat Anda:
mungkin lebih akurat ditulis sebagai:
EDIT 1: Harus mengatasi beberapa masalah Admin Server saya melihat lebih jauh ke dalam topik ini. Saya tidak mengetahui seberapa akurat informasi Ivan! Jika Anda bermaksud memberi pengguna kemampuan untuk mengunggah dan menjalankan skrip pada konfigurasi hosting bersama, maka perhatikan. Inilah satu pendekatan . Hat tip ke Ivan untuk memastikan saya memahami kerentanan ini.
sumber
www-data
. Jika Johnny dapat membuat skrip dan menjalankannya di bawahwww-data
(yang pada pengaturan naif dia bisa), maka skrip Johnny dapat membaca skrip Peter dan mengirimkannya kembali ke Johnny. Ini tidak ada hubungannya dengan kelompok. Solusi yang tepat adalah memiliki suPHP (jika pengaturan naif, buruk, karena kode yang ditulis dengan buruk maka membahayakan semua file pengguna ini), atau penjara, atau pengguna web tambahan khusus per pengguna.