DocsSécuritéSandbox et isolation d'execution
Retour à la doc
Sécurité

Sandbox et isolation d'execution

Comment YeePilot isole l'execution des commandes avec les espaces de noms Linux, les limites de ressources et les restrictions de chemins

Dernière mise à jour: 28 février 2026

YeePilot execute chaque commande dans un sandbox isole qui restreint ce a quoi la commande peut acceder et combien de ressources elle peut consommer. Meme si une commande se comporte de maniere inattendue, le sandbox l'empeche de causer des dommages etendus a votre systeme.

Fonctionnement du sandbox

Lorsque YeePilot execute une commande, il cree un environnement d'execution isole en utilisant les espaces de noms Linux. C'est la meme technologie qui alimente les environnements d'execution de conteneurs comme Docker, appliquee au niveau de la commande individuelle.

Chaque commande s'execute avec :

  • Isolation de processus -- la commande ne peut pas voir ni interagir avec les processus en dehors de son espace de noms
  • Limites de ressources -- le CPU, la memoire, la taille de fichier et le nombre de processus sont tous limites
  • Restrictions de chemins -- les fichiers systeme sensibles sont inaccessibles
  • Troncature de sortie -- une sortie excessive est coupee avant d'inonder votre terminal
  • Delai d'execution -- les commandes qui s'executent trop longtemps sont terminees automatiquement

Limites de ressources

YeePilot applique des limites de ressources par defaut a chaque commande :

RessourceLimite par defautDescription
Temps CPU300 secondesTemps CPU maximum combine pour tous les threads
Memoire512 MoUtilisation maximale de memoire residente
Taille de fichier100 MoTaille maximale de tout fichier cree
Processus64Nombre maximum de processus/threads engendres
Sortie10 000 caracteresLa sortie est tronquee au-dela de cette limite
Delai30 secondesTemps reel avant que la commande ne soit tuee

Ces valeurs par defaut sont concues pour gerer les taches d'administration legitimes tout en empechant les processus incontroles de consommer les ressources du serveur.

Personnaliser les limites de ressources

Ajustez les limites dans ~/.yeepilot/config.yaml sous la section sandbox :

yaml
sandbox:
  enabled: true
  cpu_limit: 300          # Secondes CPU
  memory_limit: 512       # Megaoctets
  file_size_limit: 100    # Megaoctets
  process_limit: 64       # Processus max
  output_limit: 10000     # Caracteres
  timeout: 30             # Secondes (temps reel)

Pour les taches gourmandes en ressources comme la compilation de logiciels ou le traitement de fichiers de log volumineux, vous devrez peut-etre augmenter ces limites :

yaml
sandbox:
  memory_limit: 1024      # 1 Go pour les taches de compilation
  timeout: 120            # 2 minutes pour les builds longs
  output_limit: 50000     # Plus de sortie pour les logs verbeux

Chemins interdits

Certains chemins sensibles sont bloques par defaut, empechant les commandes de lire ou modifier des fichiers systeme critiques :

Chemin interditRaison
/etc/shadowHachages de mots de passe
/etc/gshadowHachages de mots de passe de groupes
/rootRepertoire personnel de l'utilisateur root

Les commandes qui tentent d'acceder a des chemins interdits echoueront avec une erreur de permission.

Personnaliser les chemins interdits

Ajoutez ou modifiez les chemins interdits dans votre configuration :

yaml
sandbox:
  denied_paths:
    - /etc/shadow
    - /etc/gshadow
    - /root
    - /var/lib/secrets       # Personnalise : vos secrets applicatifs
    - /opt/myapp/keys        # Personnalise : stockage de cles applicatives

C'est particulierement utile pour proteger les stockages de secrets specifiques a vos applications ou les repertoires de configuration qui ne devraient jamais etre accedes via YeePilot.

Acces reseau

Par defaut, les commandes executees via YeePilot ont acces au reseau pour que les taches comme l'installation de paquets (apt install), les mises a jour et les verifications de sante fonctionnent normalement.

Vous pouvez restreindre l'acces reseau pour une isolation plus stricte :

yaml
sandbox:
  network: true            # true (par defaut) ou false

Definir network: false bloque toutes les connexions reseau sortantes et entrantes des commandes executees. C'est utile dans les environnements de haute securite ou vous voulez vous assurer que les commandes n'operent que sur des ressources locales.

Support PTY

YeePilot utilise l'allocation de pseudo-terminal (PTY) pour l'execution des commandes. Cela signifie que les commandes se comportent comme si elles s'executaient dans un vrai terminal, ce qui garantit :

  • Formatage correct de la sortie -- les outils qui detectent les capacites du terminal (comme la sortie coloree, les barres de progression) fonctionnent correctement
  • Compatibilite interactive -- les commandes qui necessitent des fonctionnalites de terminal fonctionnent correctement
  • Gestion des signaux -- Ctrl+C et les autres signaux sont correctement delivres aux commandes en cours d'execution

Troncature de sortie

Lorsqu'une commande produit plus de sortie que la limite configuree (par defaut : 10 000 caracteres), YeePilot la tronque et vous en informe :

plaintext
> Rechercher les erreurs dans tous les fichiers de log
 
Execution : grep -r "ERROR" /var/log/
 
[Sortie tronquee a 10 000 caracteres -- 45 230 caracteres produits au total]
... affichage de la derniere portion de la sortie ...

Cela empeche une seule commande de submerger votre session. Si vous avez besoin de voir la sortie complete, vous pouvez :

  1. Augmenter le output_limit dans votre configuration
  2. Rediriger la sortie vers un fichier : "Rechercher les erreurs et sauvegarder les resultats dans /tmp/errors.log"
  3. Utiliser des requetes plus specifiques pour reduire le volume de sortie

Delai d'execution

Les commandes sont terminees apres 30 secondes de temps reel par defaut. Cela protege contre :

  • L'execution accidentelle de commandes qui restent suspendues indefiniment
  • Les commandes bloquees en attente de ressources reseau
  • Les boucles infinies ou les processus incontroles

Lorsqu'une commande atteint le delai, YeePilot la termine proprement et signale le depassement :

plaintext
Commande expirée après 30 secondes : ping 10.0.0.1

Augmentez le delai pour les commandes qui ont legitimement besoin de plus de temps :

yaml
sandbox:
  timeout: 120             # 2 minutes

Reference complete de configuration du sandbox

Voici une configuration de sandbox complete avec toutes les options disponibles :

yaml
sandbox:
  enabled: true            # Activer/desactiver le sandbox (par defaut : true)
  cpu_limit: 300           # Secondes CPU (par defaut : 300)
  memory_limit: 512        # Megaoctets (par defaut : 512)
  file_size_limit: 100     # Megaoctets (par defaut : 100)
  process_limit: 64        # Processus max (par defaut : 64)
  output_limit: 10000      # Caracteres (par defaut : 10000)
  timeout: 30              # Secondes temps reel (par defaut : 30)
  network: true            # Autoriser l'acces reseau (par defaut : true)
  denied_paths:            # Chemins auxquels les commandes ne peuvent pas acceder
    - /etc/shadow
    - /etc/gshadow
    - /root

Note : Desactiver entierement le sandbox (enabled: false) supprime toute isolation et toutes les limites de ressources. Cela est fortement deconseille en production. Ne desactivez le sandbox que dans des environnements de developpement controles ou vous faites entierement confiance aux commandes executees.