Mengapa "chmod -R 777 /" destruktif?

255

Ini adalah Pertanyaan Canonical tentang Izin File dan Mengapa 777 "destruktif".

Saya tidak bertanya bagaimana memperbaiki masalah ini, karena ada banyak referensi yang sudah ada di Server Fault (instal ulang OS). Mengapa itu melakukan sesuatu yang merusak sama sekali?

Jika Anda pernah menjalankan perintah ini, Anda akan segera menghancurkan sistem operasi Anda. Saya tidak jelas mengapa menghapus pembatasan berdampak pada proses yang ada. Sebagai contoh, jika saya tidak memiliki akses baca ke sesuatu dan setelah kesalahan ketik cepat di terminal tiba-tiba saya sekarang memiliki akses dengan baik ... mengapa itu menyebabkan Linux rusak?

samwise
sumber
2
Saya menahan nafas ketika saya melihat pertanyaan ini.
Alireza Savand

Jawaban:

344

Pertama-tama, istilah kecil nitpick: chmodtidak menghapus izin. Ini MENGUBAH mereka.


Sekarang daging masalah - Mode ini 777berarti "Siapa pun dapat membaca, menulis atau mengeksekusi file ini" - Anda telah memberikan izin bagi siapa saja untuk melakukan (secara efektif) apa pun yang mereka inginkan.

Sekarang, mengapa ini buruk?

  1. Anda baru saja membiarkan semua orang membaca / memodifikasi setiap file di sistem Anda.
    • Ciuman selamat tinggal kata sandi keamanan (siapa pun dapat membaca file bayangan dan memecahkan kata sandi Anda, tetapi mengapa repot-repot? GANTI kata sandi! Jauh lebih mudah!).
    • Cium keamanan untuk binari Anda, selamat tinggal (seseorang bisa saja menulis loginprogram baru yang memungkinkannya setiap saat).
    • Cium selamat tinggal file Anda: Satu pengguna salah arah rm -r /dan semuanya berakhir. OS diberitahu untuk membiarkan mereka melakukan apa pun yang mereka inginkan!
  2. Anda telah mengecewakan setiap program yang memeriksa izin pada file sebelum memulai.
    sudo,, sendmaildan sejumlah orang lain tidak akan memulai lagi. Mereka akan memeriksa izin file utama, melihat mereka tidak seperti yang seharusnya, dan menendang kembali pesan kesalahan.
    Demikian pula sshakan rusak parah (file kunci harus memiliki izin khusus, kalau tidak mereka "tidak aman" dan secara default SSH akan menolak untuk menggunakannya.)
  3. Anda telah menghapus bit setuid / setgid pada program yang memilikinya.
    Mode 777sebenarnya . Di antara hal-hal dalam digit terdepan itu adalah bit dan . Sebagian besar program yang setuid / setgid memiliki set bit itu karena harus dijalankan dengan hak istimewa tertentu. Mereka rusak sekarang.0777setuidsetgid
  4. Anda telah melanggar /tmpdan/var/tmp Hal lain dalam digit oktal utama yang mendapat nol adalah sticky bit- Bahwa yang melindungi file di /tmp(dan /var/tmp) dari dihapus oleh orang-orang yang tidak memilikinya.
    Ada (sayangnya) banyak skrip berperilaku buruk di luar sana yang "membersihkan" dengan melakukan rm -r /tmp/*, dan tanpa bit lengket yang ditetapkan pada /tmp Anda dapat mencium semua file dalam direktori selamat tinggal.
    Kehilangan file awal dapat benar-benar mengganggu beberapa program yang ditulis dengan buruk ...
  5. Anda telah menyebabkan kekacauan /dev /procdan sistem file serupa.
    Ini lebih merupakan masalah pada sistem Unix lama di mana sistem /devfile nyata, dan hal-hal yang ada di dalamnya adalah file khusus yang dibuat mknod, karena perubahan izin akan dipertahankan di seluruh reboot, tetapi pada sistem apa pun mengubah izin perangkat Anda dapat menyebabkan masalah besar, dari risiko keamanan yang jelas (semua orang dapat membaca setiap TTY) hingga potensi penyebab panik kernel yang kurang jelas.
    Credit to @Tonny for pointing out this possibility
  6. Soket dan Pipa dapat pecah, atau memiliki masalah lain Soket dan pipa dapat pecah seluruhnya, atau terpapar dengan injeksi berbahaya sebagai hasil dari yang dapat ditulis dunia.
    Credit to @Tonny for pointing out this possibility
  7. Anda telah membuat setiap file di sistem Anda dapat dieksekusi
    . Banyak orang memiliki variabel lingkungan .mereka PATH(Anda tidak seharusnya!) - Ini dapat menyebabkan kejutan yang tidak menyenangkan karena sekarang siapa pun dapat menjatuhkan file yang dinamai seperti perintah (katakan makeatau ls, dan mencoba membuat Anda menjalankan kode berbahaya mereka.
    Credit to @RichHomolka for pointing out this possibility
  8. Pada beberapa sistem chmodakan mengatur ulang Daftar Kontrol Akses (ACL)
    Ini berarti Anda mungkin harus membuat kembali semua ACL Anda selain memperbaiki izin di mana-mana (dan merupakan contoh aktual dari perintah yang merusak).
    Credit to @JamesYoungman for pointing out this possibility

Akankah bagian-bagian dari sistem yang sudah berjalan terus berjalan? Mungkin, setidaknya untuk sementara waktu.
Tetapi lain kali Anda perlu meluncurkan program, atau memulai kembali layanan, atau surga melarang REBOOT kotak Anda berada dalam dunia yang terluka karena # 2 dan # 3 di atas akan memundurkan kepala jelek mereka.

voretaq7
sumber
1
Setidaknya pada beberapa sistem /tmpakan diperbaiki setelah reboot. Meskipun semuanya banyak hal lainnya tampaknya rusak. Setidaknya di VM saya baru saja mengujinya muncul reboot memperbaiki /tmpizin. Pasti ada sesuatu di skrip startup di suatu tempat.
Zoredache
@Zoredache Sistem yang menggunakan tmpfsbiasanya memperbaiki sendiri, yang memiliki / tmp pada disk mungkin (tergantung pada skrip startup mereka)
voretaq7
45
+1 untuk menunjukkan bahwa setuid dan setgid akan dihilangkan. Ini adalah aspek yang sangat merusak. Coba jalankan find / -perms -4000 -type fdan find / -perms -2000 -type flihat berbagai binari yang bergantung pada flag-flag ini.
Kyle Smith
2
Mengetikkan sesuatu seperti "less foo.txt" tidak akan mengeksekusi file yang disebut less.txt tergeletak terlepas dari bit eksekusi yang sedang diatur. Anda harus memiliki direktori less.txt berada di jalur Anda dan Anda harus mengetikkan "less.txt foo.txt" - bukan sesuatu yang kebetulan di sana. Bahkan jika Anda menggunakan penyelesaian shell, itu akan berhenti kurang dan Anda masih harus menambahkan .txt. Untuk memanggil file teks acak dengan bit yang dapat dieksekusi, Anda harus ./nameoffile.txt.
The Real Bill
3
@Deji everyonedidefinisikan sebagai penyatuan set termasuk pengguna yang memiliki file tersebut, pengguna dalam kelompok yang memiliki file, dan pengguna yang tidak memenuhi salah satu dari kriteria tersebut (secara harfiah tiga digit izin oktal: User, Group, dan Other). Dengan kata lain setiap pengguna dengan akses ke sistem . ("Akses" dalam konteks ini bisa berupa akun shell, yang biasanya saya atasi, tetapi juga mencakup akses melalui formulir web / CGI yang menulis data ke disk: wwwPengguna sekarang dapat menulis ke file apa pun di sistem , yang berarti pengunjung acak juga bisa.)
voretaq7
102

Satu hal utama adalah bahwa ada banyak alat seperti ssh / sudo yang memeriksa izin sistem file untuk file konfigurasi kunci. Jika izin salah, alat ini dirancang untuk gagal, karena ini akan menunjukkan masalah keamanan yang serius. Pada sistem pengujian Debian saya dan mungkin pada orang lain, kemampuan untuk masuk gagal, mungkin karena biner masuk atau sesuatu dalam PAM memiliki pemeriksaan izin.

Jadi sebenarnya bukan sistem yang dihancurkan - melainkan banyak alat yang dirancang untuk segera gagal saat izin salah.

Jika Anda me-reboot sistem setelah melakukan chmod 777 -R /itu akan boot, dan Anda dapat memulai proses yang tidak memiliki pemeriksaan izin eksplisit. Jadi sistem ini tidak benar-benar mati, hanya desain yang agak tidak dapat digunakan .

Sakit kepala
sumber