Sandbox y aislamiento de ejecucion
Como YeePilot aisla la ejecucion de comandos con namespaces de Linux, limites de recursos y restricciones de rutas
YeePilot ejecuta cada comando dentro de un sandbox aislado que restringe lo que el comando puede acceder y cuantos recursos puede consumir. Incluso si un comando se comporta inesperadamente, el sandbox evita que cause danos generalizados a su sistema.
Como funciona el sandbox
Cuando YeePilot ejecuta un comando, crea un entorno de ejecucion aislado usando namespaces de Linux. Esta es la misma tecnologia que impulsa los entornos de ejecucion de contenedores como Docker, aplicada a nivel de comando individual.
Cada comando se ejecuta con:
- Aislamiento de procesos -- el comando no puede ver ni interactuar con procesos fuera de su namespace
- Limites de recursos -- CPU, memoria, tamano de archivo y conteo de procesos estan limitados
- Restricciones de rutas -- los archivos sensibles del sistema son inaccesibles
- Truncamiento de salida -- la salida descontrolada se corta antes de inundar su terminal
- Tiempo limite de ejecucion -- los comandos que se ejecutan por demasiado tiempo se terminan automaticamente
Limites de recursos
YeePilot aplica limites de recursos predeterminados a cada comando:
| Recurso | Limite predeterminado | Descripcion |
|---|---|---|
| Tiempo de CPU | 300 segundos | Tiempo de CPU maximo combinado en todos los hilos |
| Memoria | 512 MB | Uso maximo de memoria residente |
| Tamano de archivo | 100 MB | Tamano maximo de cualquier archivo individual creado |
| Procesos | 64 | Numero maximo de procesos/hilos generados |
| Salida | 10.000 caracteres | La salida se trunca mas alla de este limite |
| Tiempo limite | 30 segundos | Tiempo de reloj antes de que el comando sea terminado |
Estos valores predeterminados estan disenados para manejar tareas administrativas legitimas mientras previenen que procesos descontrolados consuman recursos del servidor.
Personalizar limites de recursos
Ajuste los limites en ~/.yeepilot/config.yaml bajo la seccion sandbox:
sandbox:
enabled: true
cpu_limit: 300 # Segundos de CPU
memory_limit: 512 # Megabytes
file_size_limit: 100 # Megabytes
process_limit: 64 # Procesos maximos
output_limit: 10000 # Caracteres
timeout: 30 # Segundos (reloj)Para tareas intensivas en recursos como compilar software o procesar archivos de registro grandes, puede necesitar aumentar estos limites:
sandbox:
memory_limit: 1024 # 1 GB para tareas de compilacion
timeout: 120 # 2 minutos para compilaciones largas
output_limit: 50000 # Mas salida para registros detalladosRutas denegadas
Ciertas rutas sensibles estan bloqueadas por defecto, evitando que los comandos lean o modifiquen archivos criticos del sistema:
| Ruta denegada | Razon |
|---|---|
/etc/shadow | Hashes de contrasenas |
/etc/gshadow | Hashes de contrasenas de grupo |
/root | Directorio home del usuario root |
Los comandos que intenten acceder a rutas denegadas fallaran con un error de permisos.
Personalizar rutas denegadas
Agregue o modifique rutas denegadas en su configuracion:
sandbox:
denied_paths:
- /etc/shadow
- /etc/gshadow
- /root
- /var/lib/secrets # Personalizado: secretos de su aplicacion
- /opt/myapp/keys # Personalizado: almacen de claves de la aplicacionEsto es particularmente util para proteger almacenes de secretos o directorios de configuracion especificos de la aplicacion que nunca deberian accederse a traves de YeePilot.
Acceso a red
Por defecto, los comandos ejecutados a traves de YeePilot tienen acceso a red para que tareas como instalacion de paquetes (apt install), actualizaciones y verificaciones de estado funcionen normalmente.
Puede restringir el acceso a red para un aislamiento mas estricto:
sandbox:
network: true # true (predeterminado) o falseEstablecer network: false bloquea todas las conexiones de red salientes y entrantes de los comandos ejecutados. Esto es util en entornos de alta seguridad donde desea asegurarse de que los comandos solo operen con recursos locales.
Soporte PTY
YeePilot usa asignacion de pseudo-terminal (PTY) para la ejecucion de comandos. Esto significa que los comandos se comportan como si estuvieran ejecutandose en una terminal real, lo que asegura:
- Formato de salida correcto -- las herramientas que detectan capacidades de terminal (como salida con colores, barras de progreso) funcionan correctamente
- Compatibilidad interactiva -- los comandos que requieren funciones de terminal funcionan correctamente
- Manejo de senales --
Ctrl+Cy otras senales se entregan correctamente a los comandos en ejecucion
Truncamiento de salida
Cuando un comando produce mas salida que el limite configurado (predeterminado: 10.000 caracteres), YeePilot la trunca y le notifica:
> Search all log files for errors
Running: grep -r "ERROR" /var/log/
[Output truncated at 10,000 characters -- 45,230 total characters produced]
... showing last portion of output ...Esto evita que un solo comando sature su sesion. Si necesita ver la salida completa, puede:
- Aumentar el
output_limiten su configuracion - Redirigir la salida a un archivo: "Search for errors and save results to /tmp/errors.log"
- Usar consultas mas especificas para reducir el volumen de salida
Tiempo limite de ejecucion
Los comandos se terminan despues de 30 segundos de tiempo de reloj por defecto. Esto protege contra:
- Ejecutar accidentalmente comandos que se cuelgan indefinidamente
- Comandos esperando recursos de red
- Bucles infinitos o procesos descontrolados
Cuando un comando agota su tiempo, YeePilot lo termina limpiamente y reporta el tiempo agotado:
Command timed out after 30 seconds: ping 10.0.0.1Aumente el tiempo limite para comandos que legitimamente necesitan mas tiempo:
sandbox:
timeout: 120 # 2 minutosReferencia completa de configuracion del sandbox
Aqui hay una configuracion completa del sandbox con todas las opciones disponibles:
sandbox:
enabled: true # Habilitar/deshabilitar sandbox (predeterminado: true)
cpu_limit: 300 # Segundos de CPU (predeterminado: 300)
memory_limit: 512 # Megabytes (predeterminado: 512)
file_size_limit: 100 # Megabytes (predeterminado: 100)
process_limit: 64 # Procesos maximos (predeterminado: 64)
output_limit: 10000 # Caracteres (predeterminado: 10000)
timeout: 30 # Segundos de reloj (predeterminado: 30)
network: true # Permitir acceso a red (predeterminado: true)
denied_paths: # Rutas que los comandos no pueden acceder
- /etc/shadow
- /etc/gshadow
- /rootNota: Deshabilitar completamente el sandbox (
enabled: false) elimina todo el aislamiento y los limites de recursos. Esto se desaconseja fuertemente para uso en produccion. Solo deshabilite el sandbox en entornos de desarrollo controlados donde confia plenamente en los comandos que se ejecutan.