Bezpieczna destrukcja dysku, czyli polecenie dd
Kolega bigos zadał bardzo ciekwe pytanie odnośnie bezpiecznego użytkowania polecenia dd. Osoby często nagrywające obrazy systemów na różnych nośnikach są bardziej narażeni na przypadkowe wymazanie zawartości dysku. Przyznam się szczerze, że sam padłem ofiarą własnej nieuwagi podczas "wypalania" obrazu na nośniku SD i to nie raz.
Naturalnie nic nie zastąpi ostrożności, ale to tylko kwestia czasu, kiedy spotka to również Ciebie. Zastanawiając się nad tym problemem, wpadłem na pewne rozwiązanie filtrowania niebezpiecznych parametrów. Założenie jest proste - utworzyć skrypt bash o nazwie dd o odpowiedniej zawartości, a domyślne polecenie dd przemianować na ddunsafe.
- ls -o /bin/dd*
- -rwxr-xr-x 1 root 284 Jun 29 22:18 /bin/dd
- -rwxr-xr-x 1 root 56880 Feb 27 2013 /bin/ddunsafe
Sktypt dd przed wykonaniem polecenia zadba o to, abyśmy nie popełnili drugi raz gafy:
- #!/bin/bash
- dennyArgs=("^of=/dev/sda$" "^of=/dev/sda1$")
- for ARG in "$@"
- do
- for dennyArg in ${dennyArgs[*]}
- do
- if [ "$(echo "$ARG" | egrep ${dennyArg})" ]
- then
- echo "OPS! Parametr ${dennyArg} zablokowany!"
- exit -1
- fi
- done
- done
- ddunsafe "$@"
Do tablicy dennyArgs, możemy dopisać chronione dyski i partycje. Próba dostępu do chronionengo nośnika zakończy się niepowodzeniem i wyświetleniem komunikatu.
- dd id=/dev/zero of=/dev/sda1
- OPS! Parametr ^of=/dev/sda1$ zablokowany!
Komentarze
Psujesz... :(
DD ma być niebezpieczny, nie po to nazywany jest Disk Destroyerem, by nagle jego główne zadanie zostało mu odebrane. :)
Kiedy zaczynałem z Linuksami, większość komend bezmyślnie kopiowałem z netu, zakładając, że kiedyś je w ten sposób spamiętam, ze dwa razy zniszczyłem sobie tym sposobem jakąś partycję. Później na wszelki wypadek zacząłem korzystać z maszyny wirtualnej z szybko pobranej płyty CD dowolnej dystrybucji. To jest najbezpieczniejszy sposób. :P
:) psucie to moje drugie imię
Hej,
@PKSobon: dd, jak sama nazwa wskazuje, jest od "Copy and Convert" ale cc było już zajęte ;)
Wydaje mi się żę najlepszym roziązaniem są grupy.
Mozna zrobić sobie grupę typu "ddmasters" poprawić udeva tak żeby dyski wymienne (albo ten jeden konkretny na obrazy) dostawłay 660 "root:ddmasters" na koniec dodać sobie do grupy ddmasters.
i jest bezbiecznie
bo nie trzeba intakntować "sudo ..."
pewnie będzie jakiś problem z automatycznym montowaniem, czy czymś takim, a jak będzie to zawsze można się pobawić ACL\'kami (też z udeva).
A ja mam inne pytanie, dotyczące kopiowania całej partycji. Co się stanie jeśli weźmiemy wybierzemy do kopiowania całą partycję a plik wyjściowy (w spakowanej formie) też będziemy zapisywać na tej partycji. :D Ciekawe co się stanie, gdy później będziemy próbowali odtworzyć takie cudo. :P
Wg. mnie "paker" wywali error/warning, coś w stylu "plik zminieny podczas odczytu" i pominie go lub zakończy działanie.
Dzięki za odpowiedź. Dokładnie takiego rozwiązania używam czyli dodatkowego skryptu, ale cały czas interesuje mnie czy można to zabezpieczyć na poziomie systemu. Nie jestem pewien ale chyba w FreeBSD nie da się nadpisać partycji rootfs nawet przez roota. Może i w linuksie jest coś podobnego ale o tym nie wiem.
Odnośnie skryptu to używam jeszcze automatycznego sprawdzania co jest podmontowane jako partycja systemowa (dzięki temu nie musze martwić się na innych systemach czym jest rootfs) oraz jako nazwę skryptu używam dd/dcfldd lokowane w /usr/local/bin dzięki czemu nie muszę pamiętać, że muszę używać innego programu (pod warunkiem prawidłowej kolejności w PATH).
"Do tablicy dennyArgs, możemy dopisać chronione dyski i partycje"
Nie lepiej zrobić white-listę i dodawać do tablicy niechronione dyski/partycje.
W powyższym przypadku można również zapomnieć dopisać partycję/dysk do tablicy chronionych :)
Drugi sposób to skrypt który będzie pytał o potwierdzenie wpisując słownie TAK/YES. (można poprzedzić np. poleceniem sudo parted --list lub lsblk -io KNAME,TYPE,SIZE,MODEL)
Trzeci sposób utworzyć czytelne aliasy do "właściwych poleceń dd" np.:
alias wypalsd="dd if=ubuntu.img of=/dev/sdX"
słuszna uwaga - white lista jest bardziej bezpiecznym posunięciem, również drugi pomysł bardzo mi się podoba! aliasy też ciekawe, ale mało wygodne chyba, przy większej ilości partycji
Mi się wydaje, że wszystko zależy od tego jak i po co mamy tego dd używać. W robocie jak już mam coś kopiować, to jestem zmuszony używać jakiegoś liveCD i kopiować nie pojedynczą partycję, a cały dysk zazwyczaj. W przypadku gdy mamy kilkadziesiąt komputerów z taką samą konfiguracją oraz aplikacjami jest to najlepsza metoda, później tylko zmienić nazwę komputera, adres IP i kilka innych prostych rzeczy i działa. :) Wtedy nawet nie warto się bawić ze skryptami, a w domu? W domu mam dwa kompy, jak upośledzę jeden, to mam drugi... I trochę pracy nad tym pierwszym. :P