26 puntos por GN⁺ 2026-01-21 | 1 comentarios | Compartir por WhatsApp
  • Cómo usar de forma segura la bandera --dangerously-skip-permissions de Claude Code
  • Tras evaluar varios entornos de ejecución aislada como Docker, VM y Firejail, se concluyó que una máquina virtual (VM) basada en Vagrant era la opción más adecuada
  • Con Vagrant se mantiene el aislamiento completo de la VM, una configuración reproducible y el uso compartido de carpetas locales, evitando al mismo tiempo los problemas de Docker-in-Docker
  • Se configuró Claude Code para que pudiera manipular libremente el sistema con privilegios sudo dentro de la VM, y en la práctica ejecutó una web app, configuró la BD y automatizó pruebas, entre otras tareas
  • Este enfoque es eficaz para prevenir daños al sistema de archivos por errores accidentales y, si hace falta, permite reinicializar de forma segura eliminando y recreando la VM

Antecedentes

  • Al usar Claude Code, se intentó utilizar la bandera --dangerously-skip-permissions para evitar la molestia de tener que confirmar solicitudes de permisos a cada momento
    • Esta bandera realiza automáticamente todas las tareas sin aprobación previa, como instalar paquetes, cambiar configuraciones o borrar archivos
    • Es eficiente porque no interrumpe el flujo de trabajo, pero existe el riesgo de dañar el sistema de archivos
  • Para evitarlo, se identificó la necesidad de ejecutarlo en un entorno separado de la cuenta del sistema operativo host

Métodos considerados

  • Primero se evaluó el aislamiento mediante Docker, pero como Claude necesita construir imágenes y ejecutar contenedores, se requiere una configuración de Docker-in-Docker
    • En ese caso se necesita el modo --privileged, por lo que el objetivo del sandbox pierde sentido
    • Además, aumentan la complejidad y la inestabilidad por temas como anidación de red y problemas de permisos al montar volúmenes
  • Como otras alternativas, se revisó lo siguiente
    • Ejecución en bare metal: en casos de Reddit hubo daños graves, como eliminación de bases de datos o del directorio home
    • sandbox-runtime: control de acceso basado en ACL; Claude no puede acceder fuera del código, pero no ofrece libertad total
    • Firejail: tiene restricciones similares a Docker
    • Configuración manual de VM: falta de reproducibilidad
    • VM en la nube: problemas de costo, latencia y necesidad de subir el código

Enfoque basado en Vagrant

  • Con Vagrant se logró un aislamiento completo de la VM y una configuración reproducible
    • Gracias a las carpetas compartidas, se puede acceder como si fuera local
    • No hay problemas de Docker-in-Docker y, si es necesario, la VM puede eliminarse y recrearse fácilmente
  • Al usar VirtualBox 7.2.4 se detectó un bug de uso de CPU al 100%, y se confirmó la causa mediante un issue en GitHub
  • La configuración final del Vagrantfile tiene las siguientes características
    • Usa la imagen base bento/ubuntu-24.04
    • Asigna 4 GB de memoria y 2 CPU
    • Instala Docker, Node.js, npm, git y unzip
    • Instala globalmente @anthropic-ai/claude-code
    • Agrega el usuario vagrant al grupo de Docker

Forma de uso real

  • En el directorio del proyecto se ejecuta vagrant upvagrant sshclaude --dangerously-skip-permissions
  • En el primer arranque, el aprovisionamiento tarda unos minutos y solo hace falta iniciar sesión en Claude una vez por proyecto
  • Al terminar, la VM puede suspenderse con vagrant suspend
  • Claude recibe privilegios sudo dentro de la VM para realizar tareas como las siguientes
    • Ejecutar la API de una web app y revisarla con curl
    • Instalar un navegador, inspeccionar manualmente la app y generar pruebas E2E
    • Configurar una BD PostgreSQL y probar migraciones
    • Construir y ejecutar imágenes Docker
  • Gracias a este entorno, Claude puede encargarse por sí solo de ejecutar comandos, verificar salidas y repetir procesos

Rendimiento y seguridad

  • En un entorno Linux + VirtualBox hay suficiente margen de recursos y no hay retrasos en la sincronización de archivos
  • Elementos que sí se pueden proteger
    • Daños al sistema de archivos por errores accidentales
    • Instalación indiscriminada de paquetes y cambios de configuración
  • Elementos que no se pueden proteger
    • Eliminación de la carpeta del proyecto (sincronización bidireccional)
    • Ataques que exploten vulnerabilidades de escape de VM
    • Problemas a nivel de red
    • Exfiltración de datos (la VM tiene acceso a internet)
  • Esta configuración está pensada para prevenir accidentes, no para defenderse de ataques avanzados
  • Como el proyecto está basado en Git, incluso si hay daños es fácil recuperarlo; si hace falta un aislamiento más estricto, puede usarse sincronización unidireccional con rsync

Conclusión

  • Tras resolver el bug de CPU de VirtualBox, se logró un entorno de ejecución sin fricción
  • Claude Code puede ejecutarse libremente dentro de un sandbox completo en una VM
  • Si ocurre algún problema, basta con eliminar y recrear la VM, y la reproducibilidad queda garantizada con un solo Vagrantfile
  • Si se va a usar la bandera --dangerously-skip-permissions, se recomienda encarecidamente montar un entorno aislado como este

1 comentarios

 
GN⁺ 2026-01-21
Comentarios de Hacker News
  • Si usas Claude por un tiempo, al final por la fatiga de decisión (decision fatigue) después de unos meses simplemente terminas presionando Enter
    Por eso siento que es mucho más seguro ejecutarlo en modo YOLO pero con un entorno sandbox ya preparado
    En Ubuntu 22.04 armé un sandbox en capas combinando bubblewrap y Landlock LSM
    Landlock restringe el acceso al sistema de archivos con una lista blanca y también controla el acceso a puertos TCP
    bubblewrap aísla los namespaces de montaje para crear un /tmp por proyecto y ocultar claves secretas
    Con dnsmasq configuré una lista blanca de DNS para que solo se resuelvan los dominios necesarios
    Gracias a esta estructura se redujo el estrés de tener que vigilar al agente todo el tiempo

    • Yo también estaba ejecutando varias instancias de Claude en modo YOLO en un entorno parecido, y fue realmente agotador cuando tuve que compilar directamente en mi NUC local el plugin TRAMP de Emacs
      Tener que aprobar una por una las piezas de elisp que sugería Claude fue una experiencia muy cansada
      Incluso cuidando solo que no instalara cualquier cosa rara con comandos Bash, igual fue pesado
    • Yo uso Windows, así que no lo probé directamente, pero tenía entendido que en Linux Claude Code ya traía una función de sandboxing integrada con el comando /sandbox
  • Soy Srini de Docker
    Muchos desarrolladores están usando Docker para resolver este problema, y también hemos recibido mucho feedback sobre las limitaciones de Docker-in-Docker
    Por eso lanzamos de forma experimental Docker Sandboxes como preview
    Todavía está en una etapa temprana, pero estamos desarrollando la siguiente versión sobre MicroVM para evitar el problema de Docker-in-Docker

    • Me da curiosidad cómo Docker Sandbox resuelve el problema de Docker-in-Docker
      Quisiera saber si Claude puede levantar otros contenedores sin privilegios dentro de Docker Sandbox
  • Parece que la mayoría quiere evitar correr una VM local por su cuenta, pero no entiendo por qué
    En realidad una VM local es lo más simple y resuelve todos los problemas
    Si usas Docker en Mac, de todos modos ya corre sobre una VM Linux, así que solo estás a un nivel de distancia del entorno real
    También puedes entrar directo por SSH desde el IDE para revisar el código
    Yo activo la opción --dangerously-skip-permissions y manejo todos los cambios como PRs
    Llevo meses usándolo junto con workmux, y es muy eficiente porque permite manejar varios PRs al mismo tiempo
    La razón por la que es mejor que una VM en la nube es que, si levantas varios contenedores a la vez, consumen mucha memoria
    Tener una VM potente en la nube encendida 24/7 sale demasiado caro en costos

  • Una IA maliciosa ni siquiera necesita explotar una vulnerabilidad de escape de VM; puede agregar código arbitrario a un Vagrantfile para obtener acceso al host
    Incluso si solo te preocupan errores simples, si Claude modifica un hook de commit, cuando eso se ejecute puede causar problemas
    Me queda claro que mantener un aislamiento completo y al mismo tiempo desarrollar cómodamente es realmente difícil

    • Basta con encerrar a Claude en un subdirectorio específico
      Por ejemplo, usando un montaje de volumen de Docker para que solo pueda modificar la carpeta sandbox/ y sin acceso a .git
    • Pero eso supone compartir el directorio de forma bidireccional entre la VM y el host
      Yo trabajo tomando un snapshot, levantando una VM pequeña para ejecutar al agente y luego comparando de nuevo el snapshot
      Nunca hago sincronización automática porque destruye por completo el objetivo del aislamiento
    • Otro riesgo es que se agregue código malicioso al repositorio y luego te infecte cuando se ejecute fuera de la VM
    • “¿nodo ec2?”, preguntó brevemente
  • Estoy probando otro enfoque: interceptar lo que Claude intenta ejecutar
    Shannot captura la intención antes de ejecutar y intercepta las llamadas al sistema en un sandbox de PyPy
    Los comandos y escrituras de archivos solo quedan en el log y no se ejecutan realmente
    Solo se ejecutan después de que el usuario los revisa y aprueba en una TUI
    La diferencia con una VM es que la VM deja correr libremente en un entorno completamente aislado, mientras que Shannot aplica cambios al sistema real basados en aprobación humana
    Sirve para tareas como modificar servidores
    También tiene integración con Claude MCP, ejecución remota por SSH y funciones de checkpoint/rollback

    • Este enfoque no resuelve el problema de forma directa, pero siento que va en una línea parecida a las funciones de control integradas de Claude Code
      Al final se detiene en la primera solicitud de aprobación, así que el agente no puede explorar libremente
      Lo que yo quiero es que el agente pueda intentar todo hasta el final sin detenerse a la mitad y luego evaluar el resultado
      Así se ahorra mucho tiempo
    • Se ve con una filosofía similar a Leash
      Es parecido al modo de extensión del sistema nativo de Mac de Leash, pero todavía no tiene un modo de aprobación interactiva completo
      Es un proyecto interesante
    • La parte de “los comandos y escrituras de archivos solo quedan en el log y no se ejecutan realmente” en realidad es algo que Claude ya ofrece por defecto
    • El nombre es realmente ingenioso
  • Cuando se acumula la fatiga de aprobación, terminas queriendo usar --dangerously-skip-permissions
    Por eso yo ejecuto Claude Code dentro de un devcontainer
    El acceso a archivos está limitado al repositorio y la red solo permite una lista blanca
    Después lo generalicé con docker compose, y lo siguiente será agregar soporte para otros agentes como Codex u OpenCode
    Quiero forzar el enrutamiento de red a través de un proxy en el host para mejorar el logging y control
    Por ahora lo manejo temporalmente con iptables
    Sigue en etapa temprana, pero funciona bastante bien
    Código: agent-sandbox

    • Yo también estoy experimentando con una configuración parecida
      Estoy usando mitmproxy como proxy de red; todavía no está perfecto, pero casi
    • Una noche hice una app con unos amigos usando vibe coding, y le dimos a Claude permisos root sobre un clúster de servidores
      Claude configuró el sistema por sí solo durante horas y terminó la app
      Nosotros no escribimos ni una sola línea de código y el resultado fue sorprendentemente bueno
      Siento que la velocidad del desarrollo con IA es realmente impresionante
  • Mi solución es simple

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

    Así, el comando npx se ejecuta de forma transparente dentro de un sandbox de Bubblewrap, exponiendo solo el directorio actual
    Se puede implementar con unas cuantas líneas de shell POSIX puro
    sandbox-run

    • Me gusta el enfoque con Bubblewrap, pero me da pena que sea solo para Linux
      Otro inconveniente es que, una vez que sueltas los privilegios, no puedes recuperarlos
  • Yo simplemente lo meto en un contenedor LXC sin privilegios y ya
    Mi modelo de amenaza no son ataques complejos, sino una situación como “borrar accidentalmente mi directorio home”

  • En mi proyecto pongo scripts de utilidad en el directorio run/ y levanto contenedores sobre compose
    El devcontainer está mapeado con el directorio y los volúmenes del host
    Claude maneja bien la configuración de servicios, la actualización de scripts y el diagnóstico de problemas en runtime
    No hay integración con navegador, pero creo que con Playwright o Puppeteer bastaría

  • Me interesa saber qué opinan del sandboxing integrado de Claude Code
    Enlace a la documentación oficial
    Claude Code tiene una vía de escape para desactivar el sandbox cuando hace falta
    Si un comando falla por las restricciones del sandbox, Claude puede analizar la causa y reintentar con dangerouslyDisableSandbox
    Que el agente pueda desactivar el sandbox por sí mismo parece una vulnerabilidad, así que me pregunto si en ese caso existe algún proceso de aprobación del usuario

    • Lamentablemente, a veces hay casos en los que se saltan las solicitudes de confirmación del usuario
      Issues relacionados: #14268, #13583, #10089