Ada banyak alasan umum yang bagus untuk mengikuti minimalisme dalam hal izin, tetapi dalam konteks host web LAMP, beberapa alasan yang mudah diingat adalah
- Pada platform hosting bersama, pengguna lain yang berbagi host Anda sekarang dapat membaca dan menulis skrip Anda.
- Pada host khusus, proses nakal dapat membaca/menulis dan secara tidak sengaja menghapus file Anda. Katakanlah ada proses logging khusus yang berjalan di latar belakang sebagai pengguna tidak ada yang memiliki bug yang menyebabkannya mencoba
rm -rf /
. Sekarang secara umum ini tidak akan berbahaya karena hampir tidak akan ada file yang tidak boleh ditulis oleh siapa pun, tetapi proses jahat ini sekarang akan membawa file Anda bersamanya. - Untuk merusak situs web Anda, seseorang hanya perlu mendapatkan akses sebagai pengguna mana pun, misalnya
nobody
atau akun tiruan semacam itu. Umumnya, penyerang harus melakukan serangan eskalasi level pengguna lebih lanjut untuk sampai ke tempat di mana dia dapat melakukan beberapa kerusakan. Ini adalah ancaman nyata. Beberapa layanan non-kritis mungkin berjalan dengan akun dummy dan mungkin mengandung kerentanan.
Ini sangat meningkatkan profil kerentanan situs web Anda terhadap aktivitas berbahaya karena hanya perlu membobol satu akun.
Siapa pun yang mendapatkan akses ke sistem Anda dengan info masuk apa pun dapat melakukan apa pun yang mereka inginkan ke laman Anda, termasuk mengubahnya menjadi "Situs web ini benar-benar tidak aman, jadi tolong beri saya info kartu kredit Anda."
EDIT:(Untuk mengklarifikasi dan menanggapi komentar)
Banyak server memiliki lebih dari satu tujuan dalam hidup. Mereka menjalankan beberapa layanan. Jika Anda dengan hati-hati mengisolasi layanan tersebut dari satu sama lain dengan menetapkan masing-masing pengguna unik dan mengelola izin file yang sesuai, ya, Anda masih kesulitan jika seseorang mengkompromikan kredensial untuk sebuah akun, tetapi kerusakan yang dapat mereka lakukan terbatas pada satu layanan itu. . Jika Anda hanya memiliki satu akun generik dan menyetel seluruh sistem file ke 777, satu akun yang disusupi akan membahayakan semua yang ada di mesin.
Jika server Anda didedikasikan untuk hanya menjalankan Apache/PHP dan tidak melayani tujuan lain dalam hidup, dan hanya ada satu akun di mana Apache/PHP dijalankan, memiliki satu akun yang dikompromikan sama baiknya dengan seluruh mesin dikompromikan dari server. sudut pandang aplikasi Anda (walaupun Anda harus tetap memiliki file sistem yang dilindungi dan tidak dapat ditulisi oleh akun yang digunakan untuk menjalankan PHP... yang seharusnya hanya dapat dilakukan untuk akun admin/root).
Jika mereka dapat menulis sebuah file, dan file tersebut dapat dieksekusi, mereka dapat mengubahnya menjadi sesuatu yang dapat dieksekusi di mesin Anda (dapat dieksekusi atau skrip) dan kemudian menggunakan shell_exec PHP untuk menjalankan file yang dapat dieksekusi tersebut. Jika Anda dikonfigurasi untuk tidak mengizinkan shell_exec, mereka juga dapat mengubah konfigurasi Anda
Inilah satu skenario:
- Anda memiliki direktori tidak terlindungi yang dapat diunggah oleh pengguna.
- Mereka mengunggah dua file:skrip shell, dan file php yang memiliki
system()
memanggilnya ke skrip shell. - mereka mengakses skrip php yang baru saja mereka unggah dengan mengunjungi url di browser mereka, menyebabkan skrip shell dijalankan.
Jika direktori ini adalah 777, itu berarti siapa pun (termasuk pengguna apache, yang akan dieksekusi oleh skrip php) dapat menjalankannya! Jika bit eksekusi tidak disetel pada direktori itu dan mungkin file di dalam direktori, maka langkah 3 di atas tidak akan melakukan apa pun.
edit dari komentar:bukan izin file PHP yang penting, melainkan system()
panggil di dalam file PHP yang akan dieksekusi sebagai panggilan sistem linux oleh apache pengguna linux (atau apa pun yang Anda atur sebagai apache untuk dijalankan), dan di situlah bit eksekusi penting.