Commit 34f17e58 authored by Kourser's avatar Kourser
Browse files

L'installateur crée le premier compte, et l'amorce entre dans l'image

La dernière marche de l'installation demandait la chaîne Node sur l'hôte —
« pnpm amorcer-root » — à un script qui s'adresse précisément à l'exploitant
qui n'a que Docker. On l'envoyait chercher pnpm pour finir ce qu'on venait de
lui installer sans lui.

Le compte naît du parcours normal
  L'installateur appelle /auth/inscription, l'adresse que composerait un
  navigateur : mêmes contrôles, même journal, aucune porte de service. Ce
  n'est pas un détail de commodité — une inscription qui court-circuiterait la
  validation créerait un premier compte différent de tous les autres, et c'est
  celui-là qui devient root.

  Le mot de passe se saisit sans écho, et voyage par un fichier temporaire en
  600 plutôt que par la ligne de commande : « ps » est lisible par tous les
  utilisateurs de la machine. Le corps JSON est échappé par une fonction
  dédiée — jq n'est pas un prérequis, et un mot de passe porte légitimement
  une contre-oblique.

L'amorce voyage dans l'image
  esbuild produit désormais dist/racine.js à côté de dist/index.js, et
  l'octroi se fait par « docker compose exec app node dist/racine.js ». Plus
  rien à installer sur l'hôte. La règle ne bouge pas : l'amorce ne crée pas de
  compte, et refuse dès qu'un root existe.

Ce que le script ne promet pas
  Que le droit root suive dans la foulée. L'amorce refuse un compte sans
  second facteur actif : la console exige une présentation récente (EA-03), et
  accorder root à un compte qui ne pourrait jamais y entrer ne servirait
  personne. Le script tente l'amorçage, puis relaie SON message plutôt que
  d'en inventer un — le jour où la règle changera, il n'aura pas à mentir en
  attendant qu'on le corrige.

Deux défauts de portée, trouvés en éprouvant
  « pret » n'existe que si curl était là pour interroger la sonde, et
  « hote_public » que si un .env neuf a été écrit. Les lire ailleurs faisait
  tomber le script sous « set -u », juste après une levée réussie — au moment
  précis où tout venait de marcher. Le premier a un défaut, le second se
  déduit maintenant du .env, qui est toujours là.

Contrôlé
  L'inscription répond 201 sur une instance vierge montée à côté, et l'amorce
  y donne le motif attendu. Le mot de passe ne s'affiche pas : la frappe reste
  invisible et la valeur arrive intacte. L'échappement JSON tient les
  guillemets, les contre-obliques et l'UTF-8. 920 garanties, tsc, image
  reconstruite avec racine.js.

Co-Authored-By: default avatarClaude Opus 5 <noreply@anthropic.com>
parent 9262f70d
Loading
Loading
Loading
Loading