Ringkasan yang Diperbarui
Direktori / var / www dimiliki oleh root:root
yang berarti tidak ada yang dapat menggunakannya dan sepenuhnya tidak berguna. Karena kita semua menginginkan server web yang benar-benar berfungsi (dan tidak seorang pun harus masuk sebagai "root"), maka kita perlu memperbaikinya.
Hanya dua entitas yang membutuhkan akses.
PHP / Perl / Ruby / Python semua memerlukan akses ke folder dan file karena mereka membuat banyak dari mereka (yaitu
/uploads/
). Bahasa skrip ini harus berjalan di bawah nginx atau apache (atau bahkan beberapa hal lain seperti FastCGI untuk PHP).Pengembang
Bagaimana mereka mendapatkan akses? Saya tahu seseorang, di suatu tempat telah melakukan ini sebelumnya. Namun dengan miliaran situs web di luar sana Anda akan berpikir bahwa akan ada lebih banyak informasi tentang topik ini.
Saya tahu bahwa 777 adalah izin baca / tulis / eksekusi penuh untuk pemilik / grup / lainnya. Jadi ini tampaknya tidak diperlukan dengan benar karena memberikan izin penuh kepada pengguna secara acak.
Izin apa yang perlu digunakan /var/www
agar:
- Kontrol sumber seperti git atau svn
- Pengguna dalam grup seperti "situs web" ( atau bahkan ditambahkan ke "www-data" )
- Server seperti apache atau lighthttpd
- Dan PHP / Perl / Ruby
dapatkah semua membaca, membuat, dan menjalankan file (dan direktori) di sana?
Jika saya benar, Ruby dan skrip PHP tidak "dieksekusi" secara langsung - tetapi diteruskan ke penerjemah. Jadi tidak perlu untuk mengeksekusi izin pada file di /var/www
...? Oleh karena itu, tampaknya seperti izin yang benar akan chmod -R 1660
yang akan membuat
- semua file dapat dibagikan oleh empat entitas ini
- semua file tidak dapat dieksekusi karena kesalahan
- blokir semua orang dari direktori sepenuhnya
- atur mode izin ke "sticky" untuk semua file di masa depan
Apakah ini benar?
Pembaruan 1: Saya baru menyadari bahwa file dan direktori mungkin memerlukan izin yang berbeda - Saya berbicara tentang file di atas jadi saya tidak yakin apa yang harus menjadi izin direktori.
Pembaruan 2: Struktur folder /var/www
perubahan secara drastis karena salah satu dari empat entitas di atas selalu menambahkan (dan terkadang menghapus) folder dan sub folder dalam banyak level. Mereka juga membuat dan menghapus file yang mungkin memerlukan akses baca / tulis 3 entitas lainnya. Oleh karena itu, izin harus melakukan empat hal di atas untuk file dan direktori. Karena tidak satu pun dari mereka yang perlu menjalankan izin (lihat pertanyaan tentang ruby / php di atas) Saya akan berasumsi bahwa rw-rw-r--
izin akan menjadi semua yang diperlukan dan sepenuhnya aman karena keempat entitas ini dijalankan oleh personel tepercaya (lihat # 2) dan semua pengguna lain di sistem hanya memiliki akses baca.
Pembaruan 3: Ini untuk mesin pengembangan pribadi dan server perusahaan swasta. Tidak ada "pelanggan web" acak seperti host bersama.
Pembaruan 4: Artikel ini oleh slicehost tampaknya menjadi yang terbaik dalam menjelaskan apa yang diperlukan untuk mengatur izin untuk folder www Anda. Namun, saya tidak yakin apa yang dijalankan pengguna atau grup apache / nginx dengan PHP OR svn / git dan bagaimana cara mengubahnya.
Pembaruan 5: Saya telah (saya pikir) akhirnya menemukan cara agar semua ini berfungsi (jawaban di bawah). Namun, saya tidak tahu apakah ini cara yang benar dan AMAN untuk melakukan ini. Karena itu saya sudah mulai mendapat hadiah. Orang yang memiliki metode terbaik untuk mengamankan dan mengelola direktori www menang.