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. Aliasingrm
kerm -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 darirm
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? Sejakrm
tidak benar-benar menghapus apa pun (melakukan banyak panggilan keunlink(2)
danrmdir(2)
berdasarkan argumen), tidak akan ada cara bagi kernel untuk mendeteksirm
itu benar-benar mengincar/
sampai saatnya benar-benar datang untuk menghapusnya. Sejak satu-satunya panggilan kermdir(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 darirm
kegunaan. GNUrm
menolak untuk mengeksekusirm -rf /
jika--preserve-root
opsi diberikan, yang telah menjadi default sejak versi 6.4 dari GNU Core Utilities dirilis pada tahun 2006.