Apache, suexec, PHP, suPHP

12

Meskipun saya cukup nyaman sebagai pengguna Linux , Linux Admin-fu saya agak lemah. Jadi, saya di sini mencari panduan dengan server CentOS yang akan saya bangun.

Saya perlu menyiapkan server web Apache2 untuk beberapa klien kami. Saya ingin konten web setiap klien berada di bawah direktori home mereka ( USERDIRdi apache.conf, kan?) Untuk situs HTML statis. Saya ingin Apache dijalankan sebagai klien ( suexec?). Beberapa barang mereka adalah aplikasi PHP dan saya merasa saya ingin melihatnya suphpjuga.

Jadi pada dasarnya saya ingin terlihat seperti versi kecil dari perusahaan web hosting bersama. Mengingat betapa umum hal itu, saya pikir saya akan dengan mudah menemukan panduan How-To terkini yang bagus untuk mengatur semua ini tetapi sejauh ini saya hanya memiliki sedikit keberuntungan. Saya curiga kata pencarian saya tidak aktif.

Jadi pertanyaannya (jangan ragu untuk menjawab semua atau semua):

  1. Adakah yang memiliki beberapa tautan kuat ke panduan terkini / modern yang akan membantu saya mengatur ini semua? Tidak, situs dokumentasi apache bukan panduan ;-)
  2. Karena saya memiliki campuran situs statis dan aplikasi PHP, apakah saya ingin / perlu suexec dan suphp diinstal? Jika demikian, apakah itu menimbulkan tantangan yang harus saya waspadai?
  3. Haruskah saya melihat opsi lain daripada suexec dan suphp?

Saya berencana untuk memberikan kepada pengguna akhir akses SSH, SFTP atau SCP ke barang-barang mereka (jika itu mempengaruhi apa pun).

Terima kasih sebelumnya atas bantuan Anda.

[Sunting] Saya seharusnya menyebutkan ini sebelumnya: Salah satu tujuan utama dari pencarian saya untuk meniru penyedia hosting bersama yang terkait dengan izin dan kepemilikan file. Saya benar-benar harus menghindari mengajar pengguna tentang perlunya mengubah hal-hal seperti itu hanya untuk melihat penambahan / perubahan mereka.

Chris_K
sumber

Jawaban:

14

Menggunakan suexec dan suphp menegakkan jenis pemisahan hak istimewa yang berbeda dari standar.

Standarnya adalah untuk memisahkan izin pengguna dari server web. Artinya, pengguna memiliki file, dan ia harus memberikan izin server web untuk melihat dan mengubahnya.

Model suexec / suphp adalah bahwa server web (saat menjalankan skrip) berjalan di bawah akun pengguna, sehingga situs web memiliki izin untuk melakukan apa pun yang diizinkan oleh pengguna. Untuk tingkat tertentu, ini menghapus pemisahan antara pengguna dan server web, tetapi sebagai gantinya itu memberlakukan pemisahan BERBEDA: yaitu, antara situs web satu pengguna dan situs web pengguna yang berbeda pada kotak yang sama.

Secara default, PHP selalu berjalan di bawah akun pengguna Apache, sehingga skrip PHP satu situs web dapat mengakses file apa pun yang bisa skrip PHP situs lain. Karenanya, jika satu akun di server diretas, infeksi dapat menyebar ke yang lain. SuPHP mencegah ini.

Baik suexec maupun suphp tidak akan memengaruhi cara apache menyajikan konten statis . Semua aturan lama masih berlaku. Sebagai gantinya, suexec dan suphp mengubah akun yang menjalankan CGI dan PHP (masing-masing). Suexec membuat CGI dapat dieksekusi berjalan di bawah akun pemilik, sementara SuPHP membuat skrip PHP dijalankan di bawah akun pemilik.

Suexec dan SuPHP belum tentu lebih baik . Mereka hanya berbeda . Mereka tidak akan mencegah peretasan situs web (dan mungkin bisa membuat situs lebih mudah diretas ), tetapi mereka akan mencegah kompromi pada satu situs dari menyebar ke yang lain. Bagi administrator situs, isolasi ini bisa dibilang lebih penting, itulah sebabnya beberapa sistem hosting bersama menjadikan suexec dan mendukung standar.

Salah satu "gotcha" yang sangat umum adalah SuPHP memeriksa kepemilikan dan izin skrip sebelum dijalankan, dan akan mengembalikan 500 kesalahan jika izin tidak sesuai.

Khususnya:

  • Pemilik dan grup file harus cocok dengan pemilik situs web (sebagai pengaturan dalam konfigurasi apache)
  • File tidak boleh ditulis oleh dunia
  • Direktori induk tidak boleh bisa ditulis oleh dunia
tylerl
sumber
Jadi, mengetahui bahwa saya ingin meniru model hosting bersama (seperti yang Anda tunjukkan, menjaga pengguna dari satu sama lain) adalah model suexec / suphp seperti yang saya inginkan atau apakah Anda merasa ada pilihan yang lebih baik? Saya juga telah mengedit posting untuk menunjukkan bahwa satu tujuan utama adalah untuk menghindari mengajari pengguna tentang harus memodifikasi izin atau pemilik file hanya untuk melihat perubahan atau penambahan mereka.
Chris_K
2
suexec / suphp adalah solusi yang bagus untuk apa yang Anda cari.
tylerl
Saya lebih suka suphp daripada suexec. Lebih aman menurut saya.
Vladislav Rastrusny
@FractalizeR: Biasanya Anda menggunakan keduanya secara bersamaan. SuPHP untuk PHP, suexec untuk CGI. Anda dapat menjalankan PHP melalui suexec dengan menjalankan PHP sebagai CGI, tetapi itu sedikit tidak perlu karena ada pilihan PHP yang lebih baik (lebih aman, lebih efisien).
tylerl
@tylerl: Terima kasih banyak atas jawaban Anda. Apa solusi yang lebih aman / efisien untuk PHP yang Anda maksud?
benjamin