Pertanyaan Mengapa "chmod -R 777 /" merusak?


Ini adalah sebuah Pertanyaan Kanonis tentang Izin File dan Mengapa 777 "merusak".

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

Jika Anda pernah menjalankan perintah ini Anda cukup banyak segera hancurkan 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 yang cepat di terminal, tiba-tiba saya sekarang memiliki akses yang baik ... mengapa itu menyebabkan Linux putus?


246
2018-02-28 21:25




Saya sudah menahan nafas ketika saya melihat pertanyaan ini. - Alireza Savand


Jawaban:


Pertama-tama terminologi nitpick minor: chmod tidak menghapus perizinan. Saya t PERUBAHAN mereka.


Sekarang daging masalah - Modus 777 berarti "Siapa pun dapat membaca, menulis, atau mengeksekusi file ini" - Anda memilikinya diberi 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.
    • Cium kata sandi keamanan selamat tinggal (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 hanya bisa menulis yang baru login program yang memungkinkan mereka di setiap waktu).
    • Ciumlah file Anda selamat tinggal: Satu pengguna salah arah rm -r / dan semuanya berakhir. OS diberitahu untuk membiarkan mereka melakukan apa pun yang mereka inginkan!
  2. Anda telah membuat kesal setiap program yang memeriksa izin pada file sebelum memulai.
    sudo, sendmail, dan sejumlah orang lain tidak akan memulai lagi. Mereka akan memeriksa izin file kunci, melihat mereka bukan apa yang seharusnya, dan menendang kembali pesan kesalahan.
    Demikian pula ssh akan rusak secara mengerikan (file kunci harus memiliki izin khusus, jika tidak mereka "tidak aman" dan secara default SSH akan menolak untuk menggunakannya.)
  3. Anda telah menghapus bit setuid / setgid pada program yang memilikinya.
    Modusnya 777 sebenarnya 0777. Di antara hal-hal di digit utama itu adalah setuid dan setgid bit.
    Kebanyakan program yang setuid / setgid memiliki bit set karena harus dijalankan dengan hak istimewa tertentu. Mereka rusak sekarang.
  4. Anda sudah rusak /tmp dan /var/tmp Hal lain dalam digit oktal utama yang mendapat angka nol adalah sticky bit - Itu yang melindungi file /tmp (dan /var/tmp) agar tidak dihapus oleh orang yang tidak memilikinya.
    Ada (sayangnya) banyak skrip yang berperilaku buruk di luar sana yang "membersihkan" dengan melakukan suatu rm -r /tmp/*, dan tanpa sedikit lengket /tmp  Anda dapat mencium semua file di direktori itu selamat tinggal.
    Memiliki file awal hilang benar-benar dapat mengganggu beberapa program yang ditulis dengan buruk ...
  5. Anda telah menyebabkan kerusakan /dev  /proc dan filesystem serupa
    Ini lebih merupakan masalah pada sistem Unix yang lebih tua di mana /devadalah filesystem yang nyata, dan hal-hal yang dikandungnya adalah file-file khusus yang dibuat mknod, karena perubahan izin akan dipertahankan di seluruh reboot, tetapi pada sistem apa pun yang mengubah perizinan perangkat Anda dapat menyebabkan masalah besar, dari risiko keamanan yang jelas (semua orang dapat membaca setiap TTY) hingga penyebab potensi yang kurang jelas dari kepanikan kernel.
    Credit to @Tonny for pointing out this possibility
  6. Soket dan Pipa mungkin rusak, atau ada masalah lain Soket dan pipa dapat putus sepenuhnya, atau terkena suntikan berbahaya karena dibuat dapat ditulisi oleh dunia.
    Credit to @Tonny for pointing out this possibility
  7. Anda telah membuat setiap file di sistem Anda dapat dieksekusi
    Banyak orang . di dalam mereka PATH variabel lingkungan (Anda seharusnya tidak!) - Ini dapat menyebabkan kejutan yang tidak menyenangkan karena sekarang siapa pun dapat meletakkan file dengan mudah dinamai seperti perintah (misalnya make atau ls, dan memiliki kesempatan untuk membuat Anda menjalankan kode jahat mereka.
    Credit to @RichHomolka for pointing out this possibility
  8. Pada beberapa sistem chmod akan mengatur ulang Daftar Kontrol Akses (ACL)
    Ini berarti Anda mungkin harus membuat ulang semua ACL Anda selain memperbaiki izin di mana-mana (dan merupakan contoh nyata 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 waktu berikutnya Anda perlu meluncurkan program, atau memulai kembali layanan, atau surga melarang REBOOT kotak yang Anda gunakan untuk dunia yang terluka karena # 2 dan # 3 di atas akan memunculkan kepala jelek mereka.


335
2018-02-28 21:46



Setidaknya pada beberapa sistem /tmp akan diperbaiki setelah reboot. Meskipun banyak hal lain tampaknya rusak. Setidaknya di VM saya hanya diuji di atasnya tampaknya reboot diperbaiki /tmp perizinan. Pasti ada sesuatu di skrip startup di suatu tempat. - Zoredache
@Zoredache Systems yang digunakan tmpfs biasanya memperbaiki diri, yang memiliki / tmp pada disk mungkin (tergantung pada skrip startup mereka) - voretaq7
+1 untuk menunjukkan bahwa setuid dan setgid akan dihilangkan. Ini adalah aspek yang sangat merusak. Coba jalankan find / -perms -4000 -type f dan find / -perms -2000 -type f untuk melihat berbagai binari yang bergantung pada bendera ini. - Kyle Smith
Mengetik sesuatu seperti "kurang foo.txt" tidak akan mengeksekusi file bernama less.txt yang diletakkan di sekitar terlepas dari bit eksekusi yang ditetapkan. Anda harus memiliki direktori less.txt di jalur Anda dan Anda harus mengetikkan "less.txt foo.txt" - bukan benar-benar hal yang tidak disengaja di sana. Bahkan jika Anda menggunakan shell completion, 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
@Deji everyone didefinisikan sebagai penyatuan kumpulan termasuk pengguna yang memiliki file, pengguna dalam grup 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 mana saya biasanya akan mengalaminya, tetapi juga termasuk akses melalui formulir web / CGI yang menulis data ke disk: The www pengguna sekarang dapat menulis ke file apa pun di sistem, yang berarti pengunjung acak juga bisa.) - voretaq7


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

Jadi itu tidak benar-benar bahwa sistem dihancurkan - itu banyak alat yang dirancang untuk segera gagal ketika perizinan yang 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 sistemnya tidak benar-benar mati, hanya tidak bisa digunakan oleh-desain.


100
2018-02-28 21:33