Ce que fait ce module #
Presque chaque service de votre instance a besoin d'un secret : le mot de passe de la base de données, la phrase secrète d'un outil d'intégrité, une clé d'API… Les conserver à la main — ou pire, les laisser par défaut — est l'une des façons les plus courantes pour une machine de finir compromise.
Le module secrets prend en charge ce cycle de vie en local : il génère chaque secret avec un générateur cryptographiquement sûr (CSPRNG), le stocke avec des permissions 0600 (seul root peut le lire), le renvoie avec une sortie propre prête à enchaîner dans un pipe, et le fait tourner quand vous en avez besoin. Tout s'organise par domaines (par exemple mariadb ou tripwire), et chaque domaine peut comporter plusieurs champs.
generate est idempotent : si le secret d'un domaine existe déjà, il n'y touche pas. Ainsi, une même image peut créer ses secrets au premier démarrage de chaque instance sans que deux machines partagent le même mot de passe. Les valeurs ne sont jamais journalisées ni affichées dans list.
Tâches courantes #
Choisissez ce que vous voulez faire. Chaque recette fournit la commande déjà écrite — il suffit de remplacer le domaine par le vôtre et de cliquer sur Copier.
1
Générer le secret d'un service
Crée un mot de passe fort pour un domaine, uniquement s'il n'existe pas encore.
Connectez-vous en SSH à votre serveur avec l'utilisateur ubuntu.
Générez le secret du domaine mariadb. Comme la commande est idempotente, vous pouvez la lancer autant de fois que vous voulez sans crainte d'écraser quoi que ce soit :
$ sudo imaxe secrets generate mariadbBesoin d'une phrase secrète longue pour un autre outil et dans un champ précis ? Ajustez --format, --len et --field :
$ sudo imaxe secrets generate tripwire --field local.passphrase --format passphrase --len 400600. S'il existait déjà, il n'a pas été modifié — la commande se termine tout de même avec succès.2
Lire un secret pour l'utiliser
Obtenez la valeur brute, prête à enchaîner dans une autre commande.
get n'affiche que la valeur, sans fioritures ni sauts de ligne superflus, pour que vous puissiez la transmettre à un autre processus par pipe :
$ sudo imaxe secrets get mariadbLe secret se trouve dans un champ précis du domaine ? Indiquez-le avec --field :
$ sudo imaxe secrets get tripwire --field local.passphrasePASS="$(sudo imaxe secrets get mariadb)" et l'utiliser directement dans votre script.3
Faire tourner un secret
Remplace la valeur par une nouvelle et marque le domaine comme ayant été renouvelé.
Générez une nouvelle valeur pour le domaine. Contrairement à generate, rotate remplace bel et bien le secret existant :
$ sudo imaxe secrets rotate mariadblist). Pensez à mettre à jour le service qui utilise ce secret avec la nouvelle valeur de get.4
Voir quels domaines existent
Consultez les métadonnées sans exposer aucune valeur.
Liste les domaines avec leurs métadonnées (date de création et date de renouvellement). N'affiche jamais le secret lui-même :
$ sudo imaxe secrets listVous en avez besoin pour un script ou une vérification automatique ? Demandez la sortie en JSON :
$ sudo imaxe secrets list --jsonLe secret n'est lisible que par root tant qu'il réside sur le disque. Dès que vous le lisez avec get, il passe dans votre terminal et votre shell : évitez de le laisser dans l'historique (history), dans des variables d'environnement exportées de trop ou dans des logs. Préférez des substitutions de commande ponctuelles comme "$(sudo imaxe secrets get mariadb)".
Synopsis #
imaxe secrets <subcomando> [<dominio>] [--field CLAVE] [flags]Toutes les sous-commandes nécessitent les privilèges root (utilisez sudo) car elles lisent et écrivent des fichiers 0600 sous /etc/imaxe/. Ajoutez --json à list pour obtenir une sortie lisible par machine, adaptée au scripting. Rappelez-vous : get émet la valeur brute, sans décoration, prête pour le pipe.
Sous-commandes #
| Sous-commande | Rôle | Flags pertinents |
|---|---|---|
| generate | Crée le secret d'un domaine s'il n'existe pas (idempotent, CSPRNG). Sans domaine, génère ceux de generate_on_first_boot. | --len, --format, --field |
| get | Renvoie la valeur d'un secret avec une sortie propre, adaptée au pipe. | --field |
| rotate | Génère un nouveau secret et marque le domaine comme renouvelé. | --field |
| list | Liste les domaines et leurs métadonnées (créé, renouvelé). N'affiche jamais les valeurs. | --json |
Arguments et flags #
| Flag | Type | Par défaut | Description |
|---|---|---|---|
| <dominio> | string | — | Domaine du secret (p. ex. mariadb, tripwire). Obligatoire pour get et rotate. Pour generate, vide = les domaines de generate_on_first_boot. |
| --field | string | value | Champ au sein du domaine. Permet de stocker plusieurs secrets par domaine (p. ex. local.passphrase). |
| --len | int | 32 | Dans generate : longueur du secret en caractères. |
| --format | enum | password | Dans generate : format de la valeur — password, passphrase ou hex. |
| --json | bool | false | Dans list, émet les métadonnées sous forme de JSON structuré sur stdout. |
Fichiers et chemins #
| Chemin | Contenu |
|---|---|
| /etc/imaxe/secrets.yml | Configuration du module : valeurs par défaut (length, format), domaines et liste de generate_on_first_boot. Stocké avec des permissions 0600. |
Exemple de secrets.yml :
defaults:
length: 32
format: password
domains: {}
generate_on_first_boot:
- mariadb
- tripwireAvec cette configuration, un sudo imaxe secrets generate sans domaine au premier démarrage crée les secrets de mariadb et tripwire avec la longueur et le format par défaut.
Codes de sortie et logs #
Chaque exécution renvoie un code que vous pouvez vérifier avec echo $? — utile pour enchaîner dans des scripts :
get sans domaine).Usage typique dans un script, en tirant parti de la sortie propre de get :
$ sudo imaxe secrets generate mariadb \
&& sudo imaxe secrets get mariadb | some-tool --stdin-password \
|| echo "falló con código $?"Résolution des problèmes #
| Symptôme | Cause probable | Solution |
|---|---|---|
| Renvoie NOTFOUND (code 3) | Le domaine ou le --field n'a pas encore été généré. | Créez-le d'abord avec secrets generate <dominio> (et le même --field). |
| Renvoie USAGE (code 2) | get ou rotate lancés sans indiquer le domaine. | Passez le domaine en argument ; il est obligatoire pour ces sous-commandes. |
generate ne change pas la valeur | Le secret existait déjà : generate est idempotent par conception. | Si vous voulez une nouvelle valeur, utilisez secrets rotate <dominio>. |
Permission denied à la lecture | Le fichier est 0600 et vous l'avez lancé sans privilèges. | Exécutez la commande avec sudo ; seul root accède au secret. |
Bloqué sur le module Secrets ?
Écrivez-nous avec la sortie de « imaxe <module> status --json » et nous vous répondons rapidement.