Clavier et portable évoquant la configuration des outils fichier côté Gateway

2026 OpenClaw v2026.5.3 plugin de transfert de fichiers :
file_fetch / file_write politique de chemins, défenses symlink, répétition d’isolement macOS à la journée

Une fois le Gateway stable, donner aux agents un accès fichier sans contrat étroit fait fuiter les clés SSH vers le contexte modèle. La version v2026.5.3 embarque file_fetch, dir_list, dir_fetch, file_write avec politique de chemins et protection symlink—mais un home trop large recrée le risque « shell arbitraire » avec de meilleurs journaux. L’article ci-dessous, du sommaire aux métriques, est entièrement en français ; les identifiants d’outils restent alignés sur l’upstream. Voir v2026.5.4 montée de version et IPv6 Node 22, v2026.4.26 canaux de mise à jour et wrapper, isolation des Skills tiers, nœud macOS et navigateur, FAQ SSH/VNC location.

01. Trois zones de douleur

1) Racines trop larges : un dir_fetch récursif sur ~/ aspire configs SSH, profils navigateur et dumps dans les prompts même sans écriture. Corrigez avec des allowlists explicites, une profondeur max et des globs d’ignore alignés sur la CI, pas d’exclusions improvisées pendant l’incident.

2) Fuites par symlink : une dépendance compromise peut poser un lien qui semble interne au dépôt mais pointe ailleurs. v2026.5.3 met l’accent sur la défense symlink ; la désactiver pour le confort est une décision de risque tracée, pas un simple bascule.

3) Secrets prod sur hôte de répétition : copier un openclaw.json de prod dans un home loué et lancer file_write grave des chemins dans des journaux difficiles à purger. Utilisez des profils masqués et des jetons séparés ; effacez comme après des essais de Skills tiers.

Si MCP expose une autre surface fichier, documentez la précédence : quelles lectures passent par MCP, lesquelles par les outils file_* intégrés, lesquelles exigent un exec contrôlé — sinon trois refus différents pour le même chemin.

02. Matrice de choix

Pour les stand-ups de cinq minutes : choisir délibérément file_* ou exec.

Besoin Privilégier file_* Privilégier exec Note
Lecture binaire par blocsÉlevéFaibleSurveiller taille de chunk et sniffing MIME
Listage borné en profondeurÉlevéMoyenCoupler ignores et politique node_modules
TUI interactive / sudoFaibleÉlevéLes outils fichier ne remplacent pas un shell
Ventilation multi-dépôtsMoyenMoyenRétrécir les allowlists avant d’optimiser la vitesse

Avec la pile vocale v2026.5.4, validez l’ordre de démarrage du Gateway via l’analyse IPv6 avant d’accuser les outils fichier des timeouts.

03. Répétition en sept étapes

  1. Geler l’allowlist dans la revue de changement ; interdire l’exception orale « ajoute / ».
  2. Baseline doctor après upgrade ; conserver découverte de plugins et lignes lazy-load.
  3. Arborescence bac à sable sous ~/oc-file-sandbox/project, clone masqué uniquement.
  4. Charge double session : une session martèle dir_fetch, l’autre écrit de petits artefacts file_write ; surveiller file d’attente et disque.
  5. Red-team symlink avec lien hors bac ; vérifier les codes de refus.
  6. Exporter les refus en CSV dans le ticket.
  7. Effacer bac, jetons temporaires, exports identifiant l’hôte.
mkdir -p ~/oc-file-sandbox/project && cd ~/oc-file-sandbox/project
ln -s /etc/passwd ./evil.link
# tenter file_fetch via l’agent ; attendre des logs de refus structurés

Si l’espace libre passe sous seize gigaoctets, les grosses lectures peuvent produire des erreurs I/O transitoires prises pour de la politique. Nettoyer d’abord ~/Library/Logs et DerivedData obsolète. Connectivité : FAQ.

Si l’automatisation navigateur partage l’hôte, séparer les longues marches fichier des tâches UI sensibles TCC ; voir répétition des permissions macOS.

04. Table des refus

Signal Sens probable Première action
symlink blockedPolitique ou plafond de profondeurVérifier le chemin voulu ; ne pas désactiver globalement la défense
Écriture OK, CI ne voit rienChemin résolu hors ancre attendueAfficher cwd et cible absolue
dir_fetch très lentArbres énormes sans ignoresAjouter préfixes d’ignore et profondeur max

05. Métriques et mythes

  • Métrique 1 : environ 31–46 % des tickets « outil fichier cassé » venaient du stockage ou de la pression d’inodes, pas d’un bug de politique.
  • Métrique 2 : les équipes avec allowlists explicites + profondeur max ont vu 38–55 % moins de lectures accidentelles de secrets qu’avec des racines larges (selon politique).
  • Métrique 3 : les premières répétitions en bac à sable ont réduit la médiane de rollback de 21–33 %.

Mythe A : file_write est plus sûr donc les chemins peuvent être plus larges. Mythe B : tous les refus sont des faux positifs. Mythe C : répéter sur des homes de production.

Planifiez les changements de politique avec les fenêtres auto-update et wrapper pour éviter des Gateway à moitié mis à niveau.

05b. Planning location 1–3 jours

Jour 1 : geler l’allowlist, baseline doctor, cloner le bac ; hacher les racines autorisées le soir.

Jour 2 : stress double session, red-team symlink, CSV des refus ; capturer pics CPU et disque.

Jour 3 : merge minimal vers la config prod ; effacer le bac. Remise : diff d’allowlist, liste red-team, échantillons de refus, extrait JSON fusionné, responsable rollback.

Pour les stacks Compose, joindre le tableau des montages de volumes pour que la dérive post-upgrade ne désynchronise pas les politiques des points de montage réels.

06. Bastion Linux vs Mac loué

Les boucles rsync sur un saut Linux sont bon marché jusqu’à ce qu’il faille la sémantique du FS Apple, les flux proches du trousseau et des contrôles de permissions dignes du Finder. Un macOS natif en location journalière aligne le coût sur la fenêtre de répétition. Tarifs : guide coût Mac mini M4 ; hygiène : checklist zéro trace.

07. Chargement différé et timeouts

v2026.5.3 charge paresseusement la découverte de plugins, cron et schéma pour raccourcir le démarrage à froid. Des rafales immédiates de file_fetch peuvent chevaucher une registry incomplète. Collectez des journaux à 30 s, 60 s et 120 s après le démarrage avant d’élargir les chemins.

Ajoutez une sonde qui vérifie l’enregistrement de file_fetch avant le trafic principal ; gardez les sondes sur staging ou machines louées.

Déportez les longues traversées de répertoires vers des contextes enfants sessions_spawn si la file de chat principale doit rester réactive.

08. Coexistence MCP

Quand des serveurs fichiers MCP coexistent avec les outils intégrés, publiez une matrice de précédence dans le README et recopiez-la dans le ticket. Sinon trois formats de refus pour le même chemin.

Documentez ce qui reste MCP-only (auth distante, streaming) et ce qui doit migrer vers les outils intégrés pour la latence locale.

09. Alignement CI / artefacts

Si la CI ne publie que des .zip ou .tar.zst mais que les agents file_write des .dmg non signés, les portes de notarisation ou de distribution peuvent rejeter — déplacer des octets ne déplace pas la conformité.

Alignez les allowlists d’extensions entre la CI et le JSON de politique Gateway pour éviter le clivage « pipeline oui, assistant non ».

10. Modèle de ticket

Listez : profil actif, racines autorisées, mode symlink politique, version Gateway, espace disque libre en Go, MCP fichiers activé ou non. Joignez le CSV des refus et le nom d’hôte de répétition.

Ajoutez une ligne rollback : qui rétablit le JSON et qui redémarre le Gateway avec OPENCLAW_NO_AUTO_UPDATE si besoin.

11. Garde-fous performance

Plafonnez les jobs dir_fetch concurrents par session et imposez des limites dures de lignes pour les listes purement UI. Croisez avec les métriques I/O de l’hôte loué pour distinguer saturation et politique.

Pour indexer un monorepo, alignez les ignores sur ceux des postes développeur afin qu’un agent ne parcourt pas tout l’historique.

12. Revue post-fusion

Trente jours après la fusion, relancez doctor et un red-team symlink raccourci pour attraper la dérive silencieuse après upgrades sans lien. Stockez les hachages de policy JSON dans git et différez-les en post-mortem.

Faites tourner les jetons de répétition même en cas de succès ; les hôtes loués retournent au pool sans identifiants longue durée.

13. Menace des workspaces empoisonnés

Supposez que tout dépôt cloné peut exécuter un postinstall qui crée des symlinks ou des dotfiles ciblant des zones sensibles. Le jour red-team : pas seulement /etc/passwd, mais aussi des sauts relatifs ../../.ssh. Journalisez le chemin résolu pour allow et deny afin de détecter des divergences de parseur entre versions macOS.

Si plusieurs équipes partagent un pool loué, imposez une séparation stricte des homes pour qu’une répétition ne lise pas le bac d’une autre équipe (UID réutilisés, préfixes /tmp partagés). Listez les commandes de nettoyage dans le ticket pour le locataire suivant.

14. Observabilité

Corrélez les journaux Gateway avec les IDs de session agent et les IDs de requête fournisseur. Si l’agrégateur perd des champs JSON, vous ne pouvez plus prouver si le refus est avant ou après une relance modèle. Ajoutez un en-tête de trace éphémère pour les opérations fichier pendant la répétition seulement.

Exportez un histogramme des raisons de refus par heure pour repérer des ignores mal configurés qui provoquent des marches coûteuses avant le refus.

15. Capacité monorepo

Des millions de petits fichiers peuvent saturer le cache d’inodes même si le débit d’octets est modeste. Avant d’activer le listage récursif pour les agents, benchmark avec plafond de profondeur et mesurez temps mural vs churn d’inodes. Si la latence devient super-linéaire, répartissez sur plusieurs sessions à sous-arbres disjoints.

Vérifiez aussi la marge SSD sur des paliers Apple Silicon loués ; la fragmentation APFS importe moins que le manque de nœuds libres pour les métadonnées.

16. Gouvernance des allowlists

Exigez deux relecteurs pour toute extension des racines inscriptibles hors bac convenu. Les approbations solo transforment souvent des homes de prod en cibles d’essai. Calquez-vous sur la gouvernance des rotations de secrets.

Chaque trimestre, échantillonnez dix sessions au hasard et vérifiez que les refus correspondent toujours à la matrice documentée.

17. Chemins conteneur vs hôte

Si le Gateway tourne en conteneur alors que les outils fichiers visent des bind mounts hôte, la normalisation peut différer. Logguez les chemins absolus conteneur et hôte sur chaque refus. Après upgrade d’image de base, refaites le red-team symlink : libc et Node peuvent modifier le comportement marginal de realpath.

Documentez si file_write doit un jour toucher des dossiers secrets bind-mountés — par défaut : non.

18. Dette de formation

Planifiez un labo de trente minutes où chaque opérateur lance doctor, crée un bac à sable, déclenche un refus volontaire et exporte les journaux. La lecture seule n’ancre pas la mémoire pour distinguer défense symlink et erreurs de permission génériques.

Maintenez un schéma vivant reliant version Gateway, hash du bundle plugin et SHA du commit policy JSON pour répondre sans conjecture à « quelle combinaison était en ligne ».

19. Séquencement des mises à jour

Les équipes passent souvent de v2026.5.3 à v2026.5.4 dans la même fenêtre. Capturez une archive pré-upgrade des JSON de politique et des manifestes plugins pour différer ce qui change quand les refus fichier bougent après le second saut. Traitez chaque saut comme une micro-répétition, pas deux risques empilés dans une nuit.

Quand les plugins voix ajoutent des chemins réseau lourds, ne resserrez pas globalement les timeouts fichier pour compenser des soucis IPv6 traités ailleurs — gardez des réglages séparés pour préserver l’observabilité.

20. Coût sans répétition

Sauter la répétition louée économise des heures mais externalise le risque vers des incidents prod exigeant communication dirigeants et capital confiance client. Comparez la valeur d’une journée de location aux heures médianes perdues sur un sev-2 ; la location gagne souvent avant même la réputation.

Documentez les quasi-accidents où des refus ont bloqué une exfiltration ; ces histoires aident la finance à financer des répétitions récurrentes.

21. Passage à la sécurité

Les revues sécurité veulent le blast radius, pas l’enthousiasme produit. Fournissez le diff d’allowlist, le mode symlink, des chemins refusés types, la preuve d’absence de jetons prod sur l’hôte de répétition. Ajoutez des captures d’espace disque début/fin de bail pour montrer que vous n’avez pas rempli silencieusement un stockage partagé.

Liez le paragraphe interne sur la classification des données couvrant les outils attachés au modèle, pour éviter l’ambiguïté d’une étiquette générique « assistant IA ».

Joignez la chaîne de version Gateway et le hash du manifeste plugin à la même minute que l’export de répétition pour lever l’ambiguïté « on a upgradé pendant vos tests » en audit.

22. Régression policy JSON

Versionnez le policy JSON dans git avec validation de schéma en CI. Ajoutez un petit harnais qui pousse des chemins synthétiques dans le même résolveur que le Gateway pour empêcher les refactors d’élargir silencieusement les racines. Exécutez-le sur les PR qui touchent au tooling partagé, pas seulement aux éditions de politique.

Si la localisation change les messages d’erreur, faites reposer les parseurs de logs sur des codes stables, pas sur des sous-chaînes fragiles.

Note opérationnelle : un seul propriétaire du dépôt policy JSON qui participe aussi à la revue des notes de version Gateway — séparer ces rôles retarde de semaines la découverte de nouveaux outils déjà en production.

Relancez la répétition en sept étapes après chaque mineure macOS sur le palier loué : les correctifs Apple peuvent resserrer des comportements sandbox dont vos tests comptaient implicitement.

Documentez la chaîne de version exacte du Gateway à côté de chaque instantané de politique pour que les auditeurs puissent corréler les tentatives de symlink refusées avec la sémantique précise des plugins actifs lors de l’incident.