ISO образ

Сравнение образов ISO

Сравнение образов ISO
Для настройки и обслуживания вычислительных устройств дистрибьюторы Linux регулярно предоставляют соответствующие образы ISO для своих выпусков. Это упрощает поддержание наших систем в актуальном состоянии с помощью полной компиляции программного обеспечения, которое действительно совмещается в идеальных условиях.

Представьте, что у вас есть несколько таких ISO-образов, хранящихся локально. Как определить подлинность полученных ISO-образов?? В этой статье мы покажем вам, как проверить целостность и подлинность образа ISO, который был загружен ранее, и как выяснить, в чем разница между фактическим содержимым двух образов ISO. Это поможет вам проверить процесс сборки образа ISO и увидеть, что могло измениться между двумя сборками или доступными выпусками.

Форматы изображений

Формат образов дисков имеет свою историю [11]. Общий стандарт - ISO 9660 [12], который описывает содержимое оптического диска в целом. Используется расширение файла .iso для идентификации файла изображения (клонированная копия).

Исходный формат ISO 9660 имеет ряд ограничений, таких как 8 уровней каталогов, а также длина имен файлов. Эти ограничения были уменьшены за счет введения ряда расширений, таких как Rock Ridge [13] (сохранение разрешений POSIX и более длинных имен), Joliet [14] (хранение имен Unicode в UCS-2) и Apple ISO 9660 Extensions. [15], который представил поддержку HFS.

Чтобы получить более подробную информацию о файле изображения, используйте команду 'file', за которой следует имя файла данных, как показано ниже:

.Листинг 1: Отображение подробностей для файла ISO

$ файл *.iso
debian-10.1.0-amd64-netinst.iso: загрузочный сектор DOS / MBR;
раздел 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63),
startsector 3808, 5664 сектора
xubuntu-18.04.3-рабочий стол-amd64.iso: загрузочный сектор DOS / MBR;
раздел 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63),
startsector 11688, 4928 секторов $

Проверка загруженных файлов ISO

Надежные поставщики программного обеспечения всегда предлагают вам две вещи для загрузки - фактический образ ISO, а также соответствующую контрольную сумму образа, чтобы выполнить проверку целостности загруженного файла. Последний позволяет вам подтвердить, что ваш локальный файл является точной копией файла, присутствующего на серверах загрузки, и что во время загрузки ничего не пошло не так. В случае ошибки во время загрузки локальный файл повреждается и может вызвать случайные проблемы во время установки [16].

Более того, если образ ISO был скомпрометирован (как это произошло с Linux Mint в начале 2016 года [17]), две контрольные суммы не будут совпадать. Вы можете рассчитать контрольные суммы с помощью md5sum (устарело, больше не рекомендуется) и sha256sum следующим образом:

.Листинг 2: Расчет контрольной суммы для файлов ISO

$ md5sum *.iso
b931ef8736c98704bcf519160b50fd83 debian-10.1.0-amd64-netinst.iso
0c268a465d5f48a30e5b12676e9f1b36 xubuntu-18.04.3-рабочий стол-amd64.iso
$ sha256sum *.iso
7915fdb77a0c2623b4481fc5f0a8052330defe1cde1e0834ff233818dc6f301e debian-10.1.0-amd64-netinst.iso
3c9e537ee1cf64088251e56b4ca1694944ad59126f298f24a78cd43af152b5b3 xubuntu-18.04.3-рабочий стол-amd64.iso
$

Вы можете вызвать сравнение между предоставленным файлом контрольной суммы и локально сохраненным ISO-образом, как показано в листинге 3. Вывод OK в конце строки сигнализирует, что обе контрольные суммы одинаковы.

.Листинг 3: Сравните предоставленные контрольные суммы

$ sha256sum --check sha256sum.txt xubuntu-18.04.3-рабочий стол-amd64.iso: ОК
$

Сравнение двух локально сохраненных файлов ISO

Может случиться так, что вы загрузили два файла ISO и хотите выяснить, полностью ли они одинаковы. Команда 'sha256sum' снова полезна, и мы рекомендуем вам инкапсулировать эту проверку в сценарий оболочки. В листинге 4 вы видите соответствующий сценарий bash, который объединяет четыре команды 'sha256sum', 'cut', 'uniq' и 'wc', чтобы разделить первый столбец для всех строк вывода и объединить их, если они идентичны. , и подсчитайте количество оставшихся строк. Если два (или более) файла ISO одинаковы, то их контрольные суммы идентичны, останется только одна строка, и сценарий bash выдаст сообщение «файлы одинаковы», в конечном итоге:

.Листинг 4: Автоматическое сравнение контрольных сумм файлов ISO с помощью sha256sum

#!/ bin / bash
 
если ['sha256sum *.iso | cut -d "-f1 | uniq | wc -l 'eq 1]
тогда
эхо "файлы такие же"
еще
echo "файлы не идентичны"
фи

Если сценарий возвращает, что два файла разные, вас может заинтересовать точное положение неравенства. Сравнение порядка байтов можно выполнить с помощью команды cmp, которая выводит первый байт, который различается между файлами:

.Листинг 5: Посмотрите различия между двумя или более файлами с помощью cmp

$ cmp *.iso
debian-10.1.0-amd64-netinst.iso xubuntu-18.04.3-рабочий стол-amd64.iso Different: байт 433, строка 4
$

Сравнение фактического содержания

До сих пор мы сравнивали порядок байтов, а теперь более подробно рассмотрим содержимое файлов ISO, которые нужно сравнить друг с другом. На этом этапе в игру вступает ряд инструментов, которые помогают сравнивать отдельные файлы, целые структуры каталогов, а также сжатые архивы и образы ISO.
Команда 'diff' помогает сравнить каталог с помощью двух переключателей '-r' (сокращение от '-recursive') и '-q' (сокращение от '-brief'), за которыми следуют два каталога для сравнения друг с другом. Как видно в

В листинге 6 'diff' сообщает, какие файлы уникальны для каждого каталога, и изменился ли файл с тем же именем.

.Листинг 6: Сравнение двух каталогов с помощью 'diff'

$ diff -qr t1 / t2 /
Только в t1 /: blabla.conf.
Файлы t1 / nsswitch.conf и t2 / nsswitch.conf разные.
Только в t2 /: pwd.conf.
$

Чтобы сравнить два образа ISO, просто смонтируйте два файла образа в разные каталоги и переходите оттуда.
Более красочный вывод в командной строке обеспечивается инструментами colordiff [1,2] и icdiff [18,19]. На рисунке 1 показан вывод icdiff, в котором различия между двумя файлами nsswitch.conf 'выделены зеленым или красным.

Рисунок 1: Сравнение двух каталогов с помощью icdiff

Графические инструменты для сравнения каталогов включают 'fldiff' [5], 'xxdiff' [6] и 'dirdiff' [7]. 'xxdiff' был вдохновлен 'fldiff', поэтому они очень похожи. Записи с похожим содержанием выделяются на белом или сером фоне, а записи с разным содержанием - на светло-желтом фоне. Записи с ярко-желтым или зеленым фоном уникальны для каталога.

Рисунок 2: Сравнение двух каталогов с помощью 'fldiff'

'xxdiff' отображает различия файлов в отдельном окне при нажатии на запись (см. рисунок 3).

Рисунок 3: Сравнение двух каталогов с помощью xxdiff

Следующий кандидат - dirdiff. Он основан на функциональности xxdiff и может сравнивать до пяти каталогов. Файлы, которые существуют в любом каталоге, отмечены знаком X. Интересно, что цветовая схема, которая используется для окна вывода, такая же, как и в icdiff (см. Рисунок 4).

Рисунок 4: Сравнение двух каталогов с помощью 'dirdiff'

Следующий шаг - сравнение сжатых архивов и целых ISO-образов. Хотя команда 'adiff' из пакета 'atool' [10] может быть вам уже известна, вместо этого мы рассмотрим команду 'diffoscope' [8,9]. Он описывает себя как «инструмент, позволяющий разобраться в том, что отличает файлы и каталоги от других. Он рекурсивно распаковывает архивы многих видов и преобразует различные двоичные форматы в более удобочитаемые формы для их сравнения ». Источником инструмента является проект воспроизводимых сборок [19,20], который представляет собой «набор практик разработки программного обеспечения, создающих независимо проверяемый путь от исходного кода к двоичному коду». Среди прочего, он поддерживает следующие форматы файлов:

* Android APK-файлы и загрузочные образы
* Файлы базы данных Berkeley DB
* Образы файловой системы Coreboot CBFS
* Debian .buildinfo и .изменяет файлы
* Пакеты с исходным кодом Debian (.dsc)
* Двоичные файлы ELF
* Репозитории Git
* Образы компакт-дисков ISO 9660
* Двоичные файлы MacOS
* Открытые ключи OpenSSH
* Архивы пакетов OpenWRT (.ipk)
* Подписанные / зашифрованные PGP сообщения
* Документы PDF и PostScript
* RPM архивы чеснока

На рисунке 5 показан результат работы diffoscope при сравнении двух разных версий пакетов Debian - вы точно увидите внесенные изменения. Сюда входят как имена файлов, так и их содержимое.

Рисунок 5: Сравнение двух пакетов Debian с помощью diffoscope (отрывок)

В листинге 7 показан результат работы diffoscope при сравнении двух образов ISO размером 1.9G каждый. В этом случае два образа ISO принадлежат Linux Mint Release 19.2, в то время как один файл изображения был получен с французского сервера, а другой - с австрийского (отсюда буквы "fr" и "at"). Через несколько секунд "diffoscope" заявляет, что два файла полностью идентичны.

.Листинг 7: Сравнение двух образов ISO с помощью diffoscope

$ diffoscope linuxmint-19.2-xfce-64бит.fr.iso linuxmint-19.2-xfce-64бит.в.iso
| ######################################################################## ### | 100% Время: 0:00:00
$

Чтобы заглянуть за кулисы, полезно вызвать «diffoscope» с двумя параметрами «-debug» и «-text -» для более подробного вывода на терминал. Это позволяет узнать, что делает инструмент. В листинге 8 показан соответствующий результат.

.Листинг 8: За кулисами 'diffoscope'

$ diffoscope --debug --text - linuxmint-19.2-xfce-64бит.fr.iso
linuxmint-19.2-xfce-64бит.в.iso
2019-10-03 13:45:51 D: дифоскоп.главная: Стартовый диффузор 78
2019-10-03 13:45:51 D: дифоскоп.locale: нормализация языкового стандарта, часового пояса и т. д.
2019-10-03 11:45:51 D: дифоскоп.main: Начальное сравнение
2019-10-03 11:45:51 D: дифоскоп.прогресс: Регистрация < diffoscope.progress.ProgressBar object at 0x7f4b26310588> в качестве наблюдателя за прогрессом
2019-10-03 11:45:52 D: дифоскоп.компараторы: загружено 50 классов компараторов 64 бит.fr.iso ETA: -: -:--
2019-10-03 11:45:52 D: дифоскоп.компараторы.утилиты.specialize: неопознанный файл. Магия говорит: загрузочный сектор DOS / MBR; раздел 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), startsector 652, 4672 сектора
2019-10-03 11:45:52 D: дифоскоп.компараторы.утилиты.specialize: Неопознанный файл. Магия говорит: загрузочный сектор DOS / MBR; раздел 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), startsector 652, 4672 сектора
2019-10-03 11:45:52 D: дифоскоп.компараторы.утилиты.сравнить: Сравнение linuxmint-19.2-xfce-64бит.fr.iso (FilesystemFile) и linuxmint-19.2-xfce-64бит.в.iso (Файл файловой системы)
2019-10-03 11:45:52 D: дифоскоп.компараторы.утилиты.файл: двоичный.has_same_content: < linuxmint-19.2-xfce-64бит.fr.iso> < linuxmint-19.2-xfce-64бит.в.iso>
2019-10-03 11:45:53 D: дифоскоп.компараторы.утилиты.сравнить: has_same_content_as вернул True; пропуская дальнейшие сравнения
| ######################################################################## ### | 100% Время: 0:00:01
2019-10-03 11:45:53 D: дифоскоп.tempfiles: Очистка 0 временных файлов
2019-10-03 11:45:53 D: дифоскоп.tempfiles: Очистка 0 временных каталогов
$

Ну пока все хорошо. Следующие тесты проводились на изображениях из разных выпусков и с разными размерами файлов. Все они привели к внутренней ошибке, которая восходит к команде 'diff', из-за которой не хватает внутренней памяти. Похоже, ограничение на размер файла составляет около 50 МБ. Вот почему я сделал два меньших изображения по 10M каждое и передал их в «diffoscope» для сравнения. На рисунке 6 показан результат. Результатом является древовидная структура, содержащая файл 'nsswitch.conf 'с выделенными отличиями.

Рисунок 6: Сравнение двух изображений ISO с помощью «дифоскопа»

Также может быть предоставлена ​​HTML-версия вывода. На рисунке 7 показан результат в виде HTML-файла в веб-браузере. Это достигается с помощью переключателя

'--html вывод.html '.

Рисунок 7: Сравнение двух изображений ISO с помощью 'diffoscope' (вывод HTML)

Если вам не нравится стиль вывода или вы хотите, чтобы он соответствовал фирменному стилю вашей компании, вы можете настроить вывод с помощью собственного файла CSS, используя переключатель '-css style.css ', который загружает стиль из указанного файла CSS.

Заключение

Найти различия между двумя каталогами или даже целыми образами ISO немного сложно. Показанные выше инструменты помогут вам справиться с этой задачей. Итак, удачного взлома!

Спасибо
Автор благодарит Axel Beckert за помощь при подготовке статьи.

Ссылки и ссылки

* [1] colordiff
* [2] colordiff, пакет Debian,
* [3] diffutils
* [4] diffutils, пакет Debian,
* [5] fldiff
* [6] xxdiff
* [7] dirdiff
* [8] дифоскоп
* [9] diffoscope, пакет Debian
* [10] atool, пакет Debian
* [11] Краткое описание некоторых распространенных форматов файлов изображений
* [12] ISO 9660, Википедия
* [13] Рок Ридж, Википедия
* [14] Джолиет, Википедия
* [15] Apple ISO 9660 Extensions, Википедия
* [16] Как проверить образы ISO, Linux Mint
* [17] Остерегайтесь взломанных ISO, если вы загрузили Linux Mint 20 февраля!
* [18] icdiff
* [19] icdiff, пакет Debian
* [20] Проект воспроизводимых сборок
* [21] Проект воспроизводимых сборок, Debian Wiki

Лучшие игры с командной строкой для Linux
Командная строка - не только ваш главный союзник при использовании Linux - она ​​также может быть источником развлечений, потому что вы можете использ...
Лучшие приложения для сопоставления геймпадов для Linux
Если вам нравится играть в игры на Linux с помощью геймпада вместо стандартной системы ввода с клавиатуры и мыши, для вас есть несколько полезных прил...
Полезные инструменты для геймеров Linux
Если вам нравится играть в игры на Linux, скорее всего, вы использовали приложения и утилиты, такие как Wine, Lutris и OBS Studio, для улучшения игров...