Демистификација апокалиптичне команде rm -rf /

Дечко је на Server Fault-у окачио питање „Урадио сам rm -rf / и обрисао сајтове 1500 клијената укључујући и бекапе тако да немам ништа – шта да радим“ – па је доспео на „хахахахаха листу“ свих безгрешних паметница на планети којима се то никад не би могло десити, тако да су на свим сајтовима осванули наслови типа „ЦАР ОБРИСАО КОМПАНИЈУ: Грешком укуцао ова четири слова у код

Шта је била његова грешка – ако изигноришемо то да је ово био чист HOAX на који су насели сви могући домаћи и страни портали, нешто типа „Србин убио ајкулу убицу у Шарм ел Шеику

  1. Није имао бекап на неком серверу који ниђе везе са постојећим нема. Он јесте имао бекап, али на локацији која је моунтована на продукциони сервер као NFS/sshfs/остало и бекап се радио највероватније простим копирањем или rsync-ом, тако да је, што се продукционог сервера тиче – та бекап локација била отприлике третирана као било који диск на компјутеру.
  2. Што није поставио проверу варијабли пре извршења скрипте. Команда унутар скрипте није била „rm -rf /“ као што су пренели портали, него „rm -rf $varijabla1/$varijabla2“ а пошто су због лошег кода и једна и друга варијабла биле празне то је прослеђено као „rm -rf /“
    Дакле, требало је поставити проверу типа…

    if [ -z $varijabla1] ; then
            echo "Варијабла не постоји" ; exit 1
    fi
    

Првобитна информација је била да је човек окинуо rm -rf / и да је тако обрисао све је одмах присмрдела на превару, јер иако је комaнда опасна и значи „бриши све и не питај ме ништа“ било који Linux баја ће се насмејати јер се том командом не може обрисати ништа, наравно уколико није постављен неки алијас који ће команду третирати другачије.

Ово је иначе команда којом се плаше сви и увек, па хајде да се позабавимо њом на неком тестном компјутеру под CentOS 6 минимал оперативним системом (обично се на хостинг серверима врти или CentOS или Cloud Linux) а који је унутар VirtualBoxа. Наравно не играјте се овим на било ком не-тестном компјутеру ма шта прочитали овде.

rm -rf inicijalna komanda
rm -rf / не брише ништа, али прети

…и да тутнемо ту команду унутар неке shell скрипте, што је симулација стања које је пријављено – неће се ништа десити

Simulacija

Дакле, ништа није обрисано. Да би се довело до катастрофе мора да се окине команда rm -rf –no-preserve-root. Еее том командом већ журка може да почне

Komanda apokalipse

Ispravno
Брисање свега – нешто се пријављује као немогуће за брисање
Evo šta je ostalo od mašine
Ево шта је остало од машине, бог душу да јој прости
Komande ne rade
Команде не раде
Posle restarta na-dugme, Linux se diže jer nema odakle
После рестарта на-дугме, Linux се диже јер нема одакле

Дакле, ако није постојао неки алијас који би команду „rm -rf“ третирао као „rm -rf –no-preserve-root“ а то може да постави само или неко луд или уљез на хакнутом серверу – не би се десило ништа као и да је постојала провера улазних варијабли – не би се десило ништа.
Све и да је команда „rm -rf –no-preserve-root /“ покренута под неким непривилегованим корисником, не би се десило ништа јер тај корисник не би могао да дира ништа што није његово и није дозвољено њему да дира.

Закључак, све и да је истина ово што је овај горе мученик навео као проблем, наслов ЦАР ОБРИСАО КОМПАНИЈУ: Грешком укуцао ова четири слова у код је нетачан…најближе коректном одговору са 4 слова би у овом случају би могло да буде rm -rf /*