[{"data":1,"prerenderedAt":18},["ShallowReactive",2],{"doc:fr:plugins\u002Fpermissions":3},{"title":4,"lede":5,"html":6,"headings":7},"Les permissions","Ce qu’un plugin demande dans son manifeste, ce que chaque demande lui ouvre, et ce qu’Escouade applique ou ne fait que montrer. La fenêtre d’installation les dit en mots, la plus forte d’abord.","\u003Ch2 id=\"chaque-permission\">Chaque permission\u003C\u002Fh2>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Dans le manifeste\u003C\u002Fth>\n\u003Cth>Ce qu’elle ouvre\u003C\u002Fth>\n\u003Cth>Ce qu’Escouade applique\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">run.js\u003C\u002Fcode>, \u003Ccode class=\"key\">run.wasm\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Un programme en JS, en TypeScript ou en Rust, dans l’app, en WASM.\u003C\u002Ftd>\n\u003Ctd>Tout : 64 Mo de mémoire, des délais, et rien hors de ce qu’il déclare ici : ni réseau, ni fichier, ni programme.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">run.command\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Un programme lancé dans un process, avec tes droits : il peut lire tes fichiers, lancer d’autres programmes, se connecter où il veut. Le store n’en publie aucun : il ne vient que d’un dossier ou d’un dépôt git.\u003C\u002Ftd>\n\u003Ctd>Rien au-delà de ses autres permissions : Escouade le lance, l’arrête avec tout ce qu’il a lancé, borne sa mémoire à 1 Go, mais ne l’enferme pas.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">permissions.decide\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Autoriser ou refuser ce que tes agents demandent, avant toi.\u003C\u002Ftd>\n\u003Ctd>Une réponse en 500 ms, sinon la demande vient à toi ; un refus l’emporte ; chaque décision est au journal. Jamais donnée par un projet.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">permissions.commands\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Les programmes de ton ordinateur qu’il peut lancer, ligne par ligne.\u003C\u002Ftd>\n\u003Ctd>Rien d’autre ne se lance, sans shell, et le lancement va au journal. Mais le programme lancé a tes droits.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">permissions.files\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Les dossiers qu’il lit ou écrit : le sien, un dossier à lui, ceux de tes agents.\u003C\u002Ftd>\n\u003Ctd>Une liste fermée de racines, résolues par Escouade, liens suivis, jamais un projet privé. Chaque écriture va au journal.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">limits\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Plus de temps ou d’octets pour un appel.\u003C\u002Ftd>\n\u003Ctd>Plafonnées par Escouade : 120 s, 32 Mo, 4 Mo pour un fichier.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">permissions.events\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Les faits qu’il reçoit : un ticket qui change de colonne, un agent qui attend…\u003C\u002Ftd>\n\u003Ctd>Un fait hors de la liste ne lui est jamais envoyé.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">permissions.network\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Les hôtes où il se connecte, les instances que tu lui donnes (\u003Ccode class=\"key\">{account}\u003C\u002Fcode>), le serveur local d’un harness (\u003Ccode class=\"key\">local:shared\u003C\u002Fcode>).\u003C\u002Ftd>\n\u003Ctd>Appliquée à un programme en WASM et aux webhooks : rien d’autre ne part. Seulement montrée pour un programme \u003Ccode class=\"key\">run.command\u003C\u002Fcode>, dont Escouade ne filtre pas le réseau.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">permissions.secrets\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Les secrets qu’il garde au trousseau du système, sous un nom à lui.\u003C\u002Ftd>\n\u003Ctd>Il ne reçoit que ceux de sa liste, jamais ceux d’un autre plugin, d’un compte ou d’un harness ; ils sont masqués dans son journal.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>Pour chaque capacité, ce qu’elle permet, ce qu’Escouade refuse et ce que dit la fenêtre : \u003Ca href=\"\u002Fdocs\u002Fplugins\u002Fcapabilities\u002F\">les capacités de l’hôte\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Les points d’extension ajoutent leurs propres lignes à la fenêtre : un harness y dit le programme que ses agents lanceront, un thème où le trouver.\u003C\u002Fp>\n\u003Ch2 id=\"ce-que-tu-gardes-en-main\">Ce que tu gardes en main\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Retirer une permission\u003C\u002Fstrong> : l’onglet Permissions de sa page, un interrupteur par permission. Son programme est relancé sans elle (voir \u003Ca href=\"\u002Fdocs\u002Fplugins\u002Finstaller\u002F#retirer-une-permission\">installer un plugin\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Le couper pour un projet\u003C\u002Fstrong> : l’onglet Projets. Un projet privé est coupé d’office pour tout plugin que tu as installé.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Une mise à jour qui demande plus\u003C\u002Fstrong> redemande ton accord, et la fenêtre marque « nouveau » chaque permission en plus.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cdiv class=\"callout warning\">\u003Cp class=\"callout-title\">Attention\u003C\u002Fp>\u003Cp>Un programme \u003Ccode class=\"key\">run.command\u003C\u002Fcode> a tes droits. Même coupé pour un projet privé, il pourrait lire ses fichiers sur le disque : Escouade ne lui envoie rien de ce projet, mais ne peut pas l’en empêcher. N’installe un tel programme que d’un auteur en qui tu as confiance, ou une version « Vérifié par Escouade ».\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Ch2 id=\"pour-l-auteur\">Pour l’auteur\u003C\u002Fh2>\n\u003Cp>Demande le moins possible : chaque permission en plus est une ligne de plus dans la fenêtre, et une raison de plus pour la revue de la refuser (\u003Ca href=\"\u002Fdocs\u002Fplugins\u002Fsecurity\u002F\">la sécurité des plugins\u003C\u002Fa>). Un plugin s’écrit en \u003Ccode class=\"key\">run.js\u003C\u002Fcode> ou en \u003Ccode class=\"key\">run.wasm\u003C\u002Fcode> : le store n’accepte rien d’autre.\u003C\u002Fp>\n",[8,12,15],{"id":9,"text":10,"depth":11},"chaque-permission","Chaque permission",2,{"id":13,"text":14,"depth":11},"ce-que-tu-gardes-en-main","Ce que tu gardes en main",{"id":16,"text":17,"depth":11},"pour-l-auteur","Pour l’auteur",1793889379360]