- À medida que ferramentas de apoio ao desenvolvimento com IA são usadas com cada vez mais frequência, torna-se necessário um ambiente de execução em sandbox que garanta ao mesmo tempo segurança do sistema e conveniência
- Por padrão, o Claude Code pede permissão sempre que acessa arquivos ou executa algo, mas isso atrapalha o fluxo de trabalho por causa das confirmações repetitivas
- Para resolver isso, é proposta uma configuração leve de sandbox com bubblewrap, mais leve que Docker e capaz de manter um ambiente de desenvolvimento semelhante ao local
- O script faz bind apenas dos caminhos mínimos necessários, como
/etc, $HOME e o diretório do projeto, e restringe o acesso fora do projeto
- Essa abordagem é uma forma prática de garantir ao mesmo tempo execução segura de agentes de IA e eficiência no desenvolvimento
Problema de acesso a arquivos por agentes de IA
- Claude Code é uma interface de linha de comando que pede permissão do usuário sempre que lê ou grava arquivos e sempre que executa software
- Isso faz sentido do ponto de vista de segurança, mas as confirmações repetidas dificultam o trabalho em paralelo
- Com a opção
--dangerously-skip-permissions, é possível executar tudo sem perguntar
- Alguns usuários fazem isso, mas existe risco de danificar o sistema
Conceito de sandboxing e opções
- A solução mais comum é a execução em sandbox usando máquina remota (exe.dev, sprites.dev, daytona.io) ou tecnologias de virtualização como Docker
- No Linux, o bubblewrap é uma alternativa leve que isola processos com cgroups e user namespaces
- Em um ambiente em sandbox, as condições necessárias são as seguintes
- Manter a mesma estrutura do ambiente de desenvolvimento existente
- Minimizar o acesso a informações fora do projeto atual
- Permitir escrita apenas no diretório do projeto
- Possibilitar verificar e editar diretamente os mesmos arquivos no IDE
- Permitir acesso à rede para conexão com o provedor de IA e execução de servidor
Considerações de segurança e limitações
- bubblewrap e Docker não oferecem isolamento de segurança completo
- Ainda permanecem riscos como vulnerabilidades zero-day no kernel, comunicação por side channel e vazamento de dados
- Ainda assim, o autor prioriza a conveniência no desenvolvimento acima desses riscos
- A base de código é gerenciada com
git e tem backup no GitHub e afins, então o risco de dano é baixo
- Para reduzir o risco de vazamento de chaves de API, recomenda-se separar chaves de API por projeto
Estrutura do script de sandbox com bubblewrap
- O script usa o comando
bwrap para montar vários diretórios em modo somente leitura (ro-bind) ou gravável (bind)
- Caminhos do sistema como
/bin, /lib e /usr/bin são somente leitura
$HOME/.claude, $HOME/.cache e o diretório de trabalho atual ($PWD) são graváveis
$HOME/.claude.json é injetado como descritor de arquivo, então alterações não são refletidas no arquivo real
- O nome do host é alterado para
bubblewrap, facilitando a identificação
/tmp, /proc e /dev são tratados automaticamente pelo bubblewrap
- Em vez de expor todo o
/etc, apenas os arquivos mínimos necessários são vinculados
- O Node.js está instalado no caminho
/opt/node/node-v22.11.0-linux-x64/
Como personalizar para o usuário
- Para adaptar a outros agentes de IA ou sistemas, modifique o script para executar
bash primeiro e então rode o agente manualmente, verificando os arquivos necessários
- É possível rastrear chamadas de acesso a arquivos com o comando
strace
- Exemplo:
strace -e trace=open,openat,stat,statx,access -o /tmp/strace.log codex
- Analise o log para identificar os arquivos necessários e ajuste o ambiente vinculando esses caminhos
Conclusão
- O sandboxing com bubblewrap é uma abordagem prática para minimizar o risco de mau funcionamento ou vazamento de dados por agentes de IA enquanto mantém a mesma conveniência do ambiente local de desenvolvimento
- O autor pretende continuar ajustando o script conforme necessário com base nessa configuração
1 comentários
Comentários do Hacker News
Estou usando Leash para colocar agentes em sandbox
O controle de políticas em nível de processo e rede é rígido, e ele oferece controle e visibilidade em tempo real via WebUI
Acho muito melhor que o bubblewrap. Comecei a usar depois de ver no HN
Um fato curioso é que o sistema de sandbox mais usado no mundo não é Docker nem bubblewrap, e sim uma aba do Chrome
No Linux, queria saber se usa cgroups, namespaces como Docker ou LXC, ou se usa uma sandbox própria baseada em VM
Se for o segundo caso, talvez seja ainda mais difundido do que runtimes como JRE ou .NET CLR
Se você não usar a opção
--unshare-net, o bwrap deixa a rede totalmente aberta por padrãoO agente não só pode apagar arquivos, como também vazar chaves ou baixar pacotes maliciosos
O próximo passo é adicionar um namespace de rede e subir um proxy local baseado em mitmproxy dentro da sandbox para permitir apenas Anthropic API e PyPI/NPM, bloqueando todo o resto
Fiz um pequeno wrapper
claude-vmpara rodar cada instância em uma VM do LimaO código está aqui
Hoje acho que VM é a unidade padrão mais adequada. Você dá root ao agente e só passa os recursos necessários, e isso fica muito seguro e simples
Mesmo que o agente instale software, rode Docker ou até construa VMs aninhadas, a fronteira continua clara
Ainda assim, talvez dê para trocar para LXC e ganhar leveza. O bwrap é bom, mas as restrições de ambiente podem limitar as capacidades do agente
Fiz um wrapper simples para bubblewrap para poder usar algo como
sandbox-run claude --dangerously-skip-permissionsLink do projeto sandbox-run
Estou sempre pensando em quais recursos expor ao agente e quais políticas aplicar
Por exemplo, foi dito que, em vez de expor
/etcinteiro, basta fazer bind só dos arquivos mínimos necessários, mas queria entender como se define esse “mínimo”Ficar olhando logs e adicionando arquivos manualmente dá trabalho demais
A IA sugeriu expor
/etcinteiro, mas eu queria um controle mais finoNo momento a rede está totalmente liberada, mas depois penso em bloquear pelo menos redes privadas (192.168/10.*)
No fim, é uma questão de quão rígido você quer que o isolamento seja
Estou preparando um SaaS para resolver o problema de sandbox de IA no Linux
Já montei a infraestrutura, com recursos injetados até o nível do kernel, e até misturei nossa abordagem nos dados de treino dos LLMs para ganhar marketing
O nome é
useradd: simples, grátis e sem soluções complicadasEm estilo “modo mainframe”, vários terminais virtuais e usuários podem rodar na mesma máquina
Se precisar de chave beta, me manda DM
useradd. O comentário original, do jeito que estava, ficou mais engraçadoWorkstations comuns não foram projetadas para serem seguras contra o próprio usuário, e os modelos mais novos tendem a ficar cada vez mais perigosos
useraddnão restringe acesso à redeMas no desenvolvimento preciso acessar e modificar arquivos, então bubblewrap ou isolamento com systemd me parecem mais práticos
Em vez de montar listas de permissões na mão, eu queria clonar o workspace atual em um snapshot de VM, rodar o Claude lá dentro e apagar a VM quando a sessão terminar
Se resolver a sincronização da sessão, ficaria perfeito
Eu mesmo desenvolvi uma ferramenta de sandbox para também funcionar no Mac
Link do projeto amazing-sandbox
Eu simplesmente isolo usando ssh para uma conta local sem privilégios (
dummy@localhost)Queria saber se essa abordagem está errada
Para usar bwrap no Ubuntu 24.04, precisei afrouxar a configuração do AppArmor e adicionar o arquivo
/etc/apparmor.d/bwrapDá para resolver assim sem mudar a configuração global ou Aliás, eu sou o autor do setpriv, então conheço bem esse tipo de situação