Foi publicada uma nova versão estável da ferramenta Flatpak 1.14, que fornece um sistema para compilar pacotes autossuficientes, não vinculados a distribuições específicas do Linux e executados em um contêiner especial, isolando o aplicativo do restante do sistema. O suporte à execução de pacotes Flatpak está garantido para Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux e Ubuntu. Pacotes com Flatpak estão incluídos no repositório Fedora e são suportados no programa de gerenciamento de aplicativos GNOME.
Novidades na versão Flatpak 1.14:
- Foi garantida a criação de um diretório para arquivos no estado (.local/state) e a definição da variável de ambiente XDG_STATE_HOME apontando para esse diretório.
- Adicionadas verificações condicionais do tipo "have-kernel-module-nome" para determinar a presença de módulos do kernel (um equivalente universal à verificação anteriormente proposta have-intel-gpu, que agora pode ser substituída pela expressão "have-kernel-module-i915").
- Implementado o comando "flatpak document-unexport --doc-id=…".
- Exportação de metadados do Appstream para uso no ambiente principal foi garantida.
- Adicionadas regras de autocompletar comandos flatpak para o terminal Fish.
- O acesso à rede para serviços X11 e PulseAudio foi permitido (com a adição das configurações apropriadas).
- A branch principal no repositório Git foi renomeada de "master" para "main", pois a palavra "master" tem sido considerada politicamente incorreta nos últimos tempos.
- Foi garantida a reescrita de scripts de inicialização em caso de renomeação do aplicativo.
- Adicionadas opções "--include-sdk" e "--include-debug" ao comando install para instalar o SDK e arquivos de debuginfo.
- Nos arquivos flatpakref e flatpakrepo, foi adicionada a suporte ao parâmetro "DeploySideloadCollectionID", onde ao instalar, o identificador da coleção será definido durante a adição do repositório remoto, e não após o download dos metadados.
- Foi permitido a criação de ambientes sandbox aninhados para handlers em sessões com nomes MPRIS (Especificação de Interface Remota do Reprodutor de Mídia).
- Nas ferramentas de linha de comando, foi garantida a exibição de informações sobre o uso de extensões de runtime obsoletas.
- No comando uninstall, implementada a solicitação de confirmação antes da remoção de runtime ou extensões de runtime que ainda estão em uso.
- Adicionada suporte à opção "--socket=gpg-agent" em comandos como "flatpak run".
- No libostree foi corrigida uma vulnerabilidade que poderia permitir que um usuário excluísse arquivos arbitrários no sistema através de manipulações com o manipulador flatpak-system-helper (enviando uma solicitação de exclusão com um nome de ramo especialmente formatado). O problema ocorre apenas em versões antigas do Flatpak e do libostree lançadas antes de 2018 (< 0.10.2) e não afeta lançamentos atuais.
Lembramos que o Flatpak oferece aos desenvolvedores de aplicativos a oportunidade de simplificar a distribuição de seus programas que não estão nos repositórios padrão das distribuições, preparando um único contêiner universal sem a necessidade de criar compilações separadas para cada distribuição. Para os usuários preocupados com a segurança, o Flatpak permite executar um aplicativo duvidoso em um contêiner, concedendo acesso apenas às funcionalidades de rede e arquivos do usuário relacionados ao aplicativo. Para os usuários interessados em novidades, o Flatpak permite instalar as versões mais recentes de teste e estáveis dos aplicativos sem a necessidade de fazer alterações no sistema. Por exemplo, pacotes Flatpak são empacotados para LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio, etc.
Para reduzir o tamanho do pacote, ele inclui apenas as dependências específicas do aplicativo, enquanto as bibliotecas de sistema e gráficas básicas (GTK, Qt, bibliotecas GNOME e KDE, etc.) estão organizadas em forma de ambientes de execução padrão plugáveis. A principal diferença entre Flatpak e Snap é que o Snap utiliza componentes do ambiente do sistema principal e isolamento baseado na filtragem de chamadas do sistema, enquanto o Flatpak cria um contêiner separado do sistema e opera grandes conjuntos de runtime, fornecendo como dependências não pacotes, mas ambientes de sistema padrão (por exemplo, todas as bibliotecas necessárias para o funcionamento de aplicativos GNOME ou KDE).
Além do ambiente de sistema típico (runtime), que é instalado através de um repositório especial, são fornecidas dependências adicionais (bundle) necessárias para o funcionamento do aplicativo. Juntas, o runtime e o bundle formam o conteúdo do contêiner, sendo que o runtime é instalado separadamente e associado a vários contêineres, evitando a duplicação de arquivos de sistema comuns aos contêineres. Vários runtimes diferentes (GNOME, KDE) ou várias versões de um mesmo runtime (GNOME 3.40, GNOME 3.42) podem ser instalados em um único sistema. O contêiner com o aplicativo como dependência utiliza o vínculo apenas a um runtime específico, desconsiderando os pacotes individuais que compõem o runtime. Todos os elementos ausentes são empacotados diretamente junto com o aplicativo. Ao formar o contêiner, o conteúdo do runtime é montado como a partição /usr, enquanto o bundle é montado no diretório /app.
O conteúdo do runtime e dos contêineres de aplicativos é formado utilizando a tecnologia OSTree, onde a imagem é atualizada de forma atômica a partir de um repositório semelhante ao Git, permitindo a aplicação de métodos de controle de versão aos componentes da distribuição (por exemplo, é possível reverter rapidamente o sistema para um estado anterior). Pacotes RPM são traduzidos para o repositório OSTree através de uma camada especial chamada rpm-ostree. A instalação e atualização separadas de pacotes dentro do ambiente de trabalho não são suportadas, o sistema é atualizado não em nível de componentes individuais, mas de forma integral, alterando seu estado de forma atômica. Ferramentas são fornecidas para a aplicação incremental de atualizações, evitando a necessidade de substituição completa da imagem a cada atualização.
O ambiente isolado formado é completamente independente do sistema de distribuição utilizado e, sob as devidas configurações do pacote, não tem acesso aos arquivos e processos do usuário ou do sistema principal, não podendo acessar diretamente o hardware, exceto pela saída via DRI, e pelas chamadas ao subsistema de rede. A saída gráfica e a organização da entrada são implementadas por meio do protocolo Wayland ou através do redirecionamento do socket X11. A interação com o ambiente externo é baseada em um sistema de troca de mensagens DBus e em uma API especial chamada Portals.
Para isolamento, utiliza-se a camada Bubblewrap e tecnologias tradicionais de virtualização de contêineres do Linux, baseadas no uso de cgroups, espaços de nomes (namespaces), Seccomp e SELinux. Para a saída de áudio, utiliza-se PulseAudio. Nesse caso, o isolamento pode ser desligado, o que é aproveitado por desenvolvedores de muitos pacotes populares para obter acesso completo ao sistema de arquivos e a todos os dispositivos no sistema. Por exemplo, pacotes como GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity e VLC vêm com um modo de isolamento restrito que deixa o acesso total ao diretório pessoal. Em caso de comprometimento dos pacotes com acesso ao diretório pessoal, apesar da etiqueta 'sandboxed' na descrição do pacote, para que o atacante execute seu código, é suficiente alterar o arquivo ~/.ashrc. Uma questão separada é o controle sobre as alterações feitas nos pacotes e a confiança nos construtores de pacotes, que frequentemente não estão associados ao projeto principal ou às distribuições.
Fonte: opennet.ru
