
Quando inicio firejail
, vejo meu diretório inicial completo. Quando começo firejail --whitelist=~/something
, vejo apenas something
na minha casa. Agora gostaria de restringir mais acesso ao sistema. Posso, por exemplo, adicionar --blacklist=/media
e funciona conforme o esperado.
Mas como o comportamento padrão determina que /home/OTHERUSER
, /home/*
exceto os arquivos da lista de permissões, estão ocultos? Não vejo uma regra correspondente em /etc/firejail/*
.
E os subdiretórios permitidos são possíveis? Por exemplo, --blacklist=/media --whitelist=/media/data
não funciona como esperado, mesmo quando a página de manual informa que a lista de permissões substitui outras opções como --read-only
.
Essas regras são codificadas no binário? Se não, qual regra faz essas coisas?
Um exemplo do que eu gostaria de ter. Regras básicas:
- Casa vazia, exceto pelos itens listados no perfil
- Lista negra
/media/data
- Permitir link simbólico
~/apps ->/media/data/apps
somente leitura. - Permitir
/media/data/apps
(se necessário) somente leitura.
1, 2 estão funcionando, 3 está funcionando apenas com 4 (provavelmente ok), mas substituir o acesso de leitura para um subdiretório de um diretório proibido não funciona.
Parece um pouco contra-intuitivo que funcione, mas na camada do sistema de arquivos mkdir -p foo/bar;chmod 111 foo;ls foo/bar/
(onde 111
significa que não há permissão de leitura (listagem de diretórios) em foo, mas apenas o bit executável (inserindo subdiretórios) funciona, mesmo quando ls foo/
falha.
O cenário estendido proibiria tudo, exceto uma lista de permissões (perfil + /usr, /bin, /lib, etc.). Outra coisa que não parece possível sem root (e então o próprio aplicativo roda como root) é substituir, por exemplo, /etc/passwd por um que não contenha usuários, que não deve ser conhecido na prisão. /etc
contém muitos dados legíveis, que devem ser ocultados de aplicativos não confiáveis.
Mas possivelmente o cenário estendido realmente justificaria um contêiner chroot + userspace-lxc completo.