modifié : agenix.md
This commit is contained in:
parent
8571c713ec
commit
6ca2519157
|
@ -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.
|
||||
|
|
Reference in New Issue