SANDBOX NO FLATPAK

Um dos principais objetivos do Flatpak é aumentar a segurança dos sistemas de desktop, isolando os aplicativos uns dos outros.

Sandbox e significa que, por padrão, os aplicativos executados com o Flatpak têm acesso extremamente limitado ao ambiente host como:

  • Sem acesso a nenhum arquivo host, exceto o runtime do aplicativo ~/.var/app/$FLATPAK_IDe $XDG_RUNTIME_DIR/app/$FLATPAK_ID. Apenas os dois últimos sendo graváveis.
  • Sem acesso à rede.
  • Sem acesso a nenhum nó do dispositivo (além de /dev/nulletc).
  • Sem acesso a processos fora da sandbox.
  • Syscalls limitados. Por exemplo, os aplicativos não podem usar tipos de soquete de rede fora do padrão ou rastrear outros processos.
  • Acesso limitado à instância do D-Bus da sessão – um aplicativo pode possuir apenas seu próprio nome no barramento.
  • Sem acesso a serviços host como X11, D-Bus do sistema ou PulseAudio.

A maioria dos aplicativos precisará acessar alguns desses recursos para ser útil. Isso é feito principalmente durante o estágio de empacotamento.

Portais

Portais são uma estrutura para fornecer acesso a recursos fora da sandbox, incluindo:

• Abrindo arquivos com um diálogo nativo de seleção de arquivos
• Abrindo URIs
• Impressão
• Mostrando notificações
• Tirando screenshots
• Inibindo que a sessão do usuário termine, suspenda, fique inativa ou seja trocada
• Obtendo informações de status da rede


Em muitos casos, os portais usam um componente do sistema para pedir implicitamente permissões ao usuário antes de conceder acesso a um recurso específico. Por exemplo, no caso de abertura de um arquivo, a seleção do usuário pelo arquivo usando a caixa de diálogo do seletor de arquivos, é interpretada como concedendo implicitamente ao aplicativo o acesso a qualquer arquivo escolhido.


Outro exemplo é do portal para permissão de compartilhamento de tela:

Essa abordagem permite que os aplicativos evitem configurar o acesso geral a grandes quantidades de dados ou serviços e oferece aos usuários controle sobre o que seus aplicativos têm acesso.
Os kits de ferramentas de interface, como GTK3+ e Qt5+, implementam suporte transparente a portais, o que significa que os aplicativos não precisam fazer nenhum trabalho adicional para usá-los (vale a pena verificar quais portais cada kit de ferramentas suporta).

Diretrizes de permissões

Ao instalar um Flatpak seja em CLI ou via GUI (GNOME Software) é mostrado quais permissões ele terá antes de instalar:

via CLI:

Via GNOME Software:

Para verificar o sanbox de um flatpak, vamos ver o exemplo com o Firefox via Flathub:

Na esquerda com comando bash via sandbox do Firefox e na direita o sistema nativo, note que na sua /home o flatpak tem acesso apenas ao diretório “Downloads” e na direita o Firefox .rpm tem acesso a partes sensíveis do OS.

Captura de tela de 2020-07-27 16-59-20

As permissões e acessos concedidos ao Flatpak em questão, podem ser vistas com:

cat /.flatpak-info

Captura de tela de 2020-07-27 17-02-32

Você também pode verificar via Flatseal:

Captura de tela de 2020-07-27 17-03-36
Captura de tela de 2020-07-27 17-03-27

Como visto no Flatseal, existe outros tipos de permissões que o usuário ou mantenedor do Flatpak em questão, pode habilitar como:

Acesso ao sistemas de arquivos

O Flatpak oferece um conjunto flexível de opções:

  • --filesystem=host – acessar arquivos normais no host, sem incluir os sistemas operacionais do host ou sistemas internos.Esta opção na verdade não fornece acesso completo ao sistema de arquivos host. As principais regras são:
    • Esses diretórios estão na lista negra: /lib, /lib32, /lib64, /bin, /sbin, /usr, /boot, /root, /tmp, /etc, /app, /run, /proc, /sys, /dev, /var
    • Exceções da lista negra: /run/media
    • Esses diretórios são montados sob /var/run/host: /etc,/usr
  • --filesystem=home – acessar o diretório inicial do usuário
  • --filesystem=/path/path – acessar caminhos específicos
  • --filesystem=xdg-download – acessar uma pasta XDG específica

Acesso ao dispositivo:

Embora não seja o ideal, --device=all pode ser usado para acessar dispositivos como controladores ou webcams.

Conclusão

Como podemos ver, sandbox é diferente de “falta de integração com o sistema” como muitos haters pregam por aí. Ao contrário, é a integração feita com controle e de forma mais segura.

O Flatpak ainda precisa desenvolver portais/permissões para adicionar mais integração com aplicações específicas, como dito pelo dev do Flatpak, mas o que já temos hoje atende a maioria, se não todas as aplicações mais populares do desktop Linux.

Documentação do Flatpak

Se deseja me enviar sugestões mande para fastos2016@gmail.com ou nas redes sociais.

Deixe um comentário

Blog no WordPress.com.

Acima ↑