Versionner /etc avec Git grâce à Etckeeper
Mise à jour :
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
sudo apt updatesudo 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
sudo dnf install etckeeper
ou, sur les anciennes versions utilisant yum :
sudo yum install etckeeper
Sur Arch Linux et Manjaro
sudo pacman -S etckeeper
Vérification de l’installation
Une fois installé, je peux vérifier la version d’etckeeper avec :
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 :
/etc/etckeeper/etckeeper.conf
Je commence par ouvrir ce fichier avec mon éditeur préféré :
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 :
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 :
sudo etckeeper initsudo 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 :
sudo apt install nginx
etckeeper va, en coulisses :
- Effectuer un commit avant l’installation pour enregistrer l’état actuel.
- Installer le paquet.
- Effectuer un commit après l’installation pour capturer toute modification apportée à /etc.
Je peux voir les changements avec une simple commande Git :
cd /etcsudo 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 :
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.
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 :
.etckeeper.etckeeper-meta
Activation de la gestion avancée
Dans le fichier de configuration /etc/etckeeper/etckeeper.conf
, je peux
vérifier cette option :
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 :
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 :
sudo tar xzf etc-backup.tar.gz -C /
Puis je peux revenir à un état antérieur avec Git :
cd /etcsudo git log --onelinesudo 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 :
cd /etcsudo 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 :
cd /etcsudo git log --oneline
Exemple :
e2d9c24 Ajout de la config SSL nginxa7d0f91 Commit après update des paquets1f3c6b2 Commit initial
Restaurer tout /etc à un état précédent
Si vous voulez restaurer tout le répertoire /etc à une version antérieure :
sudo git checkout <ID_du_commit>
Par exemple :
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é) :
sudo git checkout <ID_du_commit> -- chemin/vers/le/fichier
Exemple :
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 :
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 :
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
:
/etc/etckeeper-ignore
Exemple :
/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 :
cd /etcsudo 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 :
cd /etcsudo 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 :
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é :
git remote add backup ssh://monserveurprivé:/backups/etc.gitgit 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 :
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
- La documentation officielle etckeeper ↗
- Le guide sur la administration de systèmes Linux