Aller au contenu

Versionner /etc avec Git grâce à Etckeeper

Mise à jour :

etckeeper

etckeeper est un outil simple mais puissant qui me permet de suivre l’évolution des fichiers de configuration sous Linux en utilisant Git. En versionnant le répertoire /etc, je peux facilement revenir à une configuration antérieure après une mise à jour, un changement malheureux ou une erreur de manipulation. Un indispensable pour tout administrateur qui veut dormir tranquille.

Pourquoi versionner le répertoire /etc ?

Le répertoire /etc contient l’ensemble des fichiers de configuration système sur une machine Linux. Cela inclut des éléments aussi critiques que la configuration réseau, les comptes utilisateurs, les services démarrés au boot, les règles de sécurité, et bien plus encore. Si un fichier est accidentellement modifié ou supprimé, les conséquences peuvent être lourdes : panne réseau, impossibilité de démarrer des services essentiels, voire blocage complet du serveur.

C’est ici que versionner /etc avec Git via etckeeper prend tout son sens. Voici pourquoi :

  • Historique complet des changements : chaque modification est enregistrée, datée, et associée à un auteur. Cela me permet d’identifier facilement quand et pourquoi un changement a été fait.
  • Retour en arrière simplifié : en cas de problème, je peux restaurer rapidement une ancienne version d’un fichier ou de l’ensemble du répertoire.
  • Audit facilité : lors d’une analyse de sécurité, pouvoir montrer un historique clair de la configuration est un vrai plus.
  • Travail en équipe sécurisé : sur des systèmes gérés par plusieurs administrateurs, cela permet d’éviter des conflits ou des erreurs silencieuses.
  • Sauvegarde efficace : même si ce n’est pas une sauvegarde complète du système, garder une copie versionnée de /etc est un élément clé d’une bonne stratégie de sauvegarde des fichiers /etc.

Installation d’etckeeper sur différentes distributions

Pour installer etckeeper, je dois d’abord choisir le gestionnaire de paquets adapté à ma distribution Linux. L’outil est disponible dans les dépôts officiels de la plupart des distributions modernes.

Sur Debian, Ubuntu et dérivés

Terminal window
sudo apt update
sudo apt install etckeeper

L’installation configure automatiquement Git comme système de contrôle de version par défaut. Si je préfère Mercurial, Bazaar ou Darcs, je peux modifier ce choix après l’installation.

Sur CentOS, RHEL et Fedora

Terminal window
sudo dnf install etckeeper

ou, sur les anciennes versions utilisant yum :

Terminal window
sudo yum install etckeeper

Sur Arch Linux et Manjaro

Terminal window
sudo pacman -S etckeeper

Vérification de l’installation

Une fois installé, je peux vérifier la version d’etckeeper avec :

Terminal window
etckeeper --version

Configuration initiale et choix du gestionnaire de version

Après l’installation d’etckeeper, je dois effectuer une configuration de base pour l’adapter à mon environnement.

Le fichier principal de configuration se trouve ici :

Terminal window
/etc/etckeeper/etckeeper.conf

Je commence par ouvrir ce fichier avec mon éditeur préféré :

Terminal window
sudo vi /etc/etckeeper/etckeeper.conf

Si vous ne maitrisez pas l’éditeur de fichiers vi, je vous recommande de lire mon guide sur vi pour mieux comprendre son fonctionnement.

Choisir le système de contrôle de version (VCS)

Par défaut, Git est utilisé, ce qui est parfait pour la majorité des besoins. Si je souhaite utiliser un autre VCS (comme Mercurial ou Bazaar), je peux modifier la ligne suivante :

Terminal window
VCS="git"

Je peux remplacer "git" par "hg", "bzr" ou "darcs" selon mes préférences et outils installés.

Initialiser le dépôt

Si ce n’est pas déjà fait automatiquement, je peux initialiser manuellement le dépôt Git dans /etc :

Terminal window
sudo etckeeper init
sudo etckeeper commit "Initial commit of /etc"

Cela crée un premier snapshot de l’état actuel de tous les fichiers de configuration.

Paramétrer les options additionnelles

Dans le fichier de configuration, je peux également :

  • Activer les commits automatiques après les mises à jour de paquets.
  • Décider si je souhaite inclure ou exclure certains types de fichiers.
  • Configurer l’usage de sudo pour toutes les commandes liées à etckeeper.

En prenant quelques minutes pour ajuster ces réglages, je m’assure que la sauvegarde des fichiers /etc est fiable, cohérente et adaptée à mon environnement système.

Intégration avec les gestionnaires de paquets

L’un des grands avantages d’etckeeper est son intégration automatique avec les gestionnaires de paquets. À chaque installation, mise à jour ou suppression de paquet, un commit Git est généré pour enregistrer les modifications dans /etc.

Comment ça fonctionne

etckeeper utilise des scripts de hooks qui sont déclenchés automatiquement par les gestionnaires de paquets :

  • *APT* sur Debian, Ubuntu
  • DNF/YUM sur Fedora, CentOS
  • Pacman sur Arch Linux

À chaque opération sur les paquets, un commit automatique est réalisé si des changements sont détectés.

Exemple pratique

Quand j’installe un nouveau paquet avec apt :

Terminal window
sudo apt install nginx

etckeeper va, en coulisses :

  1. Effectuer un commit avant l’installation pour enregistrer l’état actuel.
  2. Installer le paquet.
  3. Effectuer un commit après l’installation pour capturer toute modification apportée à /etc.

Je peux voir les changements avec une simple commande Git :

Terminal window
cd /etc
sudo git log
commit acd94001bbdb8ed8c0e3196e8c760566d8b546e9 (HEAD -> master)
Author: Stéphane ROBERT <toto@toto.com>
Date: Sat Apr 26 12:33:37 2025 +0000
committing changes in /etc made by "apt install nginx"
Packages with configuration changes:
+nginx-common 1.24.0-2ubuntu7.3 all
Package changes:
+nginx 1.24.0-2ubuntu7.3 amd64
+nginx-common 1.24.0-2ubuntu7.3 all

Activation ou désactivation des commits automatiques

Dans le fichier /etc/etckeeper/etckeeper.conf, je peux ajuster cette option :

Terminal window
COMMIT_AFTER_INSTALL="yes"

Si je préfère gérer manuellement les commits, je peux changer ce paramètre en "no".

Grâce à cette automatisation des commits de configuration, je garde un historique précis sans devoir y penser à chaque manipulation de mon système.

Automatisation des commits avec cron et systemd

Même si etckeeper réalise des commits lors des opérations de gestion de paquets, je trouve important d’ajouter une automatisation périodique pour capturer aussi les changements manuels sur /etc.

Sur les systèmes modernes, je préfère utiliser systemd pour plus de flexibilité.

J’active juste le timer etckeeper-autocommit qui va exécuter un commit automatique tous les jours.

Terminal window
sudo systemctl enable --now etckeeper.timer

Gestion des métadonnées et des permissions

Quand je versionne /etc avec etckeeper, je dois aussi penser à préserver les métadonnées des fichiers, comme les permissions, les propriétaires et les groupes. Ces informations sont essentielles pour garantir le bon fonctionnement du système après une restauration.

Métadonnées prises en charge

etckeeper s’occupe automatiquement de préserver les métadonnées essentielles, telles que :

  • Les permissions (chmod)
  • Les propriétaires (chown)
  • Les groupes (chgrp)
  • Les dates de modification (dans certaines configurations)

Pour cela, il génère des fichiers spéciaux contenant les métadonnées à chaque commit.

Ces fichiers sont stockés dans le dépôt Git sous forme de fichiers supplémentaires, comme :

Terminal window
.etckeeper
.etckeeper-meta

Activation de la gestion avancée

Dans le fichier de configuration /etc/etckeeper/etckeeper.conf, je peux vérifier cette option :

Terminal window
PRESERVE_METADATA="yes"

Elle est activée par défaut sur la plupart des distributions. Si elle est désactivée, je risque de perdre des réglages critiques après une restauration.

Bonnes pratiques pour les métadonnées

  • Toujours commiter après une modification importante dans /etc pour éviter d’oublier les changements de permissions.
  • Vérifier les fichiers de métadonnées en cas de migration ou de restauration d’un système sur une nouvelle machine.
  • Restaurer avec précaution : si je fais un git checkout sur un fichier sensible, je dois m’assurer que ses permissions sont correctement rétablies.

Grâce à cette gestion des permissions et des propriétaires, l’usage d’etckeeper devient fiable même pour des environnements sensibles où la moindre erreur de droit d’accès pourrait compromettre la sécurité du système.

Sauvegarde et restauration des configurations

L’un des principaux atouts d’etckeeper est de faciliter la sauvegarde et la restauration de la configuration système sans efforts complexes.

Sauvegarder le répertoire /etc

Pour une sauvegarde complète, je m’assure de copier non seulement les fichiers de /etc, mais aussi l’historique Git associé. Je peux utiliser une commande simple comme :

Terminal window
sudo tar czf etc-backup.tar.gz /etc

Cela inclut tout le contenu de /etc, y compris le dossier caché .git qui contient l’historique des changements.

Je peux ensuite stocker cette archive sur un serveur de sauvegarde externe ou dans une solution de stockage cloud.

Restaurer la configuration avec etckeeper

En cas de problème, je peux restaurer l’archive sauvegardée :

Terminal window
sudo tar xzf etc-backup.tar.gz -C /

Puis je peux revenir à un état antérieur avec Git :

Terminal window
cd /etc
sudo git log --oneline
sudo git checkout <id_commit>

Cela me permet de restaurer rapidement un fichier spécifique ou l’ensemble du répertoire /etc à une date donnée.

Exemple : restaurer un fichier spécifique

Si, par exemple, j’ai cassé ma configuration nginx, je peux restaurer uniquement ce fichier :

Terminal window
cd /etc
sudo git checkout HEAD^ -- nginx/nginx.conf

Je récupère ainsi la dernière version fonctionnelle sans affecter le reste du système.

Grâce à la sauvegarde des fichiers /etc avec etckeeper, je bénéficie d’une solution fiable pour sécuriser mes configurations critiques et réduire le temps de récupération en cas d’incident.

Restaurer des fichiers ou la totalité de /etc avec etckeeper

Avec etckeeper, restaurer une ancienne version de /etc est simple grâce à Git.

Voir l’historique des changements

Listez les commits passés :

Terminal window
cd /etc
sudo git log --oneline

Exemple :

e2d9c24 Ajout de la config SSL nginx
a7d0f91 Commit après update des paquets
1f3c6b2 Commit initial

Restaurer tout /etc à un état précédent

Si vous voulez restaurer tout le répertoire /etc à une version antérieure :

Terminal window
sudo git checkout <ID_du_commit>

Par exemple :

Terminal window
sudo git checkout a7d0f91

Attention : cela remplace l’ensemble du contenu de /etc avec l’état du commit. Pensez à faire une sauvegarde avant en cas de doute !

Restaurer un fichier spécifique

Si seule une partie doit être restaurée (ex: nginx.conf cassé) :

Terminal window
sudo git checkout <ID_du_commit> -- chemin/vers/le/fichier

Exemple :

Terminal window
sudo git checkout HEAD^ -- nginx/nginx.conf

Cela récupère uniquement l’ancien fichier sans toucher au reste.

Annuler des changements non commités

Si vous avez fait des modifications locales non désirées :

Terminal window
sudo git checkout -- etc/[<dossier>/]<fichier>

Cela annule les modifications non encore commités.

Bonnes pratiques pour l’utilisation d’etckeeper

Pour tirer le meilleur parti d’etckeeper et assurer une gestion efficace de la configuration système, je suis plusieurs bonnes pratiques simples mais essentielles.

Toujours documenter les commits

Même si etckeeper peut créer des messages de commit automatiques, je préfère écrire des messages clairs et précis lorsque je fais des modifications manuelles :

Terminal window
sudo etckeeper commit "Ajout de la configuration SSL pour nginx"

Cela rend l’historique beaucoup plus lisible pour moi et pour mes collègues.

Ne pas versionner certains fichiers sensibles

Certains fichiers dans /etc peuvent contenir des informations confidentielles ou dynamiques, comme :

  • Les clés privées
  • Les mots de passe
  • Les jetons d’API

Je peux les exclure en les ajoutant dans .etckeeper-ignore :

Terminal window
/etc/etckeeper-ignore

Exemple :

Terminal window
/etc/ssh/ssh_host_*
/etc/ssl/private/*

Cela renforce la sécurité de mon dépôt tout en allégeant l’historique.

Sauvegarder également le dépôt Git

Avoir Git sous /etc ne dispense pas de faire des sauvegardes régulières du répertoire /etc/.git en plus de /etc. En cas de corruption ou de panne disque, je pourrais ainsi restaurer non seulement les fichiers, mais aussi leur historique.

Utiliser les branches pour les tests

Quand je dois tester une nouvelle configuration sensible (comme une migration de serveur ou une nouvelle version de service), je peux créer une branche dédiée :

Terminal window
cd /etc
sudo git checkout -b test-migration

Après validation, je fusionne ou abandonne les changements sans toucher directement à ma configuration principale.

Vérifier régulièrement l’état du dépôt

Un rapide contrôle avec Git permet d’assurer que tout est sous contrôle :

Terminal window
cd /etc
sudo git status

Cela me permet de détecter tout changement non commité ou conflit potentiel avant qu’il ne devienne un problème.

Protéger l’accès au dépôt Git

Le dépôt .git dans /etc contient potentiellement des informations sensibles. Il est donc essentiel de restreindre son accès :

Terminal window
sudo chmod -R go-rwx /etc/.git

Ainsi, seuls les administrateurs du système peuvent consulter ou modifier l’historique.

Ne jamais pousser /etc sur un dépôt public

Même si Git encourage à pousser les dépôts vers des serveurs distants, je dois éviter de rendre /etc accessible sur Internet. En cas de besoin, j’utilise un serveur privé ou une solution chiffrée.

Exemple de dépôt privé :

Terminal window
git remote add backup ssh://monserveurprivé:/backups/etc.git
git push backup master

Vérifier les informations sensibles dans les commits

Avant chaque commit, je passe en revue les modifications pour m’assurer qu’aucune donnée confidentielle n’est enregistrée :

Terminal window
sudo git diff

Cela m’évite de compromettre des clés SSH, des mots de passe ou d’autres fichiers critiques.

Utiliser des clés SSH sécurisées pour les sauvegardes

Si je synchronise mes sauvegardes via Git, j’utilise des clés SSH spécifiques avec des permissions restreintes pour renforcer la sécurité du processus.

Mettre en place des alertes sur les changements critiques

Je peux configurer un outil de surveillance comme auditd pour être averti en cas de modification non autorisée dans /etc, en complément d’etckeeper.

En prenant ces précautions de sécurité avec etckeeper, je m’assure que la sauvegarde des fichiers de configuration reste un atout et non une faille dans l’infrastructure système.

Conclusion et ressources supplémentaires

En utilisant etckeeper, je transforme la gestion de /etc en une tâche simple, fiable et contrôlée. Versionner mes fichiers de configuration avec Git me permet de documenter chaque modification, de restaurer rapidement un état stable, et de renforcer la sécurité de mon système Linux.

Je retiens que pour tirer le meilleur parti d’etckeeper, je dois :

  • Configurer correctement l’outil dès l’installation.
  • Activer les commits automatiques et programmer des sauvegardes régulières.
  • Être vigilant sur la protection des données sensibles.
  • Adopter des bonnes pratiques de gestion de dépôt.

Plus d’infos