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](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.
|
||||||
|
|
Reference in New Issue