GNU/Linux >> Belajar Linux >  >> Linux

Mengapa 'rm -rf /' yang mengerikan bahkan diizinkan?

Mengapa tidak ada perlindungan seperti itu di perintah rm?

Sudah ada tiga perlindungan:

  • -r switch, yang tanpanya direktori tidak dapat dihapus.
  • -i switch, yang memverifikasi bahwa Anda benar-benar ingin menghapus apa yang Anda minta untuk dihapus. Aliasing rm ke rm -i mengaktifkan pengaman itu kecuali Anda menambahkan -f alihkan untuk mematikannya.
  • Kepemilikan file, yang mencegah semua pengguna kecuali root dari menghapus direktori root.

Perangkat Unix seperti gergaji mesin:dirancang untuk melakukan hal-hal yang sangat kuat dan digunakan oleh orang-orang yang mengerti apa yang mereka lakukan. Mereka yang melangkah sembarangan cenderung berakhir dengan melukai diri sendiri. Ini bukan untuk mengatakan bahwa yang berpengalaman tidak membuat kesalahan, dan jelas Sun dan yang lainnya merasa bahwa pengguna dengan root perlu dilindungi dari diri mereka sendiri.

Namun bukankah seharusnya kasus khusus ini menjadi pengecualian untuk aturan itu?

Orang-orang bertanya mengapa kami tidak bisa memasang pelindung pisau di atas rm gergaji mesin setidaknya sejak 1980-an. (Mungkin lebih lama, tetapi riwayat saya dengan Unix tidak lebih dari itu.) Anda harus bertanya pada diri sendiri lebih banyak pertanyaan:

  • Karena kami menambahkan pengecualian, apa lagi yang harus dianggap suci? Haruskah kita mencegah penghapusan rekursif apa pun di direktori root untuk menghindari kesalahan yang sama-sama menghancurkan seperti rm -rf /* ? Bagaimana dengan direktori home pengguna? Bagaimana dengan /lib atau /bin ? Apakah kita harus memiliki versi khusus dari rm untuk mencegah kesalahan ini pada sistem dengan tata letak sistem file nontradisional?

  • Di mana kita menempatkan penegakan larangan ini? Hanya di rm atau apakah kita memberikan kernel pekerjaan itu? Sejak rm tidak benar-benar menghapus apa pun (melakukan banyak panggilan ke unlink(2) dan rmdir(2) berdasarkan argumen), tidak akan ada cara bagi kernel untuk mendeteksi rm itu benar-benar mengincar / sampai saatnya benar-benar datang untuk menghapusnya. Sejak satu-satunya panggilan ke rmdir(2) yang akan berhasil adalah ketika direktori target kosong, mencapai titik itu dengan / berarti sistem sudah selesai.


Tergantung distribusinya. Linux lama yang saya gunakan saat ini mengizinkannya (menurut saya, belum mengujinya :-) ) dan menyatakan dalam man rm :

   --no-preserve-root do not treat '/' specially (the default)

   --preserve-root
          fail to operate recursively on '/'

Pada banyak distribusi terbaru, Anda perlu menambahkan --no-preserve-root secara eksplisit untuk menonaktifkan perlindungan. Jika tidak, eksekusi akan gagal.

Mengenai Ubuntu, lihat masalah ini di mana perilaku ini dibahas.

Sejarah perlindungan ini menurut Wikipedia:

Sun Microsystems memperkenalkan rm -rf / perlindungan di Solaris 10, pertama kali dirilis pada tahun 2005. Setelah menjalankan perintah, sistem sekarang melaporkan bahwa penghapusan / tidak diizinkan. Tak lama kemudian, fungsionalitas yang sama diperkenalkan ke dalam versi FreeBSD dari rm kegunaan. GNU rm menolak untuk mengeksekusi rm -rf / jika --preserve-root opsi diberikan, yang telah menjadi default sejak versi 6.4 dari GNU Core Utilities dirilis pada tahun 2006.


Linux
  1. Bagaimana Cara Menginstal R 3.3.1 Di Direktori Sendiri?

  2. Mengapa '~' Dipilih Untuk Mewakili Direktori Rumah?

  3. Linux – Mengapa Direktori Root Dilambangkan Dengan A / Sign?

  1. Mengapa Saya Tidak Dapat Menggunakan Cd Dalam Skrip Bash??

  2. Rsync Apakah Mengubah Izin Direktori?

  3. Mengapa direktori root dilambangkan dengan tanda /?

  1. Mengapa Server Memblokir IP Saya?

  2. Cara Tercepat Untuk Mengekstrak Iso?

  3. Menggunakan –exclude Dengan Perintah Du?