26 pontos por GN⁺ 2026-01-21 | 1 comentários | Compartilhar no WhatsApp
  • Como usar com segurança a flag --dangerously-skip-permissions do Claude Code
  • Após avaliar vários ambientes de execução isolados, como Docker, VM e Firejail, concluiu-se que uma máquina virtual (VM) baseada em Vagrant era a opção mais adequada
  • Com o Vagrant, foi possível manter isolamento completo via VM, configuração reproduzível e compartilhamento de pastas locais, evitando ao mesmo tempo os problemas de Docker-in-Docker
  • O Claude Code foi configurado para manipular livremente o sistema com privilégios de sudo dentro da VM, executando na prática tarefas como rodar web apps, configurar banco de dados e automatizar testes
  • Esse método é eficaz para evitar danos acidentais ao sistema de arquivos e, quando necessário, permite redefinir o ambiente com segurança ao excluir e recriar a VM

Contexto

  • Ao usar o Claude Code, havia o incômodo de ter que confirmar solicitações de permissão a todo momento, então foi testado o uso da flag --dangerously-skip-permissions
    • Essa flag faz com que todas as ações, como instalação de pacotes, alteração de configurações e exclusão de arquivos, sejam executadas automaticamente sem aprovação prévia
    • Isso evita interrupções no fluxo de trabalho e melhora a eficiência, mas traz risco de danificar o sistema de arquivos
  • Para evitar isso, percebeu-se a necessidade de executar em um ambiente separado da conta do sistema operacional do host

Métodos considerados

  • O primeiro caminho avaliado para isolamento foi o Docker, mas como o Claude precisa criar imagens Docker e executar contêineres, seria necessária uma configuração de Docker-in-Docker
    • Nesse caso, o modo --privileged seria exigido, o que anularia o propósito do sandbox
    • Além disso, haveria aumento de complexidade e instabilidade por conta de problemas como aninhamento de rede e permissões de montagem de volumes
  • Como outras alternativas, foram considerados os seguintes caminhos
    • Execução em bare metal: há casos graves de dano relatados no Reddit, como exclusão de banco de dados ou do diretório home
    • sandbox-runtime: controle de acesso baseado em ACL, em que o Claude não consegue acessar nada além do código, mas com falta de liberdade total
    • Firejail: apresenta restrições semelhantes às do Docker
    • Configuração manual de VM: baixa reprodutibilidade
    • VM em nuvem: problemas de custo, latência e necessidade de enviar o código

Abordagem baseada em Vagrant

  • Com o Vagrant, foi possível garantir isolamento completo por VM e configuração reproduzível
    • Com pastas compartilhadas, o acesso funciona como se fosse local
    • Não há problema de Docker-in-Docker e, se necessário, a VM pode ser facilmente excluída e recriada
  • Durante o uso da versão 7.2.4 do VirtualBox, foi encontrado um bug de uso de CPU em 100%, e a causa foi confirmada por meio de uma issue no GitHub
  • A configuração final do Vagrantfile tem as seguintes características
    • Usa a imagem base bento/ubuntu-24.04
    • Aloca 4 GB de memória e 2 CPUs
    • Instala Docker, Node.js, npm, git e unzip
    • Instala globalmente @anthropic-ai/claude-code
    • Adiciona o usuário vagrant ao grupo Docker

Forma de uso na prática

  • No diretório do projeto, a sequência é vagrant upvagrant sshclaude --dangerously-skip-permissions
  • Na primeira inicialização, o provisionamento leva alguns minutos, e é necessário fazer login no Claude apenas uma vez por projeto
  • Ao terminar o trabalho, é possível suspender a VM com vagrant suspend
  • Dentro da VM, o Claude recebe privilégios de sudo para executar tarefas como
    • Rodar a API de uma web app e verificar com curl
    • Instalar um navegador, inspecionar manualmente o app e gerar testes E2E
    • Configurar banco de dados PostgreSQL e testar migrações
    • Criar e executar imagens Docker
  • Graças a esse ambiente, o Claude consegue executar comandos, verificar saídas e conduzir processos iterativos por conta própria

Desempenho e segurança

  • Em ambiente Linux + VirtualBox, há folga suficiente de recursos, sem atraso na sincronização de arquivos
  • Itens que podem ser protegidos
    • Danos acidentais ao sistema de arquivos
    • Instalação indiscriminada de pacotes e alterações de configuração
  • Itens que não podem ser protegidos
    • Exclusão da pasta do projeto (sincronização bidirecional)
    • Ataques que explorem vulnerabilidades de escape de VM
    • Problemas em nível de rede
    • Vazamento de dados (a VM tem acesso à internet)
  • Essa configuração serve para prevenção de acidentes, e não para defesa contra ataques avançados
  • Como o projeto usa Git, a recuperação é fácil mesmo em caso de dano; se necessário, é possível adotar sincronização unidirecional com rsync para um isolamento mais rígido

Conclusão

  • Depois de resolver o bug de CPU do VirtualBox, foi obtido um ambiente de execução sem atrito
  • Agora é possível executar o Claude Code livremente dentro de um sandbox completo em VM
  • Se houver problemas, basta excluir e recriar a VM, com reprodutibilidade garantida por um único Vagrantfile
  • Ao usar a flag --dangerously-skip-permissions, é fortemente recomendável montar um ambiente isolado como esse

1 comentários

 
GN⁺ 2026-01-21
Comentários do Hacker News
  • Ao usar o Claude, no fim você acaba apertando Enter depois de alguns meses por causa da fadiga de decisão
    Por isso, sinto que é bem mais seguro rodar em modo YOLO, mas com um ambiente em sandbox já preparado
    No Ubuntu 22.04, montei uma sandbox em camadas combinando bubblewrap e Landlock LSM
    O Landlock restringe o acesso ao sistema de arquivos com base em whitelist e também controla o acesso a portas TCP
    O bubblewrap separa os namespaces de montagem para criar um /tmp por projeto e esconder chaves secretas
    Com o dnsmasq, configurei uma whitelist de DNS para que só os domínios necessários possam ser resolvidos
    Graças a essa estrutura, diminuiu o estresse de ter que ficar monitorando o agente o tempo todo

    • Eu também estava rodando várias instâncias do Claude em modo YOLO num ambiente parecido, mas foi realmente cansativo quando precisei compilar o plugin Emacs TRAMP diretamente no NUC local
      Ficar aprovando um por um os trechos de elisp sugeridos pelo Claude foi uma experiência exaustiva
      Mesmo tomando cuidado só para ele não instalar coisas aleatórias com comandos Bash, já foi bem desgastante
    • Eu uso Windows, então não testei pessoalmente, mas pelo que sei no Linux o Claude Code já vem com sandboxing embutido via comando /sandbox
  • Aqui é o Srini, da Docker
    Muita gente está usando Docker para tentar resolver esse problema, e também ouvimos bastante feedback sobre as limitações de Docker-in-Docker
    Por isso, lançamos experimentalmente o Docker Sandboxes em preview
    Ainda está no começo, mas estamos desenvolvendo a próxima versão com base em MicroVM para evitar os problemas de Docker-in-Docker

    • Fiquei curioso para saber como o Docker Sandbox resolve o problema de Docker-in-Docker
      Quero entender se o Claude consegue subir outros contêineres sem privilégios dentro do Docker Sandbox
  • Parece que a maioria quer evitar rodar uma VM local por conta própria, mas não entendo por quê
    Na prática, uma VM local é a opção mais simples e resolve tudo
    Se você usa Docker no Mac, já está rodando em cima de uma VM Linux, então na prática está só um nível distante do ambiente real
    Também dá para acessar direto por SSH da IDE e inspecionar o código
    Eu ligo a opção --dangerously-skip-permissions e trato toda alteração via PR
    Junto com workmux, venho usando isso há meses, e é muito eficiente para tocar vários PRs ao mesmo tempo
    A vantagem sobre VM na nuvem é que subir vários contêineres ao mesmo tempo consome muita memória
    Se você deixar uma VM robusta na nuvem rodando 24/7, o custo fica alto demais

  • Mesmo sem explorar uma vulnerabilidade de escape de VM, uma IA maliciosa pode conseguir acesso ao host adicionando código arbitrário ao Vagrantfile
    Mesmo que a preocupação seja só com erros acidentais, se o Claude mexer nos hooks de commit isso pode causar problema quando eles forem executados
    Dá para sentir como é realmente difícil manter isolamento completo sem perder praticidade no desenvolvimento

    • Basta limitar o Claude a um subdiretório específico
      Por exemplo, usando volume mount do Docker para permitir alterações só na pasta sandbox/ e bloquear acesso ao .git
    • Mas isso exige a premissa de compartilhamento bidirecional de diretórios entre VM e host
      Eu trabalho tirando snapshot, subindo uma VM pequena para rodar o agente e depois comparando os snapshots
      Nunca faço sincronização automática, porque isso destrói o objetivo do isolamento
    • Outro risco é que código malicioso possa ser adicionado ao repositório e depois infectar quando for executado fora da VM
    • “nó EC2?”
  • Estou tentando outra abordagem — interceptar o que o Claude tenta executar
    O Shannot captura a intenção antes da execução e intercepta chamadas de sistema dentro de uma sandbox PyPy
    Comandos e escritas em arquivos ficam só no log e não são executados de verdade
    Só depois que o usuário revisa e aprova na TUI é que a execução acontece
    A diferença para uma VM é que, enquanto a VM deixa tudo rodar livremente num ambiente totalmente isolado, o Shannot aplica mudanças no sistema real com aprovação humana
    É adequado para tarefas como modificar servidores
    Também tem integração com Claude MCP, execução remota via SSH e checkpoint/rollback

    • Essa abordagem não resolve o problema de forma direta, mas parece seguir uma direção parecida com os controles embutidos do Claude Code
      No fim, ela para na primeira solicitação de aprovação, então o agente não consegue explorar livremente
      O que eu quero é que o agente tente tudo até o fim sem parar no meio e só depois eu avalie o resultado
      Aí sim a economia de tempo é grande
    • Parece ter uma filosofia parecida com o Leash
      Lembra o modo de extensão de sistema nativo para Mac do Leash, mas ainda não tem um modo de aprovação interativa completo
      Projeto interessante
    • A parte de “comandos e escritas em arquivos ficam só no log e não são executados de verdade” na verdade já é algo que o Claude oferece por padrão
    • O nome é realmente genial
  • Quando a fadiga de aprovação acumula, dá vontade de usar --dangerously-skip-permissions
    Então eu rodo o Claude Code dentro de um devcontainer
    O acesso a arquivos fica limitado ao repositório e a rede só permite whitelist
    Depois generalizei isso com docker compose e o próximo passo é adicionar suporte a outros agentes como Codex e OpenCode
    Quero forçar o roteamento da rede por um proxy no host para reforçar logging e controle
    Por enquanto estou quebrando o galho com iptables
    Ainda está no começo, mas já funciona muito bem
    Código: agent-sandbox

    • Também estou testando uma configuração parecida
      Estou usando mitmproxy como proxy de rede; ainda não está perfeito, mas está quase lá
    • Uma noite, com amigos, fizemos um app em vibe coding e demos ao Claude acesso root ao cluster de servidores
      O Claude passou horas configurando o sistema sozinho e terminou o app
      Não escrevemos uma linha de código e o resultado ficou surpreendentemente bom
      A velocidade do desenvolvimento com IA é realmente impressionante
  • Minha solução é simples

    sandbox-run npx @anthropic-ai/claude-code
    

    Assim, o comando npx roda de forma transparente dentro de uma sandbox Bubblewrap, expondo só o diretório atual
    Dá para implementar isso com algumas linhas de shell POSIX puro
    sandbox-run

    • Gosto da abordagem com Bubblewrap, mas é uma pena que seja só para Linux
      Outra desvantagem é que, depois que você reduz os privilégios, não dá para restaurá-los
  • Eu simplesmente coloco tudo num contêiner LXC sem privilégios e pronto
    Meu modelo de ameaça não é um ataque sofisticado, e sim a possibilidade de “apagar sem querer meu diretório home”

  • Eu deixo scripts utilitários no diretório run/ do projeto e subo os contêineres com base em compose
    O devcontainer fica mapeado com diretórios e volumes do host
    O Claude lida bem com configuração de serviços, atualização de scripts e diagnóstico de problemas de runtime
    Não há integração com navegador, mas com Playwright ou Puppeteer provavelmente já dá para fazer tudo de que precisa

  • Queria saber a opinião do pessoal sobre o sandboxing embutido do Claude Code
    Link da documentação oficial
    O Claude Code tem uma escape hatch que permite desativar a sandbox quando necessário
    Se um comando falhar por causa das restrições da sandbox, o Claude pode analisar o motivo e tentar de novo com dangerouslyDisableSandbox
    O fato de o agente poder desativar a sandbox por conta própria parece uma vulnerabilidade; queria saber se nesse caso existe algum processo de aprovação pelo usuário

    • Infelizmente, às vezes há casos em que ele contorna a solicitação de confirmação do usuário
      Issues relacionadas: #14268, #13583, #10089