Porównanie obrazów ISO

Porównanie obrazów ISO
Aby skonfigurować i utrzymywać urządzenia komputerowe, dystrybutorzy Linux regularnie zapewniają obrazy ISO dla ich wydań. Upraszcza to aktualizowanie naszych systemów za pomocą pełnej kompilacji oprogramowania, które faktycznie pasuje do siebie, w idealnych okolicznościach.

Wyobraź sobie, że masz kilka z tych obrazów ISO przechowywanych lokalnie. Jak dowiesz się, że odzyskane obrazy ISO są autentyczne? W tym artykule pokazujemy, jak zweryfikować integralność i autentyczność obrazu ISO, który został wcześniej pobrany, i jak dowiedzieć się, jakie są różnice między rzeczywistą zawartością dwóch obrazów ISO. Pomaga to zweryfikować proces budowy obrazu ISO i pozwala zobaczyć, co mogło się zmienić między dwiema kompilacjami lub dostępnymi wersjami.

Formaty obrazu

Format obrazów dysku ma swoją własną historię [11]. Wspólnym standardem jest ISO 9660 [12], który opisuje zawartość dysku optycznego jako całości. W użyciu jest rozszerzenie pliku .ISO w celu zidentyfikowania pliku obrazu (sklonowana kopia).

Oryginalny format ISO 9660 zawiera szereg ograniczeń, takich jak 8 poziomów katalogu, a także długość nazw plików. Ograniczenia te zostały zmniejszone przez wprowadzenie szeregu rozszerzeń, takich jak Rock Ridge [13] (konserwacja uprawnień poz. [15], który wprowadził wsparcie HFS.

Aby uzyskać więcej szczegółów dotyczących pliku obrazu, użyj polecenia „pliku”, a następnie nazwy pliku danych w następujący sposób:

.Lista 1: Wyświetlanie szczegółów pliku ISO

$ plik *.ISO
Debian-10.1.0-AMD64-NETINST.ISO: sektor rozruchowy DOS/MBR;
Partiction 2: ID = 0xef, start-chs (0x3ff, 254,63), końcowe chs (0x3ff, 254,63),
Startektor 3808, 5664 sektory
Xubuntu-18.04.3-Desktop-AMD64.ISO: sektor rozruchowy DOS/MBR;
Partiction 2: ID = 0xef, start-chs (0x3ff, 254,63), końcowe chs (0x3ff, 254,63),
Starterector 11688, 4928 sektorów $

Weryfikacja pobranych plików ISO

Godne zaufania dostawcy oprogramowania zawsze oferują dwie rzeczy do pobrania - rzeczywisty obraz ISO, a także zgodnie z kontrolą obrazu obrazu w celu sprawdzenia integralności pobranego pliku. Ten ostatni pozwala potwierdzić, że plik lokalny jest dokładną kopią pliku obecnego na serwerach pobierania i nic nie poszło nie tak podczas pobierania. W przypadku błędu podczas pobierania plik lokalny jest uszkodzony i może wywoływać losowe problemy podczas instalacji [16].

Ponadto, w przypadku, gdy obraz ISO został zagrożony (tak jak stało się to z Linux Mint na początku 2016 r. Możesz obliczyć sumy kontrolne za pomocą „MD5Sum” (przestarzały, już nie zalecane) i „SHA256Sum” w następujący sposób:

.Lista 2: Obliczanie sumy kontrolnej dla plików ISO

$ md5sum *.ISO
B931EF8736C98704BCF519160B50FD83 Debian-10.1.0-AMD64-NETINST.ISO
0C268A465D5F48A30E5B12676E9F1B36 Xubuntu-18.04.3-Desktop-AMD64.ISO
$ sha256sum *.ISO
7915FDB77A0C2623B4481FC5F0A8052330DEFE1CDE1E0834FF23818DC6F301E Debian-10.1.0-AMD64-NETINST.ISO
3C9E537EE1CF64088251E56B4CA1694944AD59126F298F24A78CD43AF152B5B3 XUBUNTU-18.04.3-Desktop-AMD64.ISO
$

Możesz wywołać porównanie pomiędzy dostarczonym plikiem sumy kontrolnej a lokalnie zapisanym obrazem ISO, jak wyświetlono na liście 3. Wyjście OK na końcu linii sygnalizuje, że obie susze kontrolne są takie same.

.Lista 3: Porównaj dostarczone sumy kontrolne

$ sha256Sum -sprawdź Sha256Sum.TXT Xubuntu-18.04.3-Desktop-AMD64.ISO: OK
$

Porównanie dwóch lokalnie przechowywanych plików ISO

Może się zdarzyć, że pobrałeś dwa pliki ISO i chciałbyś dowiedzieć się, czy są one całkowicie takie same. Polecenie „sha256sum” jest znowu przydatne i zalecamy zamknięcie tej kontroli w skrypcie powłoki. Na liście 4 Widzisz skrypt Zgodnie z Bash, który łączy cztery polecenia „SHA256Sum”, „Cut”, „uniq” i „wc” w celu oddzielenia pierwszej kolumny dla wszystkich linii wyjściowych, scal je na wypadek, gdyby były identyczne i policz liczbę pozostałych linii. Jeśli dwa (lub więcej) plików ISO są takie same, wówczas jego sumy kontrolne są identyczne, pozostanie tylko jeden wiersz, a skrypt bash wyprowadzi wiadomość „pliki są takie same”, ostatecznie:

.Lista 4: Automatyczne porównywanie sumy kontrolnej plików ISO za pomocą „SHA256Sum”

#!/bin/bash
Jeśli ['sha256sum *.ISO | cut -d "-f1 | uniq | wc -l 'eq 1]
Następnie
echo „pliki są takie same”
w przeciwnym razie
echo „pliki nie są identyczne”
fi

Jeśli skrypt zwraca, że ​​dwa pliki są różne, możesz być zainteresowany dokładną pozycją nierówności. Porównanie bajtów można wykonać za pomocą polecenia „CMP”, które wyświetla pierwszy bajt, który różni się między plikami:

.Lista 5: Zobacz różnice między dwoma lub więcej plikami za pomocą „CMP”

$ cmp *.ISO
Debian-10.1.0-AMD64-NETINST.ISO Xubuntu-18.04.3-Desktop-AMD64.ISO różni się: bajt 433, linia 4
$

Porównanie rzeczywistej treści

Do tej pory dokonaliśmy porównania bajtowego, a teraz będziemy bliżej przyjrzeć się do środka. W tym momencie wchodzi wiele narzędzi, które pomagają porównać pojedyncze pliki, całe struktury katalogów, a także kompresowane archiwa i obrazy ISO.
Polecenie „diff” pomaga porównać katalog za pomocą dwóch przełączników „-r” (skrót od „-recursive”) i „-q” (skrót od „-Blief”), a następnie dwa katalogi, które należy ze sobą porównać. Jak widać w

Listing 6, raporty „diff”, które pliki są unikalne w dowolnym katalogu, a jeśli zmienił się plik o tej samej nazwie.

.Lista 6: Porównanie dwóch katalogów za pomocą „diff”

$ diff -qr t1/ t2/
Tylko w T1/: Blabla.conf.
Pliki t1/nsswitch.CONF i T2/NSSwitch.Conf są inne.
Tylko w T2/: PWD.conf.
$

Aby porównać dwa obrazy ISO, po prostu zamontuj dwa pliki obrazów, aby oddzielić katalogi i odejdź stamtąd.
Bardziej kolorowe dane wyjściowe na linii poleceń są dostarczane przez narzędzia „colordiff” [1,2] i „ICDIFF” [18,19]. Rysunek 1 pokazuje wyjście „ICDIFF”, w którym różnice między dwoma plikami „NSSwitch.conf 'są podświetlone na zielono lub czerwone.

Rysunek 1: Porównanie dwóch katalogów za pomocą „ICDIFF”

Narzędzia graficzne do porównania katalogów obejmują „fldiff” [5], „xxdiff” [6] i „Dirdiff” [7]. „xxdiff” został zainspirowany „fldiff” i dlatego wyglądają dość podobnie. Wpisy, które mają podobną zawartość, są dostarczane z białym lub szarym tłem, a wpisy, które różnią się z jasnym żółtym tłem,. Wpisy z jasnym żółtym lub zielonym tłem są unikalne dla katalogu.

Rysunek 2: Porównanie dwóch katalogów za pomocą „Fldiff”

„xxdiff” wyświetla różnice plików w osobnym oknie, klikając wpis (patrz rysunek 3).

Rysunek 3: Porównanie dwóch katalogów za pomocą „xxdiff”

Następnym kandydatem jest „Dirdiff”. Opiera się na funkcjonalności „xxdiff” i może porównać do pięciu katalogów. Pliki, które istnieją w dowolnym katalogu, są oznaczone x. Co ciekawe, schemat kolorów, który jest używany dla okna wyjściowego, jest taki sam, jak używa „ICDIFF” (patrz rysunek 4).

Rysunek 4: Porównanie dwóch katalogów za pomocą „Dirdiff”

Porównanie skompresowanych archiwów i całego obrazu ISO to następny krok. Podczas gdy polecenie „Adiff” z pakietu „Atool” [10] może być już znane, zamiast tego przyjrzymy się poleceniu „Diffoscope” [8,9],. Opisuje się jako „narzędzie do dotarcia do sedna tego, co sprawia, że ​​pliki lub katalogi są różne. Rekurencyjnie rozpakowuje wiele rodzajów archiwów i przekształca różne formaty binarne w bardziej ludzkie czytelne formy, aby je porównać ”. Pochodzeniem narzędzia jest projekt powtarzalny kompilacje [19,20], który jest „zestawem praktyk tworzenia oprogramowania, które tworzą niezależną ścieżkę od źródła do kodu binarnego”. Między innymi obsługuje następujące formaty plików:

* Pliki Android APK i obrazy rozruchowe
* Pliki bazy danych Berkeley DB
* Obrazy systemu plików CBFS CBFS
* Debian .BuildInfo i .zmienia pliki
* Pakiety źródłowe Debian (.DSC)
* Binaria ELF
* Repozytoria GIT
* Obrazy CD ISO 9660 CD
* MacOS binaria
* OpenSSh Public Keys
* Archiwa pakietu OpenWRT (.IPK)
* Podpisane/zaszyfrowane wiadomości PGP
* Dokumenty PDF i PostScript
* Szepy archiwów RPM

Rysunek 5 pokazuje wyjście „diffoscope” podczas porównywania dwóch różnych wersji pakietów Debiana - dokładnie zobaczysz wprowadzone zmiany. Obejmuje to zarówno nazwy plików, jak i treści.

Rysunek 5: Porównanie dwóch pakietów Debiana za pomocą „Diffoscope” (fragment)

Lista 7 pokazuje wyjście „diffoscope” podczas porównywania dwóch obrazów ISO z rozmiarem 1.9G każdy. W tym przypadku dwa obrazy ISO należą do Linux Mint Release 19.2 Podczas gdy jeden plik obrazu został pobrany z francuskiego serwera, a drugi z austriackiego serwera (stąd litery „fr” i „at”). W ciągu kilku sekund „diffoscope” stwierdza, że ​​dwa pliki są całkowicie identyczne.

.Lista 7: Porównanie dwóch obrazów ISO za pomocą „Diffoscope”

$ diffoscope LinuxMint-19.2-xfce-64bit.Fr.ISO LinuxMint-19.2-xfce-64bit.Na.ISO
| #########################################################. ### | 100% czas: 0:00:00
$

Aby spojrzeć za sceny, pomaga nazwać „diffoscope” z dwiema opcjami „-debug” i „-text-” dla obu bardziej szczegółowych danych wyjściowych do terminala. To pozwala dowiedzieć się, co robi narzędzie. Lista 8 pokazuje zgodnie z wyjściem.

.Lista 8: za kulisami „diffoscope”

$ diffoscope - -debug --text -LinuxMint -19.2-xfce-64bit.Fr.ISO
LinuxMint-19.2-xfce-64bit.Na.ISO
2019-10-03 13:45:51 D: Diffoscope.Główny: początkowe diffoscope 78
2019-10-03 13:45:51 D: Diffoscope.lokalizacja: normalizacja lokalizacji, strefa czasowa itp.
2019-10-03 11:45:51 D: Diffoscope.Główne: początkowe porównanie
2019-10-03 11:45:51 D: Diffoscope.Postęp: rejestracja < diffoscope.progress.ProgressBar object at 0x7f4b26310588> Jako obserwator postępów
2019-10-03 11:45:52 D: Diffoscope.Komparatory: załadowane 50 klas komparatorów 64bit.Fr.ISO eta:-:-:--
2019-10-03 11:45:52 D: Diffoscope.komparatory.Utils.Specjalizuj: Nieodentyfikowany plik. Magia mówi: sektor rozruchowy DOS/MBR; PARTICY 2: ID = 0xef, start-chs (0x3ff, 254,63), końcowe chs (0x3ff, 254,63), startek 652, 4672 sektory
2019-10-03 11:45:52 D: Diffoscope.komparatory.Utils.Specjalizuj: Nieodentyfikowany plik. Magia mówi: sektor rozruchowy DOS/MBR; PARTICY 2: ID = 0xef, start-chs (0x3ff, 254,63), końcowe chs (0x3ff, 254,63), startek 652, 4672 sektory
2019-10-03 11:45:52 D: Diffoscope.komparatory.Utils.Porównaj: porównanie LinuxMint-19.2-xfce-64bit.Fr.ISO (FileSystemFile) i LinuxMint-19.2-xfce-64bit.Na.ISO (FileSystemfile)
2019-10-03 11:45:52 D: Diffoscope.komparatory.Utils.Plik: binarny.HAS_SAME_CONTENT: < LinuxMint-19.2-xfce-64bit.Fr.ISO> < LinuxMint-19.2-xfce-64bit.Na.ISO>
2019-10-03 11:45:53 D: Diffoscope.komparatory.Utils.Porównaj: HAS_SAME_CONTENT_AS ZWRÓCONE TRUE; pomijanie dalszych porównań
| #########################################################. ### | 100% czas: 0:00:01
2019-10-03 11:45:53 D: Diffoscope.Tempfiles: czyszczenie 0 plików tymczasowych
2019-10-03 11:45:53 D: Diffoscope.Tempfile: czyszczenie 0 tymczasowych katalogów
$

Cóż, jak dotąd, tak dobrze. Kolejne testy zostały wykonane na obrazach z różnych wydań i różnych rozmiarów plików. Wszystkie zaowocowały wewnętrznym błędem, który odsuwa się do polecenia „diff”, brakuje pamięci wewnętrznej. Wygląda na to, że istnieje limit wielkości pliku około 50 m. Dlatego zbudowałem dwa mniejsze obrazy po 10 m i przekazałem je „diffoscope” w celu porównania. Rysunek 6 pokazuje wynik. Wyjście to struktura drzewa zawierająca plik „NSSwitch.conf ”z wyróżnionymi różnicami.

Rysunek 6: Porównanie dwóch obrazów ISO za pomocą „Diffoscope”

Można również podać wersję wyjścia HTML. Rysunek 7 pokazuje wyjście jako plik HTML w Webbrowser. Można go osiągnąć za pośrednictwem przełącznika

„-HTML Wyjście.html '.

Rysunek 7: Porównanie dwóch obrazów ISO za pomocą „Diffoscope” (wyjście HTML)

W przypadku, gdy nie lubisz stylu wyjściowego lub chciałbyś dopasować go do tożsamości korporacyjnej swojej firmy, możesz dostosować dane wyjściowe według własnego pliku CSS za pomocą Switch '-CSS Style.CSS, który ładuje styl z odwołanego pliku CSS.

Wniosek

Znalezienie różnic między dwoma katalogami lub nawet całymi obrazami ISO jest nieco trudne. Narzędzia pokazane powyżej pomagają opanować to zadanie. Więc szczęśliwy hakowanie!

Dziękuję
Autor chciałby podziękować Axelowi Beckertowi za jego pomoc podczas przygotowywania artykułu.

Linki i referencje

* [1] Colordiff
* [2] Colordiff, pakiet Debian,
* [3] difutils
* [4] Diffutils, pakiet debian,
* [5] fldiff
* [6] xxdiff
* [7] Dirdiff
* [8] Diffoscope
* [9] Diffoscope, pakiet Debian
* [10] Atool, pakiet Debian
* [11] https: // www.Winiso.com/artykuły/formaty typu common-obraz-file.HTML (obecnie offline)
* [12] ISO 9660, Wikipedia
* [13] Rock Ridge, Wikipedia
* [14] Joliet, Wikipedia
* [15] Rozszerzenia Apple ISO 9660, Wikipedia
* [16] Jak weryfikować obrazy ISO, Linux Mint
* [17] Uważaj na zhakowane ISO, jeśli pobrałeś Linux Mint 20 lutego!
* [18] icdiff
* [19] Icdiff, pakiet Debian
* [20] Powtarzalny projekt kompilacji
* [21] Projekt powtarzalny, debian wiki