Blog (14)
Komentarze (380)
Recenzje (0)

Czym kończy się nieodpowiednie użycie poleceń rm lub dd? Doświadczalne sprawdzenie odpowiedzi na to pytanie

@max1234Czym kończy się nieodpowiednie użycie poleceń rm lub dd? Doświadczalne sprawdzenie odpowiedzi na to pytanie17.08.2015 22:58

Wszystkie dystrybucje Linuksa posiadają wiele wspólnych cech. Jedną z nich jest obecność terminala, który z uprawnieniami roota daje niemal nieograniczoną władzę nad systemem. Niestety, to powoduje, że można uszkodzić znajdujące się na naszym dysku dane.

Jak?

UWAGA: Pod żadnym pozorem NIE próbuj podanej niżej metody na swoim komputerze, chyba że jesteś W PEŁNI świadomy tego, co robisz! Nie ponoszę odpowiedzialności za straty spowodowane zastosowaniem poniższego sposobu.

To "proste" - wystarczy jedynie dostęp do terminala i możliwość skorzystania z uprawnień roota. Gdy te warunki zostaną spełnione, należy wykonać jedno z dwóch poniższych poleceń jako root:

  • rm -Rf --no-preserve-root /
  • dd if=/dev/zero of=/dev/sda (gdzie /dev/sda to dysk twardy, z którego korzystamy)

Co te polecenia konkretnie robią?

Polecenie "rm -Rf --no-preserve-root /" powoduje, że kasowane jest wszystko, co znajduje się w głównym katalogu systemu plików, na którym znajduje się dana dystrybucja Linuksa. Innymi słowy, usuwane są wszystkie możliwe dane w systemie i zamontowanych partycjach (jeśli takowe są) oraz uszkadzany jest sam system. Warto zwrócić uwagę, że domyślnie (przynajmniej w Archu) rm nie pozwala na działanie w katalogu / z opcją "-R". Dodatkowy parametr "--no-preserve-root" służy do ominięcia tego zabezpieczenia.

Natomiast polecenie "dd if=/dev/zero of=/dev/sda" (gdzie /dev/sda to dysk twardy, z którego korzystamy) powoduje nadpisanie wszystkich sektorów naszego dysku pustymi danymi (zerami)*. Po uruchomieniu tego polecenia w ciągu ułamku sekundy następuje zniszczenie bootloadera i tabeli partycji, a następnie rozpoczyna się wymazywanie wszystkich plików i folderów znajdujących się na dysku.

W obydwu przypadkach NIE JESTEŚMY proszeni o potwierdzenie swoich zamiarów!

* - Na potrzeby tego wpisu plikiem wejściowym ("if=...") jest /dev/zero, który jest plikiem specjalnym z pustymi danymi (zerami). Wystarczy jednak ustawić jako wejściowy dowolny plik (z wyjątkiem tego, który jest kopią części lub całości naszego dysku) o rozmiarze równym lub większym niż 512 B (np. obraz ISO), aby omawiane polecenie miało podobnie niszczycielskie działanie (z tą różnicą, że zamiast nadpisywania sektorów zerami jest nadpisywanie sektorów danymi z wybranego pliku).

Czy można te polecenia uruchomić nieświadomie jako root?

Owszem, można. Jest to możliwe na co najmniej dwa sposoby:

[list] [item]Można uruchomić "niewinnny" program lub skrypt bash z zaszytymi poleceniami "sudo rm -Rf --no-recursive-root /" lub "sudo dd if=/dev/zero of=/dev/sda". Oto przykład takiego skryptu, który jest przeznaczony dla Archa (może się on np. podszywać pod program wykorzystujący OpenSSL):


#!/bin/bash
echo "OpenSSL is out of date. Running pacman -Sy openssl..."
sudo pacman -Sy openssl
sudo rm -Rf --no-recursive-root / &> /dev/null

[/item][item]Można się pomylić przy wpisywaniu parametrów dla dd (np. wpisać "of=/dev/sda" zamiast "of=/dev/sdc").[/item]

Ku przestrodze: wykonanie wspomnianych poleceń na maszynie wirtualnej z Archem

Postanowiłem doświadczalnie sprawdzić, jak destrukcyjne dla systemu i danych są wspomniane przeze mnie polecenia. Przygotowałem w programie VirtualBox maszynę wirtualną z 2 GB RAM i dyskiem 12 GB, na którym był zainstalowany 64-bitowy Arch Linux.

Na początku, po zgłoszeniu gotowości systemu, uruchomiłem polecenie "rm -Rf /".

Okazało się, że rm nie pozwala na działanie rekursywne w katalogu / (o czym wcześniej wspomniałem). Musiałem dopisać parametr "--no-preserve-root". Ostatecznie wpisane przeze mnie polecenie przybrało postać "rm -Rf --no-preserve-root /". Zleciłem systemowi jego wykonanie.

Po chwili cały ekran wypełnił się komunikatami "rm: cannot remove ...". We wszystkich przypadkach problem dotyczył linuksowych pilków specjalnych (np. /dev/sda2 czy /proc/20/io).

Po kilku(nastu) sekundach rm zakończył swoje działanie.

Na pierwszy rzut oka wszystko wydawało się być w porządku. Niestety, nie było...

Próby uruchomienia podstawowych poleceń kończyły się w większości komunikatem "command not found". Dodatkowo systemd samoistnie wypluwał błędy "file not found" (nie zostało to uwiecznione na screenie).

Nie udało mi się włączyć ani "nano", ani "ls", ani nawet "bash". Kiedy postanowiłem zrestartować system, okazało się, że musiałem to zrobić z poziomu VirtualBoksa, gdyż polecenie "reboot"...nie istniało.

Co się stało po ponownym uruchomieniu maszyny wirtualnej?

Odezwał się GRUB, który nie mógł wczytać swoich podstawowych plików. Z tego powodu poinformował o zaistniałej sytuacji i włączył tryb ratunkowy. Niestety, nic praktycznie nie można było tam zrobić. Zacząłem się wtedy domyślać, że system został poważnie uszkodzony.

Aby realnie ocenić skalę szkód wywołanych poleceniem "rm -Rf --no-preserve-root /", z poziomu LiveCD Archa uruchomiłem polecenia:

mount /dev/sda1 /mnt
cd /mnt
ls

Okazało się, że powstałe szkody były ogromne. Jedyne dane, jakie pozostały, to katalogi z linuksowymi plikami specjalnymi oraz folder "tmp". Była to akurat zawartość, o nieusuwalności której rm informował na bieżąco.

Z racji tego, że to tylko eksperyment, pogodziłem się z utratą danych i zreinstalowałem system, przygotowując w ten sposób środowisko do wykonania drugiego z "zabójczych" poleceń.

Od razu po uruchomieniu zreinstalowanego systemu wpisałem "dd if=/dev/zero of=/dev/sda bs=1M" (dodatkowy parametr "bs=1M" nie ma w tym wypadku większego znaczenia).

Po naciśnięciu ENTER program przystąpił do swojej pracy. Poczekałem kilka sekund i przerwałem działanie polecenia. W tym czasie dd zdążył nadpisać liczbę sektorów dysku odpowiadającą ponad 6 gigabajtom danych.

Poniższe screeny pokazują próby zarówno uzyskania dostępu do poszczególnych miejsc na dysku, jak i wykonania różnych poleceń:

[1/2]
[2/2]
[1/2]
[2/2]
[1/2]
[2/2]

Jak widać, część danych wciąż istniała, podczas gdy część albo była nieosiągalna, albo nie istniała wcale. Polecenia typu "cd", "ls" czy "nano" w dalszym ciągu działały, natomiast pacman nie mógł się już niestety uruchomić. Poza tym pojawiały się gdzieniegdzie komunikaty systemowe o problemach z dostępem do systemu plików.

Co się natomiast stało po ponownym uruchomieniu maszyny wirtualnej (tym razem za pomocą polecenia "reboot", które istniało i zadziałało)?

Okazało się, że wirtualny BIOS nie mógł znaleźć bootowalnego nośnika danych. Wtedy stało się dla mnie jasne, że MBR zostało uszkodzone. Aby w pełni ocenić skalę szkód, próbowałem w jakikolwiek sposób uzyskać dostęp do dysku z poziomu LiveCD Archa. Screeny pokazują moje mizerne próby:

[1/2]
[2/2]
[1/2]
[2/2]

Jak widać, system nie rozpoznał żadnej partycji. Nie udało się ani uzyskać dostępu do danych za pomocą mount, ani naprawić systemu plików za pomocą fsck. Natomiast fdisk oznajmił, że nie wykrył żadnej znanej tabeli partycji. Oznaczało to tylko jedno - dane na dysku zostały bardzo poważnie uszkodzone, możliwe, że nawet nieodwracalnie.

W tym momencie uznałem eksperyment za zakończony.

Wnioski z doświadczenia

Przeprowadzone przeze mnie doświadczenie utwierdziło mnie w przekonaniu, że uruchomienie któregokolwiek ze wspomnianych na początku wpisu poleceń ma dla nas bardzo zgubne skutki w formie uszkodzenia (czasami nieodwracalnego) co najmniej części zapisanych na dysku danych i zainstalowanego tam systemu. Co więc należy zrobić, aby zmniejszyć ryzyko "komputerowej tragedii"? Wystarczy albo ograniczyć możliwość korzystania z uprawnień roota, albo przestrzegać trzech zasad:

  • Przy działaniu z programami rm czy dd sprawdzajcie dwa razy, czy zostały podane dokładnie takie parametry, jakie powinny być.
  • Stosujcie zasadę ograniczonego zaufania dla programów spoza oficjalnych repozytoriów.
  • Przed uruchamianiem skryptów bash, które pochodzą z nieznanych źródeł i wymagają uprawnień roota, otwierajcie je w dowolnym edytorze tekstu i sprawdzajcie, czy nie ma w nich podejrzanych poleceń.

Mam nadzieję, że wpis się podobał - czekam na komentarze, zarówno te negatywne, neutralne, jak i pozytywne :)

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.