module

Beryl::CLI::TangEnroll

Sous-commande beryl tang-enroll <host> : bascule un host configuré en mode: tang (dans le YAML) du chiffrement local (Option C, clé sur poste opérateur) vers Tang (Option D, auto-unlock au boot).

Pré-requis :

  • Le host a été bootstrapé : ses pools data sont chiffrés en ZFS native avec keyformat=hex. La clé locale ~/.config/beryl/<société>/<domaine>/<host>.key existe.
  • Le binaire crystal-clevis-zfs est installé sur le serveur (à /usr/local/sbin/crystal-clevis-zfs).
  • Le YAML host déclare encryption.mode: tang avec au moins une URL Tang (cf. boot-and-mount-plan.adoc).
  • Le serveur peut joindre les Tangs (réseau).
  • La clé est actuellement chargée sur le serveur (lancez beryl unlock d'abord si nécessaire) — zfs change-key demande la clé courante en mémoire.

Flow par pool en mode: tang :

  1. Pré-check : pool chiffré, clé chargée (keystatus=available).
  2. Pousse la clé locale via stdin SSH dans un tmpfs (/var/run/beryl-tang-key.<rand>, mode 0600).
  3. zfs set keylocation=file:///var/run/beryl-tang-key.<rand> — change UNIQUEMENT la propriété, pas la clé.
  4. crystal-clevis-zfs bind --use-existing-key --dataset <pool> -t URL1 [-t URL2 ...] [--threshold K] — le shard lit la clé via la keylocation, l'enrôle via Tang, écrit le JWE.
  5. rm /var/run/beryl-tang-key.<rand> — la clé sur disque ne doit pas survivre au tang-enroll (même en cas d'erreur).
  6. zfs set keylocation=prompt — restaure la prop d'origine.

Après tang-enroll, la commande met à jour /etc/rc.conf du serveur pour activer le déverrouillage automatique au boot (crystal_clevis_zfs_enable=YES + ajout du dataset à la liste crystal_clevis_zfs_datasets).

Idempotent : relancer sur un host déjà enrôlé est un no-op (le shard détecte que la clé est déjà enrôlée via le JWE existant ; sysrc est idempotent).

Voir boot-and-mount-plan.adoc § « Variantes de provisionnement » pour le contexte général, et crystal-clevis-zfs/README.adoc pour la commande sous-jacente.

Constants

EXIT_BIND_FAILED = 8
EXIT_KEY_MISSING = 4
EXIT_KEY_NOT_LOADED = 7
EXIT_NO_TANG_POOLS = 5
EXIT_OK = 0
EXIT_PRECHECK_FAILED = 10
EXIT_RC_CONF_FAILED = 9
EXIT_SSH_FAILED = 2
EXIT_TANG_BINARY_MISSING = 6
EXIT_UNEXPECTED = 3
EXIT_USAGE = 1
TANG_BINARY = "/usr/local/sbin/crystal-clevis-zfs"

Chemin attendu du binaire crystal-clevis-zfs côté serveur.

TMPFS_KEY_PREFIX = "/var/run/beryl-tang-key"

Préfixe du tmpfs où la clé est posée temporairement pendant l'enrôlement. Le suffixe aléatoire évite les collisions et le squat. /var/run est un tmpfs sur FreeBSD — la clé ne touche jamais le disque persistant.

Class methods

run(config_root : String, args : Array(String)) : Int32
Source

Nested types