2012-05-28 29 views
7

OSTRZEŻENIE: Niebezpieczny scenariusz. Nie uruchamiaj się z wiersza poleceń!Jak niebezpieczny jest ten skrypt bash?

Widziałem to w e-mailu o żartach z firmy. Czy ktoś może mi wyjaśnić, dlaczego ten skrypt bash jest bardziej niebezpieczne niż normalny „rm -rf” polecenia ?:

nohup cd /; rm -rf * > /dev/null 2>&1 & 

Szczególnie, dlaczego nohup wykorzystywane i jakie są elementy na koniec za?

OSTRZEŻENIE: Niebezpieczny scenariusz. Nie uruchamiaj się z wiersza poleceń!

+1

To tylko bardzo nieznacznie programujące pytanie – DGM

+1

'--no-preserve-root' (gwizd) –

Odpowiedz

4

2>&1 przyjmuje stderr (uchwyt pliku 2) i przekierowuje do stdout (uchwyt pliku 1). & samodzielnie umieszcza polecenie rm w tle. nohup pozwala na kontynuowanie pracy nawet po wylogowaniu się osoby, która ją uruchomiła.

Innymi słowy, to polecenie robi wszystko, aby wymazać cały system plików, nawet jeśli użytkownik jest w złej dyspozycji.

+1

"uchwyt pliku" aka "deskryptor pliku" –

+1

Na szczęście najlepszy scenariusz nie jest tak zły, jak tego chciał jego autor. Był tak wystraszony swoim własnym pomysłem, że go nie testował :-) – choroba

2

nohup [..] & sprawia, że ​​działają w tle, nawet gdy użytkownik jest wylogowany (utrudniając zatrzymać, przypuszczam)

2>&1 przekierowuje stderr do stdout

> /dev/null odrzutów niczego pochodzących z stdout

Polecenie wydaje się w zasadzie nic nie robić, ponieważ twój system plików powoli ulega zniszczeniu w tle.

2

nohup oznacza, że ​​będzie ignorować sygnał rozłączenia, co oznacza, że ​​będzie on nadal działać, nawet jeśli użytkownik nie jest zalogowany.

cd/przenosi użytkownika do katalogu

rm -rf * usuwa wszystkie pliki rekursywnie (przemierza wszystkie katalogi) i wymusza (nie obchodzi, czy pliki są w użyciu)

Fragment na końcu przekierowuje całe wyjście do nikąd. Powinien zasadniczo sformatować twój dysk na nic.

+0

Dostałbyś najlepszą odpowiedź, gdybyś rozwinął nieco więcej przekierowań. Również nie wspomniałeś o tle "&" na końcu. Dobra odpowiedź. – derek8

6

Można spróbować czegoś mniej "niebezpieczne":

nohup cd /; find * >/dev/null 2>&1 & 

Dostaję to:

nohup: ignoring input and appending output to `nohup.out' 
nohup: cannot run command `cd': No such file or directory 
[2] 16668 

Więc nohup część nie robi nic, tylko to powoduje błąd. Druga część (oryginalnego skryptu) próbuje usunąć wszystko z bieżącego katalogu i nie może zostać zatrzymana przez Ctrl-C, ponieważ działa w tle. Wszystkie jego dane wyjściowe są przekierowywane do nieważności, więc nie widzisz komunikatów o postępach w odmowie dostępu.

+0

Czy nie powinien to być "nohup cd /"? – derek8

+0

@ derek8: Skopiuj i wklej błąd, dzięki, naprawione. – choroba

+0

Ale czy nadal daje ci ten błąd? – derek8

3

żart jest trochę uszkodzony, oczywiście nie został przetestowany, miał na myśli

nohup sh -e "cd/; rm -rf *" > /dev/null 2>&1 & 

lub

nohup rm -rf/> /dev/null 2>&1 & 

inaczej cd nohup /; część jest uważana za osobną linię przez powłokę. a druga linia po prostu odradza rm -rf *, która rekurencyjnie rmuje twój bieżący katalog (mniej plików o nazwie zaczynającej się od).

Powiązane problemy