SANDBOX NO FLATPAK

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

Isso é alcançado usando o 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ão 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.

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

Embora os desenvolvedores de aplicativos tenham controle sobre as permissões do sandbox que desejam configurar, as boas práticas são incentivadas e podem ser aplicadas. Por exemplo, o serviço de hospedagem Flathub impõe requisitos nos quais as permissões podem ser usadas, e o software no host pode avisar os usuários se determinadas permissões forem usadas.

As diretrizes a seguir descrevem quais permissões podem ser usadas livremente, quais podem ser usadas conforme a necessidade e quais devem ser evitadas.

Permissões padrão

As seguintes permissões fornecem acesso a recursos básicos que os aplicativos geralmente exigem e, portanto, podem ser usados ​​livremente:

  • --share=network – acessar a rede
  • --socket=x11 – mostra janelas usando o X11
  • --socket=fallback-x11– mostra janelas usando o X11, se Wayland não estiver disponível, substitui a x11permissão do soquete
  • --share=ipc – compartilhe o namespace IPC com o host (necessário para o X11)
  • --socket=wayland – mostre janelas com Wayland
  • --device=dri – Renderização OpenGL
  • --socket=pulseaudio – reproduza som com o PulseAudio

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”.

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-36Captura 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=allpode 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 ainda 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

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Blog no WordPress.com.

Acima ↑

%d blogueiros gostam disto: