DocsSeguridadSandbox y aislamiento de ejecucion
Volver a Docs
Seguridad

Sandbox y aislamiento de ejecucion

Como YeePilot aisla la ejecucion de comandos con namespaces de Linux, limites de recursos y restricciones de rutas

Última actualización: 28 de febrero de 2026

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:

RecursoLimite predeterminadoDescripcion
Tiempo de CPU300 segundosTiempo de CPU maximo combinado en todos los hilos
Memoria512 MBUso maximo de memoria residente
Tamano de archivo100 MBTamano maximo de cualquier archivo individual creado
Procesos64Numero maximo de procesos/hilos generados
Salida10.000 caracteresLa salida se trunca mas alla de este limite
Tiempo limite30 segundosTiempo 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:

yaml
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:

yaml
sandbox:
  memory_limit: 1024      # 1 GB para tareas de compilacion
  timeout: 120            # 2 minutos para compilaciones largas
  output_limit: 50000     # Mas salida para registros detallados

Rutas denegadas

Ciertas rutas sensibles estan bloqueadas por defecto, evitando que los comandos lean o modifiquen archivos criticos del sistema:

Ruta denegadaRazon
/etc/shadowHashes de contrasenas
/etc/gshadowHashes de contrasenas de grupo
/rootDirectorio 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:

yaml
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 aplicacion

Esto 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:

yaml
sandbox:
  network: true            # true (predeterminado) o false

Establecer 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+C y 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:

plaintext
> 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:

  1. Aumentar el output_limit en su configuracion
  2. Redirigir la salida a un archivo: "Search for errors and save results to /tmp/errors.log"
  3. 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:

plaintext
Command timed out after 30 seconds: ping 10.0.0.1

Aumente el tiempo limite para comandos que legitimamente necesitan mas tiempo:

yaml
sandbox:
  timeout: 120             # 2 minutos

Referencia completa de configuracion del sandbox

Aqui hay una configuracion completa del sandbox con todas las opciones disponibles:

yaml
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
    - /root

Nota: 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.