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-sshdcompris, 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
| # | Geste | Ce qu’on vérifie avant de continuer |
|---|---|---|
| 1 | sudo air-account import | la base est écrite (/etc/air/*.aircfg) |
| 2 | air-account check | « concordent » — code de sortie 0 |
| 3 | installer le paquet | le lanceur écarte air-sshd : l’ancien octroi ne s’applique plus au nouveau manifeste |
| 4 | réémettre l’octroi d’air-sshd (ci-dessous) | l’octroi nomme les deux fichiers de la base |
| 5 | redémarrer le service, ouvrir une session SSH | de 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-account0.7.0 installé sur les machines au 2026-09-24 ne fait PAS cette exception : son import écraseshadow.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.aircfgC’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.