modifié : agenix.md

master
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** 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.
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 = {
file = ./secrets/secret_restic.age;
path = "/run/restic_pass";
user = "restic";
owner = "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
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**
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
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.
Il nous reste à voir la génération du fichier **age** et la configuration de ma
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
`
@ -117,29 +129,33 @@ sauvegarde.
in
{
"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
* 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**
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
définit (en mélangeant si on veux clés SSH et GPG) qui pourront éditer le fichier
**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**
défini de modifier ou lire le fichier généré. Parfait pour le travail d'équipe.
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.
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
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.