From 6ca2519157e11cc8867c4a0c9d19d173465b4009 Mon Sep 17 00:00:00 2001 From: Alexandre LUCAZEAU Date: Wed, 6 Jul 2022 23:06:16 +0200 Subject: [PATCH] =?UTF-8?q?=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20agenix.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- posts/Nixos/agenix.md | 63 ++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 21 deletions(-) diff --git a/posts/Nixos/agenix.md b/posts/Nixos/agenix.md index 8b00498..a1e2b43 100644 --- a/posts/Nixos/agenix.md +++ b/posts/Nixos/agenix.md @@ -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.