Разработчики дистрибутива NixOS сообщили о реализации поддержки верификации целостности минимального iso-образа (iso_minimal.x86_64-linux) при помощи механизма повторяемых сборок. Ранее повторяемые сборки были доступны на уровне отдельных пакетов, а теперь расширены и для всего iso-образа. Любой пользователь может сформировать iso-образ, полностью идентичный с предоставляемым для загрузки iso-образом, и убедиться, что он собран из предоставляемых исходных текстов и не содержит скрытых изменений. Для автоматизации проверки iso-образа NixOS при помощи повторяемых сборок подготовлен специальный скрипт. На следующем этапе повторяемые сборки планируется обеспечить для полного iso-образа с рабочим столом GNOME.
Повторяемые сборки являются важным звеном обеспечения безопасности, так как дают возможность самостоятельно проверить, что предлагаемые дистрибутивом сборки байт в байт совпадает со сборками, собранными лично из исходных текстов. Без возможности проверить тождественность бинарной сборки пользователю остаётся лишь слепо доверять чужой сборочной инфраструктуре, компрометация компилятора или сборочного инструментария в которой может привести к подстановке скрытых закладок. Для обеспечения повторяемых сборок требуется воспроизвести начинку и параметры сборочного окружения, использовать идентичные версии программ, зависимостей и загрузочных компонентов, исключить внесение меняющихся данных (метки времени, случайные заполнители и т.п.), а также сохранить порядок сборки файлов и поставки пакетов в iso-образе.
Напомним, что дистрибутив NixOS основан на пакетном менеджере Nix и предоставляет ряд собственных разработок, упрощающих настройку и сопровождение системы. Например, в NixOS используется единый файл системной конфигурации (configuration.nix), предоставляется возможность быстрого отката обновлений, присутствует поддержка переключения между различными состояниями системы, поддерживается установка индивидуальных пакетов отдельными пользователями (пакет ставится в домашний каталог) и возможна одновременная установка нескольких версий одной программы. При использовании Nix пакеты устанавливаются в отдельное дерево директорий /nix/store или поддиректорию в каталоге пользователя. Например, пакет устанавливается как /nix/store/f2b5…8a563-firefox-89.0.1/, где “f2b5…” является уникальным идентификатором пакета, используемым для контроля зависимостей.
Пакеты оформляются в виде контейнеров, содержащих необходимые для работы приложений компоненты. Между пакетами возможно определение зависимостей, при этом для поиска наличия уже установленных зависимостей используется сканирование хэшей-идентификаторов в директории установленных пакетов. Возможна как загрузка готовых бинарных пакетов из репозитория (при установке обновлений к бинарным пакетам загружаются только delta-изменения), так и сборка из исходных текстов со всеми зависимостями. Коллекция пакетов представлена в специальном репозитории Nixpkgs.