- A medida que se usan cada vez más herramientas de asistencia para desarrollo con IA, se vuelve necesario un entorno de ejecución en sandbox que garantice tanto la seguridad del sistema como la comodidad de uso
- Por defecto, Claude Code solicita permiso cada vez que accede a archivos o ejecuta algo, pero esto interrumpe el flujo de trabajo por las confirmaciones repetitivas
- Para resolverlo, se propone una configuración de sandbox ligera con bubblewrap, más liviana que Docker y capaz de mantener un entorno de desarrollo similar al local
- El script enlaza solo las rutas mínimas necesarias, como
/etc, $HOME y el directorio del proyecto, y restringe el acceso fuera del proyecto
- Este enfoque es una forma práctica de asegurar al mismo tiempo la ejecución segura de agentes de IA y la eficiencia del desarrollo
El problema del acceso a archivos por parte de los agentes de IA
- Claude Code es una interfaz de línea de comandos que solicita autorización del usuario cada vez que lee o escribe archivos, o ejecuta software
- Esto es razonable desde el punto de vista de la seguridad, pero las confirmaciones repetidas dificultan el trabajo en paralelo
- Si se usa la opción
--dangerously-skip-permissions, es posible ejecutar todo sin preguntar
- Algunos usuarios la usan, pero existe el riesgo de dañar el sistema
Concepto de sandboxing y opciones disponibles
- La solución general suele ser la ejecución en sandbox mediante una máquina remota (exe.dev, sprites.dev, daytona.io) o tecnologías de virtualización como Docker
- En Linux, bubblewrap es una alternativa ligera que aísla procesos usando cgroups y user namespaces
- Las condiciones necesarias dentro del entorno sandbox son las siguientes
- Mantener la misma estructura que el entorno de desarrollo existente
- Minimizar el acceso a información fuera del proyecto actual
- Permitir escritura solo en el directorio del proyecto
- Poder revisar y modificar directamente los mismos archivos que usa el IDE
- Permitir acceso a la red para conectarse al proveedor de IA y ejecutar servidores
Consideraciones de seguridad y limitaciones
- bubblewrap y Docker no ofrecen un aislamiento de seguridad completo
- Siguen existiendo riesgos como vulnerabilidades zero-day del kernel, comunicación por canales laterales y filtración de datos
- Aun así, el autor prioriza la comodidad de desarrollo por encima de esos riesgos
- El código fuente se gestiona con
git y está respaldado en GitHub y otros servicios, por lo que el riesgo de daño es bajo
- Para reducir el riesgo de filtración de claves API, se recomienda separar las claves API por proyecto
Configuración del script de sandbox con bubblewrap
- El script usa el comando
bwrap para montar varios directorios como solo lectura (ro-bind) o escribibles (bind)
- Las rutas del sistema como
/bin, /lib y /usr/bin se montan como solo lectura
$HOME/.claude, $HOME/.cache y el directorio de trabajo actual ($PWD) se pueden escribir
$HOME/.claude.json se inyecta como descriptor de archivo, por lo que los cambios no se reflejan en el archivo real
- El nombre del host cambia a
bubblewrap, lo que permite distinguirlo
/tmp, /proc y /dev los gestiona bubblewrap automáticamente
- En lugar de exponer todo
/etc, solo se enlazan los archivos mínimos necesarios
- Node.js está instalado en la ruta
/opt/node/node-v22.11.0-linux-x64/
Cómo personalizar la configuración
- Para adaptarlo a otros agentes de IA o a otro sistema, se puede modificar el script para ejecutar
bash y luego iniciar manualmente el agente mientras se revisan los archivos necesarios
- Con el comando
strace se pueden rastrear las llamadas de acceso a archivos
- Ejemplo:
strace -e trace=open,openat,stat,statx,access -o /tmp/strace.log codex
- Analizando el registro se pueden identificar los archivos necesarios y ajustar el entorno enlazando esas rutas
Conclusión
- El sandboxing con bubblewrap es un enfoque práctico para minimizar los riesgos de fallos o filtración de datos de agentes de IA mientras se mantiene la misma comodidad que en un entorno de desarrollo local
- El autor planea seguir ajustando el script según sea necesario sobre esta base
1 comentarios
Comentarios de Hacker News
Estoy usando Leash para aislar agentes en sandbox
Tiene un control de políticas estricto a nivel de procesos y red, y ofrece control y visibilidad en tiempo real mediante una WebUI
Me parece mucho mejor que bubblewrap. Empecé a usarlo después de verlo en HN
Como dato curioso, el sistema de sandbox más usado del mundo no es Docker ni bubblewrap, sino las pestañas de Chrome
Quisiera saber si en Linux usa cgroups y namespaces como Docker o LXC, o si usa su propio sandbox basado en VM
Si fuera lo segundo, quizá sería aún más usado que runtimes como JRE o .NET CLR
Si no usas la opción
--unshare-net, bwrap por defecto deja la red completamente abiertaEl agente no solo puede borrar archivos, también puede filtrar claves o descargar paquetes maliciosos
El siguiente paso es agregar un namespace de red y levantar dentro del sandbox un proxy local basado en mitmproxy para permitir solo la API de Anthropic o PyPI/NPM y bloquear todo lo demás
Hice un pequeño wrapper
claude-vmpara ejecutar cada instancia dentro de una VM de LimaEl código está aquí
Por ahora creo que una VM es la unidad base más apropiada. Si le das root al agente y solo le pasas los recursos necesarios, resulta muy seguro y simple
Aunque el agente instale software, ejecute Docker o incluso construya una VM anidada, el límite sigue siendo claro
Igual podría cambiar a LXC para aligerarlo. bwrap está bien, pero las restricciones del entorno pueden limitar lo que el agente es capaz de hacer
Hice un wrapper sencillo para bubblewrap para poder usarlo como
sandbox-run claude --dangerously-skip-permissionsEnlace al proyecto sandbox-run
Siempre estoy pensando qué recursos exponerle al agente y qué políticas aplicar
Por ejemplo, se mencionó que en vez de exponer todo
/etcse hace bind solo de los archivos mínimos necesarios, pero me pregunto cómo se define ese “mínimo”Revisar logs y agregar manualmente los archivos necesarios es demasiado tedioso
La IA me dijo que expusiera todo
/etc, pero yo quería un control más finoPor ahora la red está completamente permitida, pero más adelante pienso bloquear al menos la red privada (192.168/10.*)
Al final, es una cuestión de qué tan estricto quieres que sea el aislamiento
Estoy preparando un SaaS para resolver el problema del sandboxing de IA en Linux
Ya monté la infraestructura inyectando funciones hasta nivel kernel, y hasta mezclé nuestro enfoque en los datos de entrenamiento de los LLM para aprovecharlo como marketing
Se llama
useradd, y en vez de una solución compleja es algo simple y gratisComo en “modo mainframe”, varios terminales virtuales y usuarios pueden correr en una sola máquina
Si necesitas una beta key, mándame DM
useradd. El comentario original tal cual era más graciosoUna workstation común no está diseñada para protegerse de forma segura del propio usuario, y los modelos modernos se volverán cada vez más riesgosos
useraddno limita el acceso a la redPero durante el desarrollo hace falta acceder y modificar archivos, así que bubblewrap o el aislamiento de systemd me resultan más cómodos
En vez de hacer listas de permisos una por una, lo que quiero es clonar el workspace actual en un snapshot de VM, ejecutar Claude dentro y borrar la VM al terminar la sesión
Si se resuelve la sincronización de la sesión, sería perfecto
Desarrollé mi propia herramienta de sandbox para que también funcione en Mac
Enlace al proyecto amazing-sandbox
Yo simplemente aíslo usando una cuenta local sin privilegios por ssh (dummy@localhost)
Me pregunto si este enfoque está mal
Para usar bwrap en Ubuntu 24.04 tuve que relajar la configuración de AppArmor, así que agregué el archivo
/etc/apparmor.d/bwrapTambién se puede resolver así, sin cambiar la configuración global o bien Como referencia, yo soy el autor de setpriv, así que conozco bien este tipo de situaciones