Mengapa tidak / var / www memiliki chmod 777

67

Saat mengembangkan halaman di localhost, saya terkadang mendapatkan kesalahan "Izin ditolak" yang bisa saya selesaikan dengan menjalankan chmod -R 777 /var/www. Namun, orang-orang mengatakan kepada saya bahwa ini adalah ide yang buruk untuk alasan keamanan.

Mengapa tidak /var/wwwmemiliki chmod 777?

Luis Alvarado
sumber
Saya ingin merekomendasikan utas ini di atas @ serverfault.com. Itu pekerjaan yang baik untuk memberikan contoh pengaturan untuk apache2 dan izin. serverfault.com/q/6895/57036 PS Saya tidak bisa berkomentar, jadi saya harus menambahkannya sebagai jawaban.
MystaMax

Jawaban:

81

777 adalah izin yang buruk secara umum dan saya akan tunjukkan alasannya.

Meskipun terlihat seperti di Kasino atau Las Vegas, 777 tidak berarti jackpot untuk Anda. Sebaliknya, jackpot untuk siapa saja yang ingin memodifikasi file Anda. 777 (dan sepupunya yang jelek 666) memungkinkan izin Baca dan Tulis (dan dalam kasus 777, Jalankan) ke yang lain . Anda dapat mempelajari lebih lanjut tentang cara kerja izin file , tetapi singkatnya ada tiga grup izin: pemilik, grup, dan lainnya . Dengan menetapkan izin ke 6 atau 7 ( rw-atau rwx) untuk orang lain, Anda memberi pengguna mana pun kemampuan untuk mengedit dan memanipulasi file dan folder tersebut. Biasanya, seperti yang bisa Anda bayangkan, ini buruk untuk keamanan.

Inilah contoh saya:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

Sejauh ini saya telah membuat folder dan membuat file dengan izin "buruk" (777 dan 666). Sekarang saya akan beralih ke pengguna lain dan mencoba memanipulasi file-file itu.

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

Sebagai pengguna "jahat" ini saya dapat menempatkan file ke direktori dan menyuntikkan teks ke file yang sudah ada. Sedangkan di bawah ini, dalam direktori dengan 755 dan file dengan 644, saya dapat melihat di dalam file dan direktori tetapi saya tidak dapat mengedit file atau membuat yang baru:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

Untuk izin Apache, Anda ingin tetap menggunakan 0755 dan 0644 (AKA umask 022) untuk masing-masing folder dan file. Ini memungkinkan Anda, sebagai pemilik file, untuk mengedit dan memanipulasi mereka sambil memberi Apache tingkat akses minimum yang diperlukan untuk beroperasi.

Marco Ceppi
sumber
13
Saya minta maaf atas bahasanya tetapi ini adalah jawaban yang tepat. Marco terima kasih
Luis Alvarado
Bagaimana jika Anda hanya membuat pengguna untuk orang-orang yang diizinkan untuk mengelola folder / var / www secara bebas? Saya menggunakan Mesin Virtual khusus untuk setiap server web yang saya jalankan, dan saya ingin tahu apakah masih benar bahwa Anda harus sangat berhati-hati.
UrkoM
1
@UrkoM Anda tidak pernah bisa terlalu berhati-hati. Jika Anda ingin orang lain mengakses file yang sama, Anda dapat menambah izin grup ke 6/7 (0664/0775) dan menambahkan setiap pengguna ke grup itu. Meskipun pengaturan ini (dan yang saya jelaskan dalam jawaban saya) tidak memenuhi setiap kriteria, saya akan mengatakan 90% baik dari waktu 0755/0644 adalah izin yang ingin Anda gunakan. Jika Anda hanya memiliki "satu pengguna" sistem maka risiko memiliki lain dengan hak akses menulis tidak seperti banyak risiko.
Marco Ceppi
4
@UrkoM Hal lain yang perlu dipertimbangkan adalah bahwa ada banyak "pengguna" yang tidak mewakili orang sungguhan tetapi ada sehingga layanan tertentu dapat berjalan dengan kemampuan yang berkurang (terutama karena alasan keamanan, tetapi juga untuk mengurangi kerusakan yang dapat terjadi dari bug stabilitas). Melihat isi /etc/passwddan Anda akan melihat pengguna seperti mail, news, dan nobody. Bahkan jika tidak apa-apa bagi semua pengguna manusia nyata dari sistem Anda untuk dapat mengubah konten /var/www, itu tidak berarti Anda ingin semua proses berjalan karena pengguna "buatan" ini dapat melakukannya.
Eliah Kagan
1) Sebagai jawaban sesederhana mungkin. Tidak menjelaskan bagaimana Apache atau Nginx dapat memanipulasi folder atau file. Apache atau Nginx adalah server, sehingga aplikasi, mereka bukan pengguna "jahat" Anda, mereka tidak bisa mengetik ls -lah, touch badatau perintah lainnya. Bagaimana mereka bisa memanipulasi folder dan file? 2) Warisan. Anda tidak mencakup warisan apa pun antara folder dan file di dalamnya. Setidaknya ada 2-3 langkah sebelum file: /var, /var/www, /var/www/project. Izin pengguna / grup apa yang seharusnya /vardimiliki? Izin pengguna / grup apa yang seharusnya /var/wwwdimiliki? Dan seterusnya. Bagaimana mereka bekerja sama?
Hijau
15

Pada dasarnya, memiliki izin 777 tidak akan membuat Anda diretas sendiri, tetapi jika seseorang mendapatkan tumpuan di mana saja, itu dapat digunakan untuk meningkatkan izin dan mendapatkan kontrol penuh atas komputer Anda. Bagian terburuknya adalah izin Anda menggunakan "7" - itu artinya membaca, menulis, dan mengeksekusi izin.

Katakanlah seorang peretas ingin mengambil alih komputer Anda. Dia mungkin terhubung ke komputer Anda menggunakan browser web, menghubungkan ke http://yourcomputer.example.com:80/. Jika Anda memiliki halaman yang tersedia yang memungkinkannya mengunggah gambar, ia dapat mengganti nama yang dapat dieksekusi untuk diakhiri dengan ".jpg" dan mengunggahnya ke server Anda. Sekarang dia mencari file itu di browser webnya dan menjalankannya, karena linux tidak peduli dengan ekstensi, itu hanya melihat bahwa itu adalah file yang dapat dieksekusi. Itu mungkin tidak membuatnya banyak, tetapi karena itu berjalan sama sekali, ia tahu itu berjalan sebagai pengguna apache. Dia kemudian mengunggah versi modifikasi yang akan mengedit file konfigurasi apache, memberinya lebih banyak akses - katakanlah sehingga apache akan menampilkan konten / etc / passwd. Dia kemudian dapat menggunakan informasi itu untuk melihat apa yang ada di sistem. Dia kemudian dapat terhubung menggunakan ssh dan mencoba kata sandi umum untuk login sebagai pengguna tersebut - jika itu tidak berhasil, dia akan meningkatkan penggunaan serangan brute-force penuh. Jika dia masuk sebagai pengguna dengan akses sudo,

Sekarang, Anda mungkin mengatakan itu tidak mungkin, atau bahwa itu bukanlah cara kerja peretas yang sebenarnya. Itu benar, tetapi intinya adalah bahwa dengan mengatur file menjadi chmod 777, Anda telah membuka lubang keamanan yang dapat digunakan oleh peretas namun ia mau.

Jika Anda mengikuti Prinsip privilege paling tidak , maka lubang itu tidak terjadi, dan sistem Anda jauh lebih sulit untuk diretas. Meskipun lebih sulit untuk melakukan hal-hal dengan benar, Anda tetap harus melakukan segala upaya untuk melakukannya.

ImaginaryRobots
sumber
+1 untuk "toehold" dan "escalate". Menjelaskan konsep dengan baik.
Kari Kääriäinen
3
Bisakah Anda jelaskan bagaimana file yang disamarkan sebagai jpg dapat dieksekusi di server?
Anurag Peshne