modifié : agenix.md

This commit is contained in:
Alexandre LUCAZEAU 2022-07-06 23:06:16 +02:00
parent 8571c713ec
commit 6ca2519157
No known key found for this signature in database
GPG Key ID: 3C8ADB07A8217BD3
1 changed files with 42 additions and 21 deletions

View File

@ -26,7 +26,7 @@ Sous nixos, on dispose d'un outil qui utilise **age**, il s'agit de
**[agenix](https://github.com/ryantm/agenix)** **[agenix](https://github.com/ryantm/agenix)**
**agenix** va déchiffrer le fichier **age** que nous aurons généré (celui qui est stocké **agenix** va déchiffrer le fichier **age** que nous aurons généré (celui qui est stocké
dans git) en un fichier que nous auront choisi. Le contenu sera alors en clair sur le dans git) en un fichier que nous aurons choisi. Le contenu sera alors en clair sur le
système, lisible en fonction des droits qu'on aura défini. système, lisible en fonction des droits qu'on aura défini.
Sur la page github, il y a un tutorial, mais lors de la mise en oeuvre, il m'a manqué Sur la page github, il y a un tutorial, mais lors de la mise en oeuvre, il m'a manqué
@ -69,7 +69,7 @@ Ou vous pouvez centraliser comme moi, la gestion de vos secrets dans un fichier
age.secrets.secret_restic = { age.secrets.secret_restic = {
file = ./secrets/secret_restic.age; file = ./secrets/secret_restic.age;
path = "/run/restic_pass"; path = "/run/restic_pass";
user = "restic"; owner = "restic";
group = "restic"; group = "restic";
}; };
} }
@ -78,20 +78,32 @@ Comme on peut le voir, j'ai définit une variable **age.secrets.secret_restic**
contient le chemin relatif vers le fichier chiffré, le path du fichier non chiffré, son contient le chemin relatif vers le fichier chiffré, le path du fichier non chiffré, son
owner et son groupe d'appartenance. owner et son groupe d'appartenance.
**path**, **user** et **group** sont facultatifs. **path**, **owner** et **group** sont facultatifs.
Par défaut, agenix déchiffre dans **/run/agenix.d/xx/secret_restic** ou **xx** Par défaut, agenix déchiffre dans **/run/agenix.d/xx/secret_restic** ou **xx**
correspond à un nombre et représente la génération. Ce nombre varie à chaque appel de correspond à un nombre et représente la génération. Ce nombre varie à chaque appel de
**nixos-rebuild switch** on comprend assez facilement l'interet de définir une copie **nixos-rebuild switch** on comprend assez facilement l'interet de définir une copie
fixe qui sera dans **path** fixe qui sera dans **path**
**user** et **group** permettent de donner le droit à accéder au secret à des comptes **owner** et **group** permettent de donner le droit à accéder au secret à des comptes
précis. précis.
Il nous reste à voir la génération du fichier **age** et la configuration de ma Il nous reste à voir la génération du fichier **age** et la configuration de ma
sauvegarde. sauvegarde.
# Comment s'articule secrets.nix, GPG, SSH et agenix ?
Nous avons 1 fichier age par mot de passe, et un fichier sercret.nix qui permet de
définir quel clé SSH ou GPG peux déchiffrer le fichier **age** le tout dans un dossier
**secrets**
Comme je souhaite utiliser une clé ssh, je dois déterminer quel clé est disponible :
ssh-keyscan 192.168.10.114
Attention, la commande **nixos-rebuild** ne va pas connaitre votre clé dans $HOME/.ssh
mais va travailler à partir de **/etc/ssh**
# Le fichier secrets.nix
## Exemple d'un fichier secrets.nix ## Exemple d'un fichier secrets.nix
` `
@ -117,29 +129,33 @@ sauvegarde.
in in
{ {
"secret_restic.age".publicKeys = users_restic; "secret_restic.age".publicKeys = users_restic;
"secret_nextclouddb.age".publicKeys = users_restic; "secret_nextclouddb.age".publicKeys = users_nextcloud;
} }
` `
Subtilité ici, car le groupe users_nexcloud est constitué de restic et nextcloudb Subtilité ici, car le groupe users_nexcloud est constitué de restic et nextcloudb
* on défini autant de variable que nous avons clés publics, ici il s'agit de
**nextcloud-db** et **restic**
* on affecte le ou les comptes à des groupes. Ici le compte **restic** appartient au
groupe users_backup et les comptes **restic** et **nextcloud-db** appartiennent au
groupe **users_nextcloud**
* on définit quel groupe peux éditer/modifier quel fichier **age**. Donc ici le groupe
**users_restic** peux déchiffrer/modifier/créer le fichier **secret_restic.age** et
le groupe users_nextcloud (donc les détenteurs des clés publics attachés à
nextcloud-db ainsi que restic) peut éditer/modifier/créer le fichier
**secret_nextclouddb.age**
Petite précision, on parle de user, mais nextcloud-db et restic ne sont pas des comptes
utilisateur au sens unix, mais bien des variables qui permettent de nommée le détenteur
de la clés public
Lorsque le fichier **secrets.nix** est créé, on peux générer nos fichiers **age**
# Génération du fichier **age** # Génération du fichier **age**
La génération du fichier **age** se fait après la création du fichier **secrets.nix** La génération du fichier **age** se fait donc après la création du fichier **secrets.nix**
**Agenix** s'appuis sur ce fichier pour chiffrer et permettre aux différent comptes **Agenix** s'appuis sur ce fichier pour chiffrer et permettre aux différent comptes
définit (en mélangeant si on veux clés SSH et GPG) qui pourront éditer le fichier défini de modifier ou lire le fichier généré. Parfait pour le travail d'équipe.
**age** pour le modifier par exemple. Il est ainsi facile de permettre à plusieurs
personnes de modifier le mot de passe.
Nous avons 1 fichier age par mot de passe, et un fichier sercret.nix qui permet de
définir quel clé SSH ou GPG peux déchiffrer le fichier **age** le tout dans un dossier
**secrets**
Comme je souhaite utiliser une clé ssh, je dois déterminer quel clé est disponible :
ssh-keyscan 192.168.10.114
Attention, la commande **nixos-rebuild** ne va pas connaitre votre clé dans $HOME/.ssh
mais va travailler à partir de **/etc/ssh**
Ainsi pour chiffrer ou modifier mon mot de passe : Ainsi pour chiffrer ou modifier mon mot de passe :
@ -150,7 +166,7 @@ les associer à des comptes, ou variables. Ces comptes vont être intégrés à
d'utilisateur et c'est au groupe que l'on donne l'autorisation de déchiffrer le fichier. d'utilisateur et c'est au groupe que l'on donne l'autorisation de déchiffrer le fichier.
En d'autres termes, on va autoriser 1 ou plusieurs utilisateurs, à partir de leur clé En d'autres termes, on va autoriser 1 ou plusieurs utilisateurs, à partir de leur clé
SSH ou GPG, d'accèder SSH ou GPG, d'accèder au fichier age déchiffré.
# Utilisation dans le fichier backup.nix # Utilisation dans le fichier backup.nix
Dans le fichier ci-dessous, on peut voir que l'utilisation dans une configuration est Dans le fichier ci-dessous, on peut voir que l'utilisation dans une configuration est
@ -173,3 +189,8 @@ transparente, et pour cause, le fichier age est déchiffré dans **/run/restic_p
}; };
} }
` `
# Pour finir
A partir de là, vous pouvez générer votre système avec **nixos-rebuild --switch**
Vos services vons pouvoir fonctionner avec des mots de passes aux accès réduits, et ces
fichiers seront versionnés dans git, sans risque de compromission.