ISO obraz

Porovnání ISO obrazů

Porovnání ISO obrazů
Za účelem nastavení a údržby výpočetních zařízení distributoři Linuxu pravidelně vydávají obrázky ISO podle svých vydání. To zjednodušuje udržování našich systémů v aktuálním stavu pomocí úplné kompilace softwaru, který do sebe za ideálních okolností skutečně zapadá.

Představte si, že máte několik těchto ISO obrazů uložených lokálně. Jak zjistíte, že načtené obrázky ISO jsou autentické? V tomto článku vám ukážeme, jak ověřit integritu a autentičnost obrazu ISO, který byl stažen dříve, a jak zjistit, jaké jsou rozdíly mezi skutečným obsahem dvou obrazů ISO. To vám pomůže ověřit proces vytváření obrazu ISO a umožní vám zjistit, co se mohlo změnit mezi dvěma sestaveními nebo verzemi, které jsou k dispozici.

Formáty obrázků

Formát obrazů disků má svou vlastní historii [11]. Společným standardem je ISO 9660 [12], který popisuje obsah optického disku jako celku. Používá se přípona souboru .iso za účelem identifikace obrazového souboru (klonovaná kopie).

Původní formát ISO 9660 má řadu omezení, například 8 úrovní adresářů a délku názvů souborů. Tato omezení byla snížena zavedením řady rozšíření, jako jsou Rock Ridge [13] (zachování oprávnění POSIX a delší názvy), Joliet [14] (ukládání jmen Unicode v UCS-2) a Apple ISO 9660 Extensions [15], který představil podporu HFS.

Chcete-li získat další podrobnosti týkající se obrazového souboru, použijte příkaz 'file' následovaný názvem datového souboru takto:

.Výpis 1: Zobrazení podrobností souboru ISO

$ soubor *.iso
debian-10.1.0-amd64-netinst.iso: bootovací sektor DOS / MBR;
oddíl 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63),
startovací sektor 3808, 5664 sektorů
xubuntu-18.04.3-desktop-amd64.iso: bootovací sektor DOS / MBR;
oddíl 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63),
startovací sektor 11688, 4928 sektorů $

Ověření stažených souborů ISO

Důvěryhodní poskytovatelé softwaru vám ke stažení vždy nabízejí dvě věci - skutečný obraz ISO a odpovídající kontrolní součet obrazu, aby bylo možné provést kontrolu integrity staženého souboru. Ten druhý vám umožní potvrdit, že váš místní soubor je přesnou kopií souboru přítomného na serverech pro stahování a během stahování se nic nepokazilo. V případě chyby během stahování je místní soubor poškozen a může způsobit náhodné problémy během instalace [16].

Navíc v případě, že byl obraz ISO kompromitován (jak se to stalo s Linux Mint na začátku roku 2016 [17]), dva kontrolní součty nebudou odpovídat. Kontrolní součty můžete vypočítat pomocí 'md5sum' (zastaralé, již se nedoporučuje) a 'sha256sum' následujícím způsobem:

.Výpis 2: Výpočet kontrolního součtu pro soubory ISO

$ md5sum *.iso
b931ef8736c98704bcf519160b50fd83 debian-10.1.0-amd64-netinst.iso
0c268a465d5f48a30e5b12676e9f1b36 xubuntu-18.04.3-desktop-amd64.iso
$ sha256sum *.iso
7915fdb77a0c2623b4481fc5f0a8052330defe1cde1e0834ff233818dc6f301e debian-10.1.0-amd64-netinst.iso
3c9e537ee1cf64088251e56b4ca1694944ad59126f298f24a78cd43af152b5b3 xubuntu-18.04.3-desktop-amd64.iso
$

Můžete vyvolat srovnání mezi poskytnutým souborem kontrolního součtu a místně uloženým obrazem ISO, jak je zobrazeno v seznamu 3. Výstup OK na konci řádku signalizuje, že oba kontrolní součty jsou stejné.

.Výpis 3: Porovnejte poskytnuté kontrolní součty

$ sha256sum - zaškrtněte sha256sum.txt xubuntu-18.04.3-desktop-amd64.iso: Dobře
$

Porovnání dvou lokálně uložených souborů ISO

Může se stát, že jste stáhli dva soubory ISO a chtěli byste zjistit, zda jsou zcela stejné. Příkaz 'sha256sum' je opět užitečný a doporučujeme vám zapouzdřit tuto kontrolu do shell skriptu. V seznamu 4 vidíte odpovídající bash skript, který kombinuje čtyři příkazy 'sha256sum', 'cut', 'uniq' a 'wc', aby se oddělil první sloupec pro všechny výstupní řádky, sloučit je v případě, že jsou identické a spočítat počet zbývajících řádků. Pokud jsou dva (nebo více) soubory ISO stejné, pak jsou jejich kontrolní součty identické, zůstane pouze jeden řádek a bash skript vypíše zprávu „soubory jsou stejné“, případně:

.Výpis 4: Automatické porovnání kontrolních součtů souborů ISO pomocí 'sha256sum'

#!/ bin / bash
 
pokud ['sha256sum *.iso | cut -d "-f1 | uniq | wc -l 'eq 1]
pak
echo "soubory jsou stejné"
jiný
echo "soubory nejsou identické"
fi

V případě, že skript vrátí, že se tyto dva soubory liší, možná vás bude zajímat přesná poloha nerovnosti. Porovnání pořadí bajtů lze provést pomocí příkazu 'cmp', který vypíše první bajt, který se mezi soubory liší:

.Výpis 5: Podívejte se na rozdíly mezi dvěma nebo více soubory pomocí 'cmp'

$ cmp *.iso
debian-10.1.0-amd64-netinst.iso xubuntu-18.04.3-desktop-amd64.iso differ: byte 433, řádek 4
$

Porovnání skutečného obsahu

Doposud jsme provedli srovnání v bajtovém pořadí a nyní se podíváme blíže dovnitř - na skutečný obsah souborů ISO, které se mají navzájem porovnávat. V tomto okamžiku vstupuje do hry řada nástrojů, které pomáhají porovnávat jednotlivé soubory, celé adresářové struktury i komprimované archivy a obrazy ISO.
Příkaz 'diff' pomáhá porovnat adresář pomocí dvou přepínačů '-r' (zkratka pro '-recursive') a '-q' (zkratka pro '-brief') následovaných dvěma adresáři, které se mají navzájem porovnávat. Jak je vidět na

Výpis 6 uvádí „diff“, které soubory jsou jedinečné pro kterýkoli adresář, a pokud se změnil soubor se stejným názvem.

.Výpis 6: Porovnání dvou adresářů pomocí 'diff'

$ diff -qr t1 / t2 /
Pouze v t1 /: blabla.konf.
Soubory t1 / nsswitch.conf a t2 / nsswitch.conf jsou různé.
Pouze v t2 /: pwd.konf.
$

Chcete-li porovnat dva obrazy ISO, jednoduše připojte dva obrazové soubory do samostatných adresářů a pokračujte odtud.
Barevnější výstup na příkazovém řádku poskytují nástroje 'colordiff' [1,2] a 'icdiff' [18,19]. Obrázek 1 ukazuje výstup 'icdiff', ve kterém jsou rozdíly mezi dvěma soubory 'nsswitch.conf 'jsou zvýrazněny zeleně nebo červeně.

Obrázek 1: Porovnání dvou adresářů pomocí 'icdiff'

Mezi grafické nástroje pro srovnání adresářů patří „fldiff“ [5], „xxdiff“ [6] a „dirdiff“ [7]. 'xxdiff' byl inspirován 'fldiff', a proto vypadají docela podobně. Položky, které mají podobný obsah, mají bílé nebo šedé pozadí a položky, které se liší, mají místo toho světle žluté pozadí. Položky s jasně žlutým nebo zeleným pozadím jsou pro adresář jedinečné.

Obrázek 2: Porovnání dvou adresářů pomocí 'fldiff'

'xxdiff' zobrazí rozdíly v souborech v samostatném okně kliknutím na položku (viz obrázek 3).

Obrázek 3: Porovnání dvou adresářů pomocí 'xxdiff'

Dalším kandidátem je 'dirdiff'. Staví na funkčnosti 'xxdiff' a může porovnávat až pět adresářů. Soubory, které existují v kterémkoli adresáři, jsou označeny znakem X. Zajímavé je, že barevné schéma, které se používá pro výstupní okno, je stejné jako použití 'icdiff' (viz obrázek 4).

Obrázek 4: Porovnání dvou adresářů pomocí 'dirdiff'

Dalším krokem je porovnání komprimovaných archivů a celých obrazů ISO. Zatímco příkaz 'adiff' z balíčku 'atool' [10] vám již může být znám, místo toho se podíváme na příkaz 'diffoscope' [8,9]. Popisuje se jako „nástroj, jak se dostat na konec toho, co odlišuje soubory nebo adresáře. Rekurzivně rozbaluje archivy mnoha druhů a transformuje různé binární formáty do více čitelných forem, aby je bylo možné porovnat. “. Původem nástroje je Projekt reprodukovatelných sestav [19,20], což je „sada postupů pro vývoj softwaru, které vytvářejí nezávisle ověřitelnou cestu od zdroje k binárnímu kódu“. Mimo jiné podporuje následující formáty souborů:

* Soubory Android APK a spouštěcí obrázky
* Soubory databáze Berkeley DB
* Obrazy souborového systému Coreboot CBFS
* Debian .buildinfo a .mění soubory
* Zdrojové balíčky Debianu (.dsc)
* Binární soubory ELF
* Úložiště Git
* Obrazy ISO 9660 CD
* Binární soubory MacOS
* OpenSSH veřejné klíče
* Archivy balíků OpenWRT (.ipk)
* Podepsané / šifrované zprávy PGP
* Dokumenty PDF a PostScript
* RPM archivuje pažitku

Obrázek 5 ukazuje výstup 'diffoscope' při porovnávání dvou různých verzí balíčků Debianu - uvidíte přesně provedené změny. To zahrnuje jak názvy souborů, tak obsah.

Obrázek 5: Porovnání dvou balíčků Debianu pomocí 'diffoscope' (výňatek)

Výpis 7 ukazuje výstup 'difoskopu' při porovnání dvou obrazů ISO o velikosti 1.9 G každý. V tomto případě patří dva obrazy ISO k Linux Mint Release 19.2 vzhledem k tomu, že jeden obrazový soubor byl získán z francouzského serveru a druhý z rakouského serveru (odtud tedy písmena „fr“ a „at“). Během několika sekund „diffoscope“ uvádí, že oba soubory jsou zcela identické.

.Výpis 7: Porovnání dvou obrazů ISO pomocí 'difoskopu'

$ diffoscope linuxmint-19.2-xfce-64bit.fr.iso linuxmint-19.2-xfce-64bit.na.iso
| ###################################################### ### | 100% čas: 0:00:00
$

Chcete-li nahlédnout do zákulisí, pomůže vám zavolat 'diffoscope' se dvěma možnostmi '-debug' a '-text -' pro oba podrobnější výstup do terminálu. To vám umožní zjistit, co nástroj dělá. Výpis 8 zobrazuje odpovídající výstup.

.Výpis 8: V zákulisí 'difoskopu'

$ diffoscope --debug --text - linuxmint-19.2-xfce-64bit.fr.iso
linuxmint-19.2-xfce-64bit.na.iso
2019-10-03 13:45:51 D: difoskop.hlavní: Spouštěcí difoskop 78
2019-10-03 13:45:51 D: difoskop.locale: Normalizace národního prostředí, časového pásma atd.
2019-10-03 11:45:51 D: difoskop.main: Zahájení porovnání
2019-10-03 11:45:51 D: difoskop.pokrok: Registrace < diffoscope.progress.ProgressBar object at 0x7f4b26310588> jako pokrokový pozorovatel
2019-10-03 11:45:52 D: difoskop.komparátory: Načteno 50 tříd komparátoru 64bit.fr.iso ETA: -: -:--
2019-10-03 11:45:52 D: difoskop.komparátory.nástroje.specializovat: Neidentifikovaný soubor. Magic říká: DOS / MBR boot sektor; oddíl 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), startovací sektor 652, 4672 sektorů
2019-10-03 11:45:52 D: difoskop.komparátory.nástroje.specializovat: Neidentifikovaný soubor. Magic říká: DOS / MBR boot sektor; oddíl 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), startovací sektor 652, 4672 sektorů
2019-10-03 11:45:52 D: difoskop.komparátory.nástroje.porovnat: Porovnání linuxmint-19.2-xfce-64bit.fr.iso (FilesystemFile) a linuxmint-19.2-xfce-64bit.na.iso (FilesystemFile)
2019-10-03 11:45:52 D: difoskop.komparátory.nástroje.soubor: Binární.has_same_content: < linuxmint-19.2-xfce-64bit.fr.iso> < linuxmint-19.2-xfce-64bit.na.iso>
2019-10-03 11:45:53 D: difoskop.komparátory.nástroje.porovnat: has_same_content_as vrátil True; přeskočení dalších srovnání
| ###################################################### ### | 100% čas: 0:00:01
2019-10-03 11:45:53 D: difoskop.tempfiles: Čištění 0 dočasných souborů
2019-10-03 11:45:53 D: difoskop.tempfiles: Čištění 0 dočasných adresářů
$

No, zatím, tak dobře. Další testy byly provedeny na obrázcích z různých verzí as různými velikostmi souborů. Všechny vyústily v interní chybu, která sahá zpět k příkazu „diff“, kterému došlo vnitřní paměť. Vypadá to, že existuje limit velikosti souboru asi 50 milionů. Proto jsem vytvořil dva menší obrázky, každý po 10 milionech, a předal jsem je 'difoskopu' pro srovnání. Obrázek 6 ukazuje výsledek. Výstupem je stromová struktura obsahující soubor 'nsswitch.conf 'se zvýrazněnými rozdíly.

Obrázek 6: Porovnání dvou obrazů ISO pomocí 'difoskopu'

Lze poskytnout také verzi výstupu ve formátu HTML. Obrázek 7 ukazuje výstup jako soubor HTML ve webovém prohlížeči. Je to dosažitelné pomocí přepínače

'--html výstup.html '.

Obrázek 7: Porovnání dvou obrazů ISO pomocí 'difoskopu' (výstup HTML)

V případě, že se vám výstupní styl nelíbí nebo jej chcete sladit s korporátní identitou vaší společnosti, můžete si výstup přizpůsobit pomocí vlastního souboru CSS pomocí přepínače '-css style.css ', který načte styl z odkazovaného souboru CSS.

Závěr

Hledání rozdílů mezi dvěma adresáři nebo dokonce celými ISO obrazy je trochu složité. Výše uvedené nástroje vám pomohou zvládnout tento úkol. Takže šťastné hackování!

Děkuju
Autor by chtěl poděkovat Axelovi Beckertovi za pomoc při přípravě článku.

Odkazy a reference

* [1] Colordiff
* [2] colordiff, balíček Debianu,
* [3] diffutils
* [4] diffutils, balíček Debianu,
* [5] fldiff
* [6] xxdiff
* [7] dirdiff
* [8] difoskop
* [9] difoskop, balíček Debian
* [10] atool, balíček Debianu
* [11] Stručné představení některých běžných formátů obrazových souborů
* [12] ISO 9660, Wikipedia
* [13] Rock Ridge, Wikipedia
* [14] Joliet, Wikipedia
* [15] Apple ISO 9660 Extensions, Wikipedia
* [16] Jak ověřovat obrázky ISO, Linux Mint
* [17] Pokud jste si stáhli Linux Mint 20. února, dejte si pozor na hacknuté ISO!
* [18] icdiff
* [19] icdiff, balíček Debianu
* [20] Projekt reprodukovatelných sestav
* [21] Projekt Reprodukovatelné stavby, Debian Wiki

V systému Windows 10 nefunguje levé tlačítko myši
Pokud používáte speciální myš s notebookem nebo stolním počítačem, ale levé tlačítko myši nefunguje ve Windows 10/8/7 z nějakého důvodu uvádíme několi...
Kurzor při psaní v systému Windows 10 skáče nebo se pohybuje náhodně
Pokud zjistíte, že kurzor myši skáče nebo se pohybuje sám, automaticky, náhodně při psaní v notebooku nebo počítači se systémem Windows, pak vám někte...
Jak obrátit směr posouvání myši a touchpadu ve Windows 10
Myš a Touchpadnejenže usnadňují výpočet, ale jsou efektivnější a méně časově náročné. Nemůžeme si představit život bez těchto zařízení, ale přesto je ...