Saya menyiapkan server web yang akan meng-host sejumlah situs web yang berbeda sebagai Apache VirtualHosts, masing-masing memiliki kemungkinan untuk menjalankan skrip (terutama PHP, kemungkinan yang lain).
Pertanyaan saya adalah bagaimana saya mengisolasi masing-masing VirtualHost ini dari satu sama lain dan dari sisa sistem? Saya tidak ingin misalnya situs web X untuk membaca konfigurasi situs web Y atau file "pribadi" server.
Saat ini saya telah menyiapkan VirtualHosts dengan FastCGI, PHP dan SUExec seperti yang dijelaskan di sini ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec -easy-way.html ), tetapi SUExec hanya mencegah pengguna mengedit / mengeksekusi file selain milik mereka sendiri - pengguna masih dapat membaca informasi sensitif seperti file konfigurasi.
Saya telah berpikir tentang menghapus izin baca global UNIX untuk semua file di server, karena ini akan memperbaiki masalah di atas, tapi saya tidak yakin apakah saya bisa melakukan ini dengan aman tanpa mengganggu fungsi server.
Saya juga melihat ke dalam menggunakan chroot, tetapi tampaknya ini hanya dapat dilakukan pada basis per-server, dan bukan pada basis per-virtual-host.
Saya mencari saran yang akan mengisolasi VirtualHosts saya dari seluruh sistem.
PS Saya menjalankan server Ubuntu 12.04
JAWABAN Saya: Saya mengakhiri dengan hampir mengikuti konfigurasi saya saat ini, tetapi melakukan jail chroot untuk semua host virtual, mis. Memiliki chroot jail di dalam /var/www
dan kemudian memiliki semua data pengguna dalam subfolder masing-masing dengan izin grup / orang lain r / w / x cacat. Opsi ini diinginkan terutama karena semuanya dimungkinkan tanpa modifikasi pada kode sumber.
Saya memilih jawaban @Chris, karena ditulis dengan seksama dan juga dianggap FTP dan SELinux
sumber
mod_userdir
menawarkan hosting virtual untuk domain terpisah. Selain itu, saya memiliki kekhawatiran tentang keamanan dalam hal isolasi karena saya tidak dapat menemukan apa pun di antara direktori pengguna di dalam Apache. Sepertinya tidak menawarkan fitur itu.Saya sarankan untuk melihat-lihat
suphp
atau PHP-FPM .Ini pada dasarnya akan memungkinkan penerjemah PHP untuk 'su' ke beberapa pengguna tertentu yang dikonfigurasi untuk VirtualHost itu. Itu akan memungkinkan Anda untuk menggunakan izin sistem file umum untuk mengisolasi setiap VirtualHost.
Saya akan merekomendasikan FPM untuk pertimbangan kinerja. Dari beranda inilah yang paling menarik bagi Anda:
sumber
Lihatlah ke dalam
chroot
.Beberapa poin awal:
Apache chroot dibuat sederhana
Lingkungan chroot untuk Apache (Debian)
Apache Chroot Jail: Hosting Virtual
sumber
/var/www
, dan semua host berada di subdirektori di sana, masing-masing subdirektori ini telah menghapus izin eksekusi / baca global?chroot
, dan Anda dapat melakukannya per server virtual. Ini sebuah contoh. Dalam hal ini, mereka menggunakanmod_chroot
.