ISO-bilde

Sammenligning av ISO-bilder

Sammenligning av ISO-bilder
For å sette opp og vedlikeholde databehandlere, leverer Linux-distributører jevnlig ISO-bilder for utgivelsene. Dette forenkler å holde systemene våre oppdatert ved hjelp av en fullstendig samling av programvare som faktisk passer sammen, under ideelle omstendigheter.

Tenk deg at du har flere av disse ISO-bildene lagret lokalt. Hvordan finner du ut at hentede ISO-bilder er autentiske? I denne artikkelen viser vi deg hvordan du kan verifisere integriteten og ektheten til et ISO-bilde som er lastet ned før, og hvordan du kan finne ut hva som er forskjellene mellom det faktiske innholdet i to ISO-bilder. Dette hjelper deg med å verifisere byggeprosessen for ISO-avbildet, og lar deg se hva som kan ha endret seg mellom to bygg, eller utgivelser som er tilgjengelige.

Bildeformater

Formatet på diskbilder har sin egen historie [11]. Den vanlige standarden er ISO 9660 [12] som beskriver innholdet på en optisk plate som en helhet. I bruk er filtypen .iso for å identifisere en bildefil (klonet kopi).

Det opprinnelige ISO 9660-formatet har en rekke begrensninger, for eksempel 8 katalognivåer, samt lengden på filnavnene. Disse begrensningene er redusert ved innføring av en rekke utvidelser som Rock Ridge [13] (bevaring av POSIX-tillatelser og lengre navn), Joliet [14] (lagring av Unicode-navn i UCS-2) og Apple ISO 9660 Extensions [15] som introduserte HFS-støtte.

For å få mer informasjon om en bildefil, bruk kommandoen 'fil' etterfulgt av navnet på datafilen som følger:

.Oppføring 1: Viser detaljene for en ISO-fil

$ fil *.iso
debian-10.1.0-amd64-netinst.iso: DOS / MBR oppstartssektor;
partisjon 2: ID = 0xef, start-CHS (0x3ff, 254,63), slutt-CHS (0x3ff, 254,63),
startsektor 3808, 5664 sektorer
xubuntu-18.04.3-desktop-amd64.iso: DOS / MBR oppstartssektor;
partisjon 2: ID = 0xef, start-CHS (0x3ff, 254,63), slutt-CHS (0x3ff, 254,63),
startsektor 11688, 4928 sektorer $

Bekrefte nedlastede ISO-filer

Pålitelige programvareleverandører tilbyr deg alltid to ting for nedlasting - det faktiske ISO-bildet samt den tilsvarende kontrollsummen av bildet for å gjøre en integritetskontroll for den nedlastede filen. Sistnevnte lar deg bekrefte at din lokale fil er en eksakt kopi av filen som er tilstede på nedlastingsserverne, og at ingenting gikk galt under nedlastingen. I tilfelle en feil under nedlastingen er den lokale filen ødelagt, og kan utløse tilfeldige problemer under installasjonen [16].

Videre, i tilfelle ISO-bildet har blitt kompromittert (slik det skjedde med Linux Mint tidlig i 2016 [17]), vil de to kontrollsummene ikke stemme overens. Du kan beregne sjekksummen ved å bruke 'md5sum' (avviklet, anbefales ikke lenger) og 'sha256sum' som følger:

.Oppføring 2: Beregning av kontrollsummen for ISO-filer

$ 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
$

Du kan påkalle sammenligningen mellom den medfølgende kontrollsummen og det lokalt lagrede ISO-bildet som vist i liste 3. Utgangen fra OK på slutten av en linje signaliserer at begge kontrollsummene er de samme.

.Listing 3: Sammenlign medfølgende kontrollsummer

$ sha256sum - sjekk sha256sum.txt xubuntu-18.04.3-desktop-amd64.iso: OK
$

Sammenligning av to lokalt lagrede ISO-filer

Det kan hende at du har lastet ned to ISO-filer, og du vil finne ut om de er helt like. Kommandoen 'sha256sum' er nyttig igjen, og vi anbefaler deg å kapsle denne sjekken i et skallskript. I oppføring 4 ser du et ifølge bash-skript som kombinerer de fire kommandoene 'sha256sum', 'cut', 'uniq' og 'wc' for å skille den første kolonnen for alle utgangslinjene, flett dem i tilfelle de er identiske , og tell antall linjer som er igjen. Hvis de to (eller flere) ISO-filene er de samme, er kontrollsummen identisk, bare en linje vil være igjen, og bash-skriptet vil sende meldingen "filene er de samme", til slutt:

.Listing 4: Sammenlign automatisk kontrollsummer for ISO-filer ved hjelp av 'sha256sum'

#!/ bin / bash
 
hvis ['sha256sum *.iso | kutt -d "-f1 | uniq | wc -l 'eq 1]
deretter
ekko "filene er de samme"
ellers
ekko "filene er ikke identiske"
fi

Hvis skriptet returnerer at de to filene er forskjellige, kan du være interessert i den nøyaktige plasseringen av ulikhet. En sammenligning av byteordre kan gjøres ved å bruke kommandoen 'cmp' som sender ut den første byten som er forskjellig mellom filene:

.Listing 5: Se forskjellene mellom to eller flere filer ved hjelp av 'cmp'

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

Sammenligning av det faktiske innholdet

Så langt gjorde vi en byteordersammenligning, og nå skal vi se nærmere på det faktiske innholdet i ISO-filene som skal sammenlignes med hverandre. På dette punktet spiller en rekke verktøy inn som hjelper til å sammenligne enkeltfiler, hele katalogstrukturer samt komprimerte arkiver og ISO-bilder.
Kommandoen 'diff' hjelper til med å sammenligne en katalog med de to bryterne '-r' (forkortelse for '-recursive') og '-q' (forkortelse for '-brief') etterfulgt av de to katalogene som skal sammenlignes med hverandre. Som sett i

Oppføring 6, 'diff' rapporterer hvilke filer som er unike for begge katalogene, og om en fil med samme navn er endret.

.Listing 6: Sammenligning av to kataloger ved bruk av 'diff'

$ diff -qr t1 / t2 /
Bare i t1 /: blabla.konf.
Filene t1 / nsswitch.conf og t2 / nsswitch.conf er forskjellige.
Bare i t2 /: pwd.konf.
$

For å sammenligne to ISO-bilder, monter bare de to bildefilene i separate kataloger, og gå derfra.
En mer fargerik utskrift på kommandolinjen er levert av verktøyene 'colordiff' [1,2] og 'icdiff' [18,19]. Figur 1 viser utdataene fra 'icdiff' der forskjellene mellom de to filene til 'nsswitch.conf 'er uthevet i grønt eller rødt.

Figur 1: Sammenligning av to kataloger ved bruk av 'icdiff'

Grafiske verktøy for sammenligning av kataloger inkluderer 'fldiff' [5], 'xxdiff' [6] og 'dirdiff' [7]. 'xxdiff' ble inspirert av 'fldiff', og det er derfor de ser ganske like ut. Oppføringer med lignende innhold kommer med hvit eller grå bakgrunn, og oppføringer som avviker kommer med lysegul bakgrunn. Oppføringer med lysegul eller grønn bakgrunn er unike for en katalog.

Figur 2: Sammenligning av to kataloger ved bruk av 'fldiff'

'xxdiff' viser filforskjellene i et eget vindu ved å klikke på en oppføring (se figur 3).

Figur 3: Sammenligning av to kataloger ved bruk av 'xxdiff'

Neste kandidat er 'dirdiff'. Den bygger på funksjonaliteten til 'xxdiff', og kan sammenligne opptil fem kataloger. Filer som finnes i begge kataloger er merket med en X. Interessant, fargeskjemaet som er i bruk for utgangsvinduet er det samme som 'icdiff' bruker (se figur 4).

Figur 4: Sammenligning av to kataloger ved bruk av 'dirdiff'

Å sammenligne komprimerte arkiver og hele ISO-bilder er neste trinn. Mens kommandoen "adiff" fra "atool" -pakken [10] kanskje allerede er kjent for deg, vil vi se på "diffoscope" -kommandoen [8,9] i stedet for. Den beskriver seg selv som “et verktøy for å komme til bunns i hva som gjør filer eller kataloger forskjellige. Det pakker arkiver av mange slag rekursivt og forvandler forskjellige binære formater til mer menneskelig lesbare former for å sammenligne dem ”. Opprinnelsen til verktøyet er The Reproducible Builds Project [19,20] som er “et sett med programvareutviklingspraksis som skaper en uavhengig verifiserbar vei fra kilde til binær kode”. Den støtter blant annet følgende filformater:

* Android APK-filer og oppstartsbilder
* Berkeley DB-databasefiler
* Coreboot CBFS-filsystembilder
* Debian .buildinfo og .endrer filer
* Debian-kildepakker (.dsc)
* ELF-binærfiler
* Git-arkiver
* ISO 9660 CD-bilder
* MacOS-binærfiler
* OpenSSH offentlige nøkler
* OpenWRT-pakkearkiver (.ipk)
* PGP signerte / krypterte meldinger
* PDF- og PostScript-dokumenter
* RPM arkiver gressløk

Figur 5 viser produksjonen av 'diffoskop' når du sammenligner to forskjellige versjoner av Debian-pakker - du vil se nøyaktig endringene som er gjort. Dette inkluderer både filnavn og innhold.

Figur 5: Sammenligning av to Debian-pakker ved bruk av 'diffoscope' (utdrag)

Oppføring 7 viser resultatet av 'diffoskop' når man sammenligner to ISO-bilder med størrelsen 1.9G hver. I dette tilfellet tilhører de to ISO-bildene Linux Mint Release 19.2 mens den ene bildefilen ble hentet fra en fransk server, og den andre fra en østerriksk server (derav bokstavene 'fr' og 'at'). I løpet av sekunder angir "diffoskop" at de to filene er helt identiske.

.Listing 7: Sammenligning av to ISO-bilder ved bruk av 'diffoskop'

$ diffoscope linuxmint-19.2-xfce-64bit.fr.iso linuxmint-19.2-xfce-64bit.på.iso
| ############################# ###################################### ### | 100% tid: 0:00:00
$

For å se bak kulissene hjelper det å kalle 'diffoskop' med de to alternativene '-debug' og '-text -' for begge mer detaljerte utdataene til terminalen. Dette lar deg lære hva verktøyet gjør. Oppføring 8 viser henholdsvis utdata.

.Listing 8: Bak kulissene til 'diffoskop'

$ diffoscope --debug --text - linuxmint-19.2-xfce-64bit.fr.iso
linuxmint-19.2-xfce-64bit.på.iso
2019-10-03 13:45:51 D: diffoskop.hoved: Startdiffoskop 78
2019-10-03 13:45:51 D: diffoskop.lokalitet: Normalisering av sted, tidssone osv.
2019-10-03 11:45:51 D: diffoskop.hoved: Startsammenligning
2019-10-03 11:45:51 D: diffoskop.fremgang: Registrering < diffoscope.progress.ProgressBar object at 0x7f4b26310588> som fremdriftsobservatør
2019-10-03 11:45:52 D: diffoskop.komparatorer: Lastet 50 komparatorklasser64bit.fr.iso ETA: -: -:--
2019-10-03 11:45:52 D: diffoskop.komparatorer.verktøy.spesialiserer seg: Uidentifisert fil. Magic sier: DOS / MBR-oppstartssektor; partisjon 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), startsektor 652, 4672 sektorer
2019-10-03 11:45:52 D: diffoskop.komparatorer.verktøy.spesialiserer seg: Uidentifisert fil. Magic sier: DOS / MBR-oppstartssektor; partisjon 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), startsektor 652, 4672 sektorer
2019-10-03 11:45:52 D: diffoskop.komparatorer.verktøy.sammenlign: Sammenligning av linuxmint-19.2-xfce-64bit.fr.iso (FilesystemFile) og linuxmint-19.2-xfce-64bit.på.iso (FilesystemFile)
2019-10-03 11:45:52 D: diffoskop.komparatorer.verktøy.fil: Binær.has_same_content: < linuxmint-19.2-xfce-64bit.fr.iso> < linuxmint-19.2-xfce-64bit.på.iso>
2019-10-03 11:45:53 D: diffoskop.komparatorer.verktøy.sammenlign: has_same_content_as returnerte True; hopper over ytterligere sammenligninger
| ########################### ####################################### ### | 100% tid: 0:00:01
2019-10-03 11:45:53 D: diffoskop.tempfiles: Rengjøring 0 temp filer
2019-10-03 11:45:53 D: diffoskop.tempfiles: Rengjøring av 0 midlertidige kataloger
$

Vel, så langt, så bra. De neste testene er gjort på bilder fra forskjellige utgivelser og med forskjellige filstørrelser. Alle resulterte i en intern feil som sporer tilbake til "diff" -kommandoen som går tom for internt minne. Det ser ut til at det er en filstørrelsesgrense på ca 50M. Derfor har jeg bygget to mindre bilder på 10 M hver, og overlevert det til 'diffoskop' for en sammenligning. Figur 6 viser resultatet. Utgangen er en trestruktur som inneholder filen 'nsswitch.conf 'med de uthevede forskjellene.

Figur 6: Sammenligning av to ISO-bilder ved hjelp av 'diffoskop'

Det kan også leveres en HTML-versjon av utdataene. Figur 7 viser utdataene som en HTML-fil i en nettleser. Det er oppnåelig via bryteren

'--html utdata.html '.

Figur 7: Sammenligning av to ISO-bilder ved bruk av 'diffoskop' (HTML-utgang)

Hvis du ikke liker utskriftsstilen, eller ønsker å matche den med bedriftens identitet til firmaet ditt, kan du tilpasse utdataene i din egen CSS-fil ved å bruke bryteren '-css-stil.css 'som laster inn stilen fra den refererte CSS-filen.

Konklusjon

Å finne forskjeller mellom to kataloger eller til og med hele ISO-bilder er litt vanskelig. Verktøyene vist ovenfor hjelper deg med å mestre denne oppgaven. Så lykkelig hacking!

Takk skal du ha
Forfatteren vil takke Axel Beckert for hans hjelp under forberedelsen av artikkelen.

Lenker og referanser

* [1] colordiff
* [2] colordiff, Debian-pakke,
* [3] diffutils
* [4] diffutils, Debian-pakke,
* [5] fldiff
* [6] xxdiff
* [7] dirdiff
* [8] diffoskop
* [9] diffoskop, Debian-pakke
* [10] atool, Debian-pakke
* [11] Kort introduksjon av noen vanlige bildefilformater
* [12] ISO 9660, Wikipedia
* [13] Rock Ridge, Wikipedia
* [14] Joliet, Wikipedia
* [15] Apple ISO 9660 Extensions, Wikipedia
* [16] Hvordan verifisere ISO-bilder, Linux Mint
* [17] Vokt dere for hackede ISO-er hvis du lastet ned Linux Mint 20. februar!
* [18] icdiff
* [19] icdiff, Debian-pakke
* [20] The Reproducible Builds Project
* [21] The Reproducible Builds Project, Debian Wiki

Topp 5 spillfangstkort
Vi har alle sett og elsket streaming av spill på YouTube. PewDiePie, Jakesepticye og Markiplier er bare noen av de beste spillerne som har tjent milli...
Hvordan utvikle et spill på Linux
For et tiår siden ville ikke mange Linux-brukere forutsi at deres favorittoperativsystem en dag ville være en populær spillplattform for kommersielle ...
Åpne kildeporter for kommersielle spillmotorer
Gratis, åpen kildekode og plattformspillmotorrekreasjoner kan brukes til å spille gamle så vel som noen av de ganske nylige spilletitlene. Denne artik...