
Sandbox com namespaces Linux e seccomp-bpf
Firejail é uma ferramenta de segurança leve destinada a proteger um sistema Linux criando um ambiente restrito para executar aplicativos (potencialmente não confiáveis).
Mais especificamente, é um programa de sandbox SUID que reduz o risco de violações de segurança usando namespaces do Linux, seccomp-bpf e capabilities do Linux. Ele permite que um processo e todos os seus descendentes tenham sua própria visão privada dos recursos do kernel compartilhados globalmente, como a pilha de rede, a tabela de processos e a tabela de montagens. O Firejail pode funcionar em ambientes SELinux ou AppArmor e é integrado aos Linux Control Groups.
Escrito em C com praticamente nenhuma dependência, o software roda em qualquer computador Linux com kernel versão 3.x ou mais recente. Ele pode isolar qualquer tipo de processo: servidores, aplicativos gráficos e até sessões de login de usuário. O software inclui perfis de sandbox para diversos programas Linux mais comuns, como Mozilla Firefox, Chromium, VLC, Transmission etc.
O sandbox é leve e a sobrecarga é baixa. Não há arquivos de configuração complicados para editar, nenhuma conexão de socket aberta, nenhum daemon rodando em segundo plano. Todos os recursos de segurança são implementados diretamente no kernel Linux e estão disponíveis em qualquer computador Linux.
Consulte SECURITY.md.
Para as versões suportadas, consulte SECURITY.md.
Nota: É provável que as versões do Debian stable e dos backports estejam desatualizadas, então atualmente recomendamos baixar e instalar o pacote .deb do lançamento mais recente:
Ou compilar a partir do código-fonte.
Debian stable (bullseye): Recomendamos usar o pacote backports.
Nota: É provável que as versões da distribuição e do PPA estejam desatualizadas, então atualmente recomendamos baixar e instalar o pacote .deb do lançamento mais recente:
Ou compilar a partir do código-fonte.
Nota: A recomendação do PPA é principalmente para o próprio firejail; não há problema em instalar o firetools e ferramentas relacionadas ao firejail diretamente da distribuição, caso não estejam no PPA, pois tendem a ser atualizados com menos frequência.
Para Ubuntu 18.04+ e derivados (como Linux Mint), os usuários são fortemente aconselhados a usar o PPA.
Como adicionar e instalar a partir do PPA:
sudo add-apt-repository ppa:deki/firejail
sudo apt-get update
sudo apt-get install firejail firejail-profiles
Motivo: O pacote firejail para Ubuntu 20.04 permaneceu vulnerável ao CVE-2021-26910 por meses após uma correção ter sido publicada no Launchpad:
Veja também https://wiki.ubuntu.com/SecurityTeam/FAQ:
Qual software é suportado pela equipe de Segurança do Ubuntu?
O Ubuntu é atualmente dividido em quatro componentes: main, restricted, universe e multiverse. Todos os pacotes binários em main e restricted são suportados pela equipe de Segurança do Ubuntu durante toda a vida de um lançamento do Ubuntu, enquanto os pacotes binários em universe e multiverse são suportados pela comunidade Ubuntu.
Além disso, é provável que a versão do PPA seja mais recente e contenha mais correções de perfis.
Consulte as seguintes discussões para obter detalhes:
O Firejail está disponível em várias distribuições Linux:
Exceto pelas exceções mencionadas acima, desde que sua distribuição forneça uma versão suportada do firejail, geralmente é uma boa ideia instalá-lo a partir da distribuição.
A versão pode ser verificada com firejail --version após a instalação.
Você também pode instalar um dos pacotes lançados.
Instruções para compilar e instalar a versão de desenvolvimento atual a partir do código-fonte.
Recomenda-se usar as instruções específicas da distribuição abaixo quando aplicáveis, pois elas geram pacotes nativos, o que deve facilitar a integração com o restante do sistema e o gerenciamento de pacotes.
Para outras distribuições, consulte as instruções genéricas.
Veja também .gitlab-ci.yml para ver como as compilações específicas de distribuição são feitas no CI.
Nota: O pacote AUR não é mantido por nós.
Instale o firejail-git a partir do AUR.
Exemplo:
yay -S firejail-git
Para Debian, Ubuntu e derivados:
Nota: Quaisquer flags do ./configure devem ser passadas ao
mkdeb.sh (por exemplo, ./mkdeb.sh --enable-foo).
sudo apt-get update -qy
sudo apt-get install -qy \
git build-essential fakeroot lintian libapparmor-dev pkg-config gawk
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make dist &&
./mkdeb.sh &&
sudo dpkg -i ./*.deb &&
make installcheck
Para Fedora e derivados:
Nota: Quaisquer flags do ./configure devem ser passadas ao
mkrpm.sh (por exemplo,
./platform/rpm/mkrpm.sh --enable-foo).
sudo dnf update -y
sudo dnf install -y rpm-build gcc make
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make dist &&
./platform/rpm/mkrpm.sh &&
sudo rpm -i ./*.rpm &&
make installcheck
Instruções genéricas de compilação/instalação:
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make -j "$(nproc)" &&
sudo make install-strip &&
make installcheck
No Debian/Ubuntu, você precisará instalar git e gcc.
Para compilar com suporte a AppArmor (que geralmente é usado no Debian, Ubuntu,
openSUSE e derivados), instale as bibliotecas de desenvolvimento do AppArmor e
o pkg-config e use a opção --enable-apparmor do ./configure:
sudo apt-get install git build-essential libapparmor-dev pkg-config gawk
Para compilar com suporte a SELinux (que geralmente é usado no Fedora, RHEL e
derivados), instale o libselinux1-dev (libselinux-devel no Fedora) e use a
opção --enable-selinux do ./configure.
Informações detalhadas sobre o uso do firejail a partir do git estão disponíveis na wiki.
Nota: Certifique-se de usar o caminho completo para o programa (por exemplo,
firejail /usr/bin/firefox em vez de firejail firefox) para evitar possíveis
problemas de firejail dentro de firejail (veja
#2877).
Para iniciar o sandbox, prefixe seu comando com firejail:
firejail /usr/bin/firefox # starting Mozilla Firefox
firejail /usr/bin/transmission-gtk # starting Transmission BitTorrent
firejail /usr/bin/vlc # starting VideoLAN Client
sudo firejail /etc/init.d/nginx start
Execute firejail --list em um terminal para listar todos os sandboxes ativos.
Exemplo:
$ firejail --list
1617:netblue:/usr/bin/firejail /usr/bin/firefox-esr
7719:netblue:/usr/bin/firejail /usr/bin/transmission-qt
7779:netblue:/usr/bin/firejail /usr/bin/galculator
7874:netblue:/usr/bin/firejail /usr/bin/vlc --started-from-file file:///home/netblue/firejail-whitelist.mp4
7916:netblue:firejail --list
Integre seu sandbox à sua área de trabalho executando os dois comandos a seguir:
firecfg --fix-sound
sudo firecfg
O primeiro comando resolve alguns bugs de memória compartilhada/namespace de PID em softwares PulseAudio anteriores à versão 9. O segundo comando integra o Firejail à sua área de trabalho. Você precisará fazer logout e login novamente para aplicar as alterações do PulseAudio.
Inicie seus programas da maneira que você está acostumado: menus do gerenciador de área de trabalho, gerenciador de arquivos, lançadores da área de trabalho.
A integração se aplica a qualquer programa suportado por padrão pelo Firejail. Há mais de 900 aplicativos padrão na versão atual do Firejail, e o número aumenta a cada novo lançamento.
Mantemos a lista de aplicativos em src/firecfg/firecfg.config (/etc/firejail/firecfg.config quando instalado).
A maioria das opções de linha de comando do Firejail pode ser passada ao sandbox usando arquivos de perfil.
Você pode encontrar os perfis de todos os aplicativos suportados em etc/ (/etc/firejail/ quando instalado).
Também mantemos uma lista de correções de perfis para versões anteriores em etc-fixes/.
Se você mantém perfis de segurança adicionais do Firejail em um repositório público, por favor, nos envie um link:
Use esta issue para solicitar novos perfis:
Você também pode usar esta ferramenta para obter uma lista de syscalls necessárias para um programa:
O firecfg cria symlinks em /usr/local/bin, portanto, para remover completamente o firejail, execute o seguinte antes de desinstalar:
sudo firecfg --clean
Consulte man firecfg para obter detalhes.
Nota: Symlinks quebrados são ignorados ao procurar um executável em $PATH,
portanto, desinstalar sem executar o comando acima não deve causar problemas.
LANDLOCK
Landlock is a Linux security module first introduced in version 5.13 of
the Linux kernel. It allows unprivileged processes to restrict their
access to the filesystem. Once imposed, these restrictions can never
be removed, and all child processes created by a Landlock-restricted
processes inherit these restrictions. Firejail supports Landlock as an
additional sandboxing feature. It can be used to ensure that a sand‐
boxed application can only access files and directories that it was ex‐
plicitly allowed to access. Firejail supports populating the ruleset
with both a basic set of rules (see --landlock) and with a custom set
of rules.
Important notes:
- A process can install a Landlock ruleset only if it has either
CAP_SYS_ADMIN in its effective capability set, or the "No New
Privileges" restriction enabled. Because of this, enabling the
Landlock feature will also cause Firejail to enable the "No New
Privileges" restriction, regardless of the profile or the
--nonewprivs command line option.
- Access to the /proc directory is managed through the --land‐
lock.proc command line option.
- Access to the /etc directory is automatically allowed. To
override this, use the --writable-etc command line option. You
can also use the --private-etc option to restrict access to the
/etc directory.
To enable Landlock self-restriction on top of your current Firejail se‐
curity features, pass --landlock flag to Firejail command line. You
can also use --landlock.read, --landlock.write, --landlock.special and
--landlock.execute options together with --landlock or instead of it.
Example:
$ firejail --landlock --landlock.read=/media --landlock.proc=ro /usr/bin/mc
Uma pequena ferramenta para imprimir estatísticas de perfis. Compile e instale como de costume. A ferramenta é instalada no diretório /usr/lib/firejail.
Execute-a sobre os perfis em /etc/profiles:
$ /usr/lib/firejail/profstats /etc/firejail/*.profile
No include .local found in /etc/firejail/noprofile.profile
Warning: multiple caps in /etc/firejail/tidal-hifi.profile
Warning: multiple caps in /etc/firejail/tqemu.profile
Warning: multiple caps in /etc/firejail/transmission-daemon.profile
Warning: multiple caps in /etc/firejail/trivalent.profile
Stats:
profiles 1342
include local profile 1341 (include profile-name.local)
include globals 1307 (include globals.local)
blacklist ~/.ssh 1201 (include disable-common.inc)
seccomp 1213
capabilities 1335
noexec 1214 (include disable-exec.inc)
noroot 1105
memory-deny-write-execute 320
restrict-namespaces 1048
apparmor 869
private-bin 817
private-dev 1172
private-etc 842
private-cache 865
private-lib 86
private-tmp 1036
whitelist home directory 662
whitelist var 975 (include whitelist-var-common.inc)
whitelist run/user 1305 (include whitelist-runuser-common.inc
or blacklist ${RUNUSER})
whitelist usr/share 760 (include whitelist-usr-share-common.inc
net none 452
dbus-user none 766
dbus-user filter 206
dbus-system none 970
dbus-system filter 13
Início Rápido |
Segurança Avançada do Navegador |
Segurança do Navegador Tor |