Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Bascule sur la base Air des comptes — ADR-183

Ce guide décrit un geste d’administration, pas une procédure automatisée. Il se fait machine par machine, exécuteurs de CI compris (ADR-183 D6), et avant d’installer un paquet qui porte ADR-183.

Pourquoi l’ordre compte

À partir d’ADR-183, air-sshd et air-launchd lisent la base Air des comptes (/etc/air/passwd.aircfg, /etc/air/group.aircfg) et plus jamais /etc/passwd :

  • si la base manque, ils refusent en la nommant (D2) — plus de session SSH ;
  • si la base est périmée, un compte créé depuis l’import leur est inconnu — _air-sshd compris, et le démon est alors écarté par le lanceur (ADR-182 D4).

Relevé le 2026-09-24 : speedy et neon portaient une base du 2026-07-24 qui ignorait _air-sshd. Installer le paquet sur ces machines sans les étapes ci-dessous y aurait coupé SSH.

Les étapes

#GesteCe qu’on vérifie avant de continuer
1sudo air-account importla base est écrite (/etc/air/*.aircfg)
2air-account check« concordent » — code de sortie 0
3installer le paquetle lanceur écarte air-sshd : l’ancien octroi ne s’applique plus au nouveau manifeste
4réémettre l’octroi d’air-sshd (ci-dessous)l’octroi nomme les deux fichiers de la base
5redémarrer le service, ouvrir une session SSHde bout en bout

⚠️ L’ordre 3 → 4 est imposé, et il a été écrit à l’envers dans la première version de ce guide (#969, corrigé le 2026-09-24). Un octroi est lié à l’empreinte SHA-256 du manifeste installé : le lanceur le vérifie à chaque lancement (arbitrate.rs, GrantDoesNotApply). Réémettre l’octroi avant d’installer le paquet le lierait à l’ancien manifeste, et il cesserait de s’appliquer à l’installation. Entre l’étape 3 et l’étape 5, le service est écarté : sur une machine qui sert SSH sous le lanceur, garder un autre accès ouvert (OpenSSH d’administration) et enchaîner les étapes.

Étape 1 — importer

sudo air-account import            # --from /etc --to /etc/air par défaut

L’import lit /etc/shadow : il exige root. Il remplace la base par le contenu de /etc — c’est la direction « hôte → Air » de ADR-183 D7, la seule synchronisation dans ce sens — à une exception près : un authentifiant Argon2id déjà présent dans la base est conservé. Il ne peut venir que d’air-account passwd (/etc/shadow n’est jamais projeté), et c’est notamment le mot de passe administrateur de root qui active la porte d’ADR-101.

⚠️ Le air-account 0.7.0 installé sur les machines au 2026-09-24 ne fait PAS cette exception : son import écrase shadow.aircfg, donc le mot de passe administrateur, et la porte retombe sans un mot en fenêtre d’amorce. Tant qu’il n’est pas remplacé par une version qui porte ADR-183, entourer l’import d’une sauvegarde et d’une restauration :

sudo cp -p /etc/air/shadow.aircfg /etc/air/shadow.aircfg.avant-import
sudo air-account import
sudo cp -p /etc/air/shadow.aircfg.avant-import /etc/air/shadow.aircfg

C’est ce qui a été fait sur speedy et neon le 2026-09-24 (sauvegardes complètes sous /etc/air/backup-20260924-191527).

Étape 2 — vérifier la concordance

air-account check                  # --base /etc/air --etc /etc par défaut

Un écart est une erreur qui nomme chaque compte et chaque groupe en cause. Juste après un import, il ne doit y en avoir aucun ; s’il y en a, ne pas continuer.

Étape 4 — réémettre l’octroi, APRÈS l’installation du paquet

Le manifeste d’air-sshd demande désormais /etc/air/passwd.aircfg et /etc/air/group.aircfg au lieu de /etc/passwd et /etc/group. Un octroi n’accorde que ce qui est nommé, et il est lié au manifeste pour lequel il a été émis : celui de l’ancien paquet ne s’applique plus. Relever ce que l’octroi actuel accorde avant d’installer (air-bundle show --granted --bundle org.air-desktop.sshd), puis, une fois le paquet installé, réémettre les mêmes droits, en ajoutant ces deux-là :

  --read-path /etc/air/passwd.aircfg \
  --read-path /etc/air/group.aircfg \

et en gardant --read-path /etc/passwd --read-path /etc/group : le démon ne les lit plus, mais les programmes de session (glibc) les lisent par NSS, sous la cage héritée du démon (ADR-183 D3, exception). Sans eux, la session s’ouvre mais id ne trouve plus le nom de l’utilisateur — c’est ce qu’a montré la première bascule de carbon, le 2026-09-24, faite avec la consigne d’origine « en remplaçant ».

Les autres options de l’octroi — ports, configuration, keystore, {home}, programmes de session, /usr et consorts — ne changent pas. Les options exactes sont celles de air-bundle grant --help ; ce guide ne les recopie pas toutes, pour ne pas les laisser dériver.

Et ensuite : tenir la base à jour

Sur un hôte (une distribution glibc où Air est installé), useradd et dpkg continuent d’écrire /etc sans passer par Air (ADR-183 D7). Après un tel changement :

air-account check                  # nomme l'écart
sudo air-account import            # rattrape la base

Tant que la base et /etc divergent, air-account user|group add|mod|del refuse — sans rien écrire, pour ne pas effacer de /etc le compte que useradd vient d’y créer.

Exécuteurs de CI : leurs tests root résolvent air-t-authz, air-t-session et _air-sshd. La recette de provisionnement crée ces comptes, puis importe.