John Beck weblog-jában tűnt fel egy érdekes írás, amelynek címe: ``rm -rf /'' protection. Aki dolgozott már Unix(-szerű) rendszerekkel az tudja, hogy az ``rm -rf /'' parancs kiadásával a rendszer teljes pusztulását elő lehet (akár nem szándékosan, hanem véletlenül is) idézni.
(Kezdőknek: a ``/'' a root könyvtár, -f kapcsoló azt jelenti, hogy force, azaz felülbírál minden figyelmeztetést, a -r pedig azt jelenti, hogy rekurzívan töröl, magyarul addig, amíg az (leegyszerűsítve) egész filerendszert el nem távolítja)
A Solaris fejlesztők egy péntek délután olyan horror sztorikat meséltek egymásnak, amelyben az ``rm -rf /'' volt a főszereplő. Ekkor az egyikük feltette a kérdést: ``miért nem javítjuk ki az rm-et?''
John Beck megpatchelte az rm parancsot, amelynek ez lett a következménye:
#/bin/rm -rf /
#rm of / is not allowed
A Solaris 10 (a build 36-tól kezdve) már úgy fog működni, hogy sok-sok évnyi hagyomány után az rm paranccsal nem lehet majd a ``/''-t töröli.
``És ennek mi köze a FreeBSD-hez?''
Nézzük:Giorgos Keramidas-nak megtetszett a Solaris fejlesztők ötlete, és gyorsan meg is patchelte a FreeBSD rm(1) parancsot. A bejelentésből egy hosszú vita lett. Voltak akik nagyszerű ötletnek tartották a patchet, és voltak a fundamentalisták, akik szerint ez az ősi UNIX működés ellen való vétség, a UNIX különben sem Windows, és nem lenne szabad commit-olni.
A szerző szerint a patch-nek van értelme, hiszen elegendő véletlenül egy szóközt ütni egy amúgy biztonságos parancsban, máris kész a baj:
# rm -fr / home/someuser/*
Valaki egyetértett, mondván, hogy akár egy rosszul megírt cron job is okozhat katasztrófát. Valaki szerint az ``rm -rf /'' helyett lehetne használni a ``newfs'' parancsot. Volt aki nem értett egyet a dologgal, mondván, hogy a UNIX azért jó, mert ha ``lábon akarod magad lőni'', akkor azt is megteheted. Szerinte ha valaki biztonsági öveket akar építeni a FreeBSD-be, akkor azt tegye opcionálissá.
Más szerint már most is vannak ilyen biztonsági övek, például nem lehet newfs-t csinálni egy mountolt / partíción.
Volt aki szerint ezt nem az rm parancsban, hanem shell szinten kell megoldani. Egyelőre nincs döntés az ügyben.
A hosszú thread itt.
Neked mi a véleményed?