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
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 :
| Ressource | Limite par defaut | Description |
|---|---|---|
| Temps CPU | 300 secondes | Temps CPU maximum combine pour tous les threads |
| Memoire | 512 Mo | Utilisation maximale de memoire residente |
| Taille de fichier | 100 Mo | Taille maximale de tout fichier cree |
| Processus | 64 | Nombre maximum de processus/threads engendres |
| Sortie | 10 000 caracteres | La sortie est tronquee au-dela de cette limite |
| Delai | 30 secondes | Temps 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 :
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 :
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 verbeuxChemins interdits
Certains chemins sensibles sont bloques par defaut, empechant les commandes de lire ou modifier des fichiers systeme critiques :
| Chemin interdit | Raison |
|---|---|
/etc/shadow | Hachages de mots de passe |
/etc/gshadow | Hachages de mots de passe de groupes |
/root | Repertoire 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 :
sandbox:
denied_paths:
- /etc/shadow
- /etc/gshadow
- /root
- /var/lib/secrets # Personnalise : vos secrets applicatifs
- /opt/myapp/keys # Personnalise : stockage de cles applicativesC'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 :
sandbox:
network: true # true (par defaut) ou falseDefinir 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+Cet 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 :
> 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 :
- Augmenter le
output_limitdans votre configuration - Rediriger la sortie vers un fichier : "Rechercher les erreurs et sauvegarder les resultats dans /tmp/errors.log"
- 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 :
Commande expirée après 30 secondes : ping 10.0.0.1Augmentez le delai pour les commandes qui ont legitimement besoin de plus de temps :
sandbox:
timeout: 120 # 2 minutesReference complete de configuration du sandbox
Voici une configuration de sandbox complete avec toutes les options disponibles :
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
- /rootNote : 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.