2026 — OpenClaw Exec Approvals : politique tools.exec, fichier d’état d’approbation et repli conservateur sans UI sur Mac distant exclusif (SSH sans tête) — matrice décisionnelle + FAQ
Sur un Mac mono-locataire piloté uniquement en SSH, il n’y a pas de fenêtre native pour cliquer « autoriser ». Les Exec Approvals doivent donc se traduire en politique explicite pour tools.exec, en persistance d’état auditable et en modes de secours qui refusent plutôt qu’ils ne devinent. Ce guide propose une mise en œuvre reproductible : schéma de fichier, verrous, file d’attente hors UI et matrice pour arbitrer automatisation vs intervention humaine.
TL;DR — Ce qu’il faut retenir
- Politique
tools.exec: liste blanche de binaires + arguments canoniques ; interdiction par défaut des shells interactifs et des redirections vers des chemins hors périmètre. - Fichier d’état : un magasin unique (JSON Lines ou SQLite) avec
pending/approved/denied/expired, horodatage, empreinte des arguments et identifiant de corrélation — jamais d’approbation « globale » muette. - Sans UI : deux voies sûres — approbation asynchrone via fichier tampon signé ou commande CLI restreinte (sudoers / rôle dédié) qui ne fait qu’écrire une ligne d’état ; pas de copier-coller de jetons dans le chat.
- Repli conservateur : si l’état est illisible, verrouillé ou en retard, le défaut est refuser l’exécution et renvoyer une erreur bornée ; journaliser la cause pour l’astreinte SSH.
Pourquoi le sujet change sur un Mac distant exclusif en SSH
La passerelle et le runtime d’outils partagent souvent le même utilisateur de service. Dès qu’un modèle peut invoquer tools.exec, la surface critique rejoint celle du shell : chemins, variables d’environnement injectées par launchd, et volumes montés pour les artefacts CI. Un Mac loué en exclusif réduit le bruit multi-tenant, mais n’enlève pas l’obligation de tracer chaque décision d’exécution.
Pour cadrer l’identité du processus et le moindre privilège côté Git, cloud et clés locales, croisez avec 2026 — Agents de codage CLI IA sur un Mac distant exclusif en SSH : identifiants, périmètres de sécurité, isolation des espaces de travail et matrice du moindre privilège pour Git/APIs cloud + FAQ. Pour une base OpenClaw 24/7 sans fuite de données vers le SaaS, alignez le périmètre réseau avec Guide complet 2026 : Déploiement privé OpenClaw 24/7 sur Mac mini distant - Votre secrétaire IA sans fuite de données.
Politique tools.exec : couches P0 → P2
Traitez la politique comme un pare-feu applicatif :
- P0 — Invariants locaux : interdire
curl|bash, l’exécution depuis/tmpnon approuvé, et toute commande qui élève les privilèges sans binaire allowlisté. - P1 — Profils par rôle : séparer « lecture seule » (
git status,swift package describe) des profils « écriture contrôlée » (xcodebuildavec répertoires bornés). - P2 — Tâches longues : renvoyer un identifiant de job et continuer hors bande ; ne jamais bloquer la boucle d’approbation sur un binaire qui peut dépasser le budget temps.
Les hooks d’audit avant/après outil restent la couche qui matérialise ces règles dans les journaux : gardez la même sémantique de corrélation exec_id entre hooks, fichier d’état et ligne d’audit tools.exec pour rejouer un incident sans reconstituer à la main.
Fichier d’état d’approbation : schéma minimal reproductible
Stockez une ligne par intention d’exécution, pas par session de chat entière. Champs recommandés :
exec_id: UUID v4 ; propagé dans les journaux passerelle ettools.exec.tool+argv_digest: empreinte stable des arguments après rédaction des secrets.status: machine à états finie ; transitions uniquement via binaires autorisés.ttl: instant d’expiration ; les approbations « oubliées » retombent enexpiredplutôt qu’enapprovedimplicite.approver: sujet humain ou rôle technique (ex.breakglass-20260509) — jamais vide siapproved.
Verrouillage : ouvrez le fichier en mode exclusif (O_EXCL sur un fichier jeton, ou transaction SQLite) pour éviter deux processus qui approuvent la même ligne en double. Sur APFS, gardez le répertoire sur le volume local de la passerelle, pas sur un montage réseau qui masquerait les erreurs fsync.
Sans interface graphique : patterns d’approbation qui survivent à 3 h du matin
- File tampon signée : l’astreinte dépose un fichier
.pendingcontenantexec_id; un utilitaire local signé (installé via paquet interne) vérifie la signature et promeut l’état versapproved. - Socket ou FIFO dédié : même idée avec un canal à permissions 0600 et propriétaire le compte de service — utile si vous voulez éviter l’écriture directe dans le magasin principal.
- CLI restreinte : une commande
openclaw-exec-approvequi ne connaît que quelques sous-commandes et refuse tout paramètre libre ; journalisez l’utilisateur SSH réel viaSSH_USER/auditpipemacOS si la politique interne l’exige.
Évitez les « prompts » dans la session tmux de l’agent : ils ne passent pas les revues sécurité et se cassent après redémarrage. Préférez un contrat fichier stable et des tests d’intégration qui rejouent les transitions d’état.
Repli conservateur : matrice décisionnelle
Utilisez la table suivante lors des revues de configuration ; copiez-la dans votre runbook interne.
| Signal observé | Interprétation probable | Action par défaut |
|---|---|---|
| Magasin d’état illisible (permissions / volume démonté) | Risque d’approbations fantômes ou de mélange d’environnements | Refuser toute exécution P1/P2 ; conserver P0 lecture seule si explicitement hors tools.exec. |
pending au-delà du ttl |
Opérateur absent ou automation bloquée | Marquer expired, notifier webhook interne, ne pas auto-approuver. |
Écart entre argv_digest stocké et reçu |
Tentative de substitution d’arguments ou dérive de modèle | Refuser ; nouvelle ligne exec_id requise. |
| Pic de latence disque lors du fsync d’état | Instantané APFS ou contention logs | Backoff exponentiel court sur l’écriture d’état ; surface d’exécution inchangée (pas d’élargissement allowlist). |
Processus passerelle redémarré entre pending et exécution |
File d’attente non rejouée | Relecture stricte du magasin au boot ; aucune promotion pending → approved implicite. |
Runbook SSH (extraits)
- Preuve d’hôte : capturez
sw_vers, le labellaunchddu job passerelle et la somme de contrôle du magasin d’état — pour comparer deux incidents sans deviner. - Forensics minimal :
ls -le@sur le répertoire d’état, puis les 200 dernières lignes d’audit outil — ordre fixe pour des diffs exploitables. - Retour arrière : restaurer le fichier d’état depuis snapshot + redémarrage du job ; vérifiez que le nombre de lignes
pendingcorrespond aux attentes.
FAQ
Q : Peut-on « approuver une fois pour toutes » un outil dangereux ? Non recommandé. Préférez une allowlist d’arguments digestes + TTL court ; le break-glass doit laisser une trace nominative.
Q : Où placer le fichier sur macOS ? Sous /var/db/ ou répertoire dédié du compte de service avec quotas surveillés ; évitez le dossier utilisateur humain qui change au gré des migrations.
Q : Comment tester sans UI ? Scripts qui injectent des lignes pending puis appellent votre utilitaire d’approbation ; assertions sur les refus par digest ou TTL.
Q : Et si l’opérateur SSH est compromis ? La chaîne SSH + sudo est une surface à part ; combinez MFA sur le bastion, comptes séparés break-glass et corrélation avec les journaux passerelle.
Pourquoi Mac mini et macOS pour des Exec Approvals sérieuses
Les approbations d’exécution dépendent d’un stockage local prévisible : APFS et une seule couche disque rendent les fsync et les verrous fichiers honnêtes pour les automates, ce qui évite les « faux positifs d’approbation » causés par des latences NFS ou des VM surchargées. Apple Silicon garde la passerelle et les outils CLI réactifs sans ventilateurs bruyants, idéal pour un nœud 24/7 qui ne doit pas réveiller l’équipe pour des bruits de fond thermique.
macOS combine Gatekeeper, SIP et FileVault : utile quand le magasin d’approbation côtoie des clés Git et des jetons passerelle sur le même volume. Un Mac mini M4 tient des budgets d’énergie très bas au repos tout en exécutant nativement OpenSSH, Homebrew et votre passerelle — ce que vous validez en SSH reflète ce que launchd exécute réellement la nuit.
Si vous voulez que les Exec Approvals restent auditables sur des mois, posez-les sur du métal dédié avec un propriétaire clair pour les disques et les identifiants. Découvrez les options Mac mini sur SSHMac et déployez OpenClaw avec une surface d’exécution maîtrisée.
Mac mini dédié aux agents
M4.S Best-seller
Exécutez OpenClaw, les approbations d’outils et l’automation SSH sur Apple Silicon stable.