Os desenvolvedores da distribuição NixOS anunciaram a implementação do suporte à verificação de integridade da imagem ISO mínima (iso_minimal.x86_64-linux) através do mecanismo de builds repetíveis. Anteriormente, os builds repetíveis estavam disponíveis apenas em nível de pacotes individuais, mas agora foram expandidos para toda a imagem ISO. Qualquer usuário pode criar uma imagem ISO que seja idêntica à imagem ISO disponibilizada para download e verificar que ela foi construída a partir dos códigos-fonte fornecidos, sem alterações ocultas. Para automatizar a verificação da imagem ISO do NixOS através de builds repetíveis, foi preparado um script especial. Na próxima etapa, os builds repetíveis estão planejados para serem disponibilizados para a imagem ISO completa com a área de trabalho GNOME.
Os builds repetíveis são uma parte importante da segurança, pois permitem verificar pessoalmente se as compilações oferecidas pela distribuição correspondem exatamente às compilações feitas a partir dos códigos-fonte. Sem a capacidade de verificar a identidade da compilação binária, o usuário deve confiar cegamente na infraestrutura de build de terceiros, cuja compromissão do compilador ou da ferramenta de compilação pode levar à inserção de backdoors ocultos. Para garantir builds repetíveis, é necessário reproduzir o conteúdo e os parâmetros do ambiente de build, usar versões idênticas de programas, dependências e componentes de boot, excluir a introdução de dados variáveis (timestamps, preenchimentos aleatórios, etc.) e manter a ordem de build dos arquivos e a entrega dos pacotes na imagem ISO.
Lembramos que a distribuição NixOS é baseada no gerenciador de pacotes Nix e oferece uma série de desenvolvimentos próprios que simplificam a configuração e a manutenção do sistema. Por exemplo, o NixOS usa um único arquivo de configuração do sistema (configuration.nix), permite a reversão rápida de atualizações, suporta a troca entre diferentes estados do sistema, possibilita a instalação de pacotes individuais por usuários específicos (o pacote é instalado no diretório pessoal) e permite a instalação simultânea de várias versões do mesmo programa. Quando se utiliza o Nix, os pacotes são instalados em uma árvore de diretórios separada /nix/store ou em um subdiretório no diretório do usuário. Por exemplo, um pacote é instalado como /nix/store/f2b5…8a563-firefox-89.0.1/, onde “f2b5…” é um identificador único do pacote, utilizado para controle de dependências.
Os pacotes são organizados em contêineres que contêm os componentes necessários para o funcionamento das aplicações. É possível definir dependências entre pacotes, e para verificar a existência de dependências já instaladas, é feita uma varredura dos hashes-identificadores na diretório dos pacotes instalados. É possível tanto o download de pacotes binários prontos do repositório (ao instalar atualizações para pacotes binários, apenas as alterações delta são baixadas), quanto a compilação a partir do código-fonte com todas as dependências. A coleção de pacotes está disponível em um repositório especial chamado Nixpkgs.
Fonte: opennet.ru
