Skip to content

Auto Load FR

CyberMind-FR edited this page Oct 11, 2026 · 1 revision

Auto-Load

English

🔴 BOOT — déploiement et provisionnement

À quoi ça sert. Livrer une SecuBox qui s'installe toute seule, sans écran ni clavier. La box est préparée à l'atelier (un fichier de réponses signé et un jeton à usage unique déposés sur sa partition de démarrage). Quand le client la branche, elle appelle l'infrastructure Auto-Load en HTTPS, ouvre un tunnel sortant, publie un pré-rapport de ce qu'elle va faire, attend un délai de grâce, installe son profil et envoie un rapport final. Une box qui ne porte pas de fichier de réponses n'est jamais touchée.

État. La phase A (une image préparée) est livrée : l'agent est dans toutes les images (il fait partie du profil lite, donc aussi isp et full). La phase B (démarrage réseau sans préparation) n'est pas livrée. L'essai complet sur matériel reste à faire (#2186) ; le banc de bout en bout sans matériel passe.

Les deux moitiés

Moitié Paquet Tourne sur Rôle
Infrastructure secubox-autoload l'hôte Auto-Load (jamais sur une box cliente) émet et révoque les jetons, tient le concentrateur du tunnel, reçoit enrôlements, pré-rapports et progression, sert le panel de suivi
Agent secubox-autoload-agent chaque box cliente vérifie les réponses signées, s'enrôle, monte le tunnel, valide, installe, rapporte
Outil d'atelier autoload-atelier (dans le paquet de l'agent) atelier ou infrastructure, jamais sur la box cliente prépare et contrôle la partition de démarrage

Ce qui se passe, étape par étape

atelier   autoload-atelier preparer   ->  /boot/secubox/autoload/{reponses.toml, reponses.toml.sig, jeton}
client    branche la box              ->  secubox-autoload-agent.service démarre au premier boot
             1. installe le jeton (0600, root) et l'EFFACE de /boot
             2. vérifie la signature du fichier de réponses contre le trousseau « SecuBox Provisioning » (gpgv)
             3. génère la clé WireGuard SUR la box, s'enrôle en HTTPS (le jeton fait foi), monte le tunnel sortant
             4. établit le plan, publie un pré-rapport (nom de la box, profil, paquets, réseau, comptes)
             5. attend le délai de grâce (15 min par défaut) - l'opérateur peut refuser
             6. installe le profil, applique réseau et comptes, écrit le rapport final

L'unité ne démarre que si les trois conditions sont réunies : /boot/secubox/autoload/reponses.toml existe, le trousseau /usr/share/secubox/autoload/provisioning.gpg est installé, et aucun rapport final n'existe déjà.

Reprise

Chaque étape réussie est notée (/var/lib/secubox/autoload-agent/etat.json, 0600). Après un échec ou une coupure, le parcours reprend à la première étape non faite et ne rejoue jamais l'enrôlement (le jeton est à usage unique). Après 8 échecs consécutifs l'agent abandonne et pose un marqueur ; l[[First-Boot-Premier-Pas-FR|assistant de premier pas]] manuel reprend alors la main au démarrage suivant.

Fichier de réponses signé

Le fichier de réponses (reponses.toml) est le profil de l'assistant plus une section [provision]. Il est lu en mode strict : section ou clé inconnue, sous-table, fichier de plus de 64 Kio sont refusés.

Clé [provision] Sens
mode auto (zero-touch ; exige un profil complet, aucun écran pour demander ce qui manque) ou one-shot (un opérateur confirme)
jeton une référence ref:/etc/secubox/secrets/<nom>, jamais la valeur
lot étiquette du lot
grace_min délai de grâce en minutes (0 à 1440, 15 par défaut)
infra nom d'hôte de l'infrastructure

Contrôlé avant toute application :

  • aucun secret en clair : le mot de passe administrateur est une empreinte argon2, le jeton une référence, un jeton d'invitation du maillage en clair est refusé ;
  • signature OpenPGP détachée vérifiée par gpgv contre l'unique trousseau livré avec l'image : fichier modifié d'un octet, signé par une autre clé ou non signé = refus, rien n'est installé.

Atelier : autoload-atelier

Commande Effet
cle-init --homedir D --export provisioning.gpg crée une seule fois la clé « SecuBox Provisioning » (Ed25519, sans échéance) et exporte la partie publique
preparer --reponses R.toml --boot MNT --homedir D [--jeton-stdin | --jeton-fichier F] valide le fichier comme la box le fera, le signe, vérifie la signature contre le trousseau livré avec l'image, et n'écrit rien tant que les trois n'ont pas réussi
verifier --boot MNT contrôle ce qui est déposé, comme la box le fera : réponses valides, signature acceptée, jeton présent

Procédure :

  1. Sur l'infrastructure, émettre un jeton : autoloadctl emettre --client <client> --profil lite --lot <lot>. Il s'affiche une seule fois.
  2. Écrire le fichier de réponses à partir de l'exemple livré avec secubox-premier-pas (reponses-autoload.toml) ; garder jeton = "ref:/etc/secubox/secrets/autoload-jeton".
  3. Flasher l'image de la release (voir Live-USB-FR pour dd) et monter sa partition de démarrage.
  4. Préparer : passer le jeton sur l'entrée standard (jamais en argument) : printf '%s' "$JETON" | autoload-atelier preparer --reponses reponses.toml --boot /mnt/boot --homedir <dossier de la clé> --jeton-stdin.
  5. Contrôler : autoload-atelier verifier --boot /mnt/boot.
  6. Démonter, livrer. Après le premier démarrage, autoload-agentctl etat montre l'avancement et autoload-agentctl rapport le rapport final.

La partie privée de la clé de signature ne quitte jamais l'atelier ; seul le trousseau public est livré (par secubox-autoload-agent). Pour une rotation : publier un paquet dont le trousseau contient les deux clés publiques, re-signer les lots à venir, puis retirer l'ancienne. Clé privée perdue ou compromise : révoquer les jetons non réclamés des lots et publier un trousseau sans elle.

Pré-rapport et délai de grâce

Le pré-rapport dit ce qui va arriver : nom de la box, profil, paquets à installer (simulation apt-get -s install secubox-lite|isp|full), mode réseau, noms des comptes créés, et seulement qu'il y a des secrets, jamais leur valeur ni le nom de leur fichier. Il est écrit en 0600 et identifié par son empreinte SHA-256.

Mode Comportement
auto le pré-rapport est publié à l'infrastructure, puis la box attend le délai de grâce ; l'opérateur peut le refuser depuis le panel. Fermé par défaut : pré-rapport non publiable ou refus non consultable = on n'applique pas
one-shot n'applique que si l'opérateur confirme l'empreinte de ce pré-rapport (autoload-agentctl confirmer <empreinte>) ; la confirmation d'un autre plan ne vaut rien ; sans confirmation avant l'échéance, refus

L'application lance ensuite le moteur de l'assistant (premier-pasctl appliquer : réseau, comptes) puis secubox-profilectl apply <profil> --yes (rollback 4R, audit).

Rapport final

À la fin, l'agent construit un rapport sans aucun secret (client, profil, paquets, domaine, comptes par nom, adresse de tunnel, début, fin, étapes). Il est écrit sur la box (/var/lib/secubox/autoload-agent/rapport.json), affiché à l'écran au prochain affichage de connexion, et envoyé à l'infrastructure, qui le transmet par courrier au client si son contact est renseigné. Une diffusion en panne n'arrête jamais le parcours. L'envoi du courrier dépend de la configuration SMTP de l'infrastructure.

Tunnel wg-autoload

Une étoile : chaque box ouvre un tunnel WireGuard sortant vers le concentrateur.

  • Plage 10.64.0.0/16 (concentrateur 10.64.0.1), port UDP 51830, distincte des plages du maillage et de l'éphémère.
  • Chaque pair n'a droit qu'à sa propre adresse /32 : les clients ne se voient pas.
  • La clé de la box est générée sur la box (/etc/secubox/secrets/autoload-wg.key, 0600), jamais dans l'image, jamais en ligne de commande. Une clé existante n'est jamais remplacée.
  • La configuration cliente n'a ni ListenPort ni route par défaut (AllowedIPs = le /32 du concentrateur), PersistentKeepalive = 25 : aucun port entrant côté client.
  • Ce que répond l'infrastructure est validé avant d'écrire un fichier (nom d'hôte épinglé, /32 dans la plage et différent du concentrateur, clés valides, aucun champ inconnu).
  • Dans le tunnel, la box ne parle qu'au service du concentrateur (TCP 8470) : progression, pré-rapport, sondage du refus. L'identité de la box est l'adresse source de la connexion ; aucun en-tête n'est cru.

Infrastructure : autoloadctl

Commande Effet
emettre --client C --profil lite|isp|full [--lot L] [--serie S] [--duree-jours 90] émet un jeton (affiché une fois)
preenregistrer --serie S --client C --profil P préenregistre un numéro de série ; sa box reçoit son jeton à la volée, une seule fois
lister [--etat emis|reclame|revoque] [--client C] [--lot L] [--json] liste les jetons (jamais leur valeur)
revoquer (--id N | --lot L) --motif "..." révoque un jeton ou un lot ; pour un jeton réclamé, rend la clé publique à retirer du tunnel
abonnement --client C --statut actif|suspendu|revoque fixe l'abonnement du client
tunnel-init crée la clé du concentrateur (0600) et affiche sa clé publique
tunnel-sync valide, pose la configuration atomiquement, wg syncconf : aucun pair existant n'est coupé

Panel de suivi (administrateur seulement)

Route (sous /api/v1/autoload) Rôle
GET /boxes, /jetons, /prerapports, /prerapports/{empreinte} statut (en attente, préparation, en cours, terminé, révoqué) et progression en % ; jamais la valeur d'un jeton
POST /jetons émettre un jeton (valeur montrée une fois)
POST /jetons/{id}/revoquer révoquer, retirer le pair du tunnel, appliquer
POST /clients/{client}/abonnement changer un abonnement
POST /lots/{lot}/revoquer révoquer un lot
POST /series préenregistrer un numéro de série
POST /prerapports/{empreinte}/refuser refuser un pré-rapport pendant le délai de grâce

Toutes exigent une session d'administrateur. La route publique d'enrôlement POST /enrol est gardée par le jeton lui-même et limitée (10 essais refusés par 10 minutes et par source).

Sécurité

Mesure Détail
Jeton à usage unique 128 bits aléatoires, préfixe fixe (un jeton qui fuit se repère), montré une fois, stocké en empreinte SHA-256 ; la réclamation le consomme et lie la box à sa clé publique WireGuard ; une clé ne peut porter deux jetons
Durée de vie 90 jours avant réclamation par défaut, 365 au plus
Refus uniforme inconnu, expiré, déjà pris, révoqué, abonnement non actif, mauvaise clé : toujours « jeton refusé » ; la vraie raison est dans l'audit
Révocation à tout moment, par jeton ou par lot ; le pair est retiré du tunnel
Abonnement actif, suspendu, revoque : un client non actif ne peut ni réclamer ni recevoir de nouvelles livraisons ; une box déjà en service garde toutes ses fonctions locales
Réponses signées gpgv contre un seul trousseau ; fichier modifié = refus
Aucun secret en clair les réponses portent empreintes et références ; le jeton est effacé de /boot au premier démarrage (au mieux sur FAT : c'est l'usage unique qui protège)
Services confinés utilisateur dédié et AppArmor enforce sur le service d'infrastructure ; unité durcie côté agent
Audit chaque émission, réclamation, refus (avec la raison), révocation et changement d'abonnement est ajouté au journal d'audit Auto-Load, jamais avec une valeur de jeton
Box clonée n'hérite d'aucune identité : la clé WireGuard est générée sur la box

Pare-feu de l'infrastructure : UDP 51830 en entrée seulement, et TCP 8470 depuis l'interface du tunnel seulement. La redirection de port du routeur Internet vers l'hôte reste une étape manuelle.

Limites

  • Le démarrage réseau (phase B) n'est pas livré : l'U-Boot d'usine de la MOCHAbin n'a pas wget. Voir Netboot-Install pour la procédure manuelle.
  • Les images de la release portent l'agent mais aucun fichier de réponses : l'atelier le dépose, par client.
  • Le profil isp et le cycle d'abonnement sont couverts par le banc ; le premier essai sur une vraie carte reste à faire.

Voir aussi

SecuBox | FR | DE | 中文 | v3.0.0-alpha.12


Projet

Soutenir


🔴 BOOT — Démarrer

🟢 ROOT — Configuration

🟣 MIND — Modules

🔵 MESH — Référence

🟠 WALL — Matériel

🤖 Workflow Agents


Liens

Clone this wiki locally