Comment suivre les changements dans / etc /

30

Je voudrais garder une trace des changements dans / etc /

Fondamentalement, j'aimerais savoir si un fichier a été modifié, par yum updateou par un utilisateur et le restaurer si je n'aime pas le chage. J'ai pensé à utiliser un VCS comme git, LVM ou des instantanés btrfs ou un programme de sauvegarde pour cela.

Que recommanderais-tu?

taffer
la source

Réponses:

32

Il semble que vous souhaitiez etckeeper de Joey Hess de Debian, qui gère les fichiers sous /etccontrôle de version. Il prend en charge git, mercurial, darcs et bazaar.

git est le VCS le mieux supporté par etckeeper et les utilisateurs du VCS sont les plus susceptibles de le savoir. Il est possible que votre distribution ait choisi de modifier etckeeper afin que son VCS par défaut ne soit pas git. Vous ne devriez utiliser etckeeper avec un VCS autre que git que si vous êtes amoureux des autres VCS.

Faheem Mitha
la source
Etckeeper est facilement l'un des outils d'administration les plus précieux que j'ai installés sur mes machines, et est l'un des tout premiers packages que j'installe après avoir installé un nouveau système.
hlovdal
6

Je ne peux pas vous donner de recommandation finale, mais je peux partager quelques réflexions sur le sujet. Étant donné que / etc est généralement assez petit, vous pouvez simplement opter pour une solution tar-ball compressée simple. Si vous avez à peine besoin de parcourir l'historique, cela pourrait être la solution la plus simple à configurer.

Pour moi, il serait fastidieux de gérer des volumes logiques juste pour garder une trace de / etc et d'autant plus que je ne pense pas que les instantanés LVM ont été conçus pour être créés régulièrement comme moyen de sauvegarde d'une quantité relativement faible de données.

btrfs me semble bien mieux équipé pour cela, mais il n'est toujours pas aussi stable que, par exemple, ext {2,3,4} et l'outil fsck n'est pas encore terminé. Mais ça s'améliore continuellement.

Personnellement, j'utilise git pour suivre / etc, mais vous devez garder à l'esprit que git ne stocke pas les métainformations des fichiers comme la propriété ou l'autorisation! Et vérifiez également que le répertoire .git dispose des droits appropriés. Il existe cependant quelques outils pour résoudre ces problèmes. Vous voudrez peut-être jeter un œil à etc-keeper , qui a été développé exactement pour garder une trace de / etc ou utiliser au moins quelque chose comme gitperms ou metastore pour suivre la métainformation.

antje-m
la source
3

Pour garder une trace des changements "indésirables", nous utilisons un HIDS - dans notre cas, d' samhainautres sont tripwireou aide. Tous ces systèmes vous avertiront lorsqu'un événement indésirable s'est produit.

Un yum updatene devrait rien changer sans laisser un .rpmnew ou .rpmold, si le fichier de configuration est marqué comme tel dans le rpm correspondant.

Moi, j'ai trouvé une bonne pratique de faire une copie de sécurité du fichier que je vais modifier cp -p origfile origfileYYYY-MM-DDavec la date de la veille.

Si tout le reste échoue - j'appelle les sauvegardes et je demande une restauration à partir de la dernière "bonne" sauvegarde connue.

Nils
la source
1

Je pense que vous pouvez faire un instantané des fichiers / répertoires /etc.

Faites d'abord une liste de fichiers / etc / répertoire:

# ls -lha /etc >> /snapshotofetc

Et si vous créez un fichier dans le /etc

# touch testfile

et si vous reprenez un instantané de /etcce que nous avons fait avant

# ls -lhs /etc /lastsnapshotofetc

et ensuite vous pouvez comparer les différences entre les 2 fichiers comme ceci:

# diff /snapshotofetc /lastsnapshotofetc
Je suis venu à
la source
1

Il y a toujours radmind . Vous pouvez annuler ce changement si vous ne l'aimez pas.

chiggsy
la source
0

Recherchez-vous la gestion de la configuration ou le suivi / surveillance des modifications du système de fichiers?

Si c'est plus tôt, je regarderais puppetou chef. CFEngineexiste à des fins commerciales. puppetest une bête populaire de nos jours.

Si c'est le dernier, il est difficile de surveiller les modifications du système de fichiers, mais il existe des exemples de programmes comme l' inotifyaudit du système de fichiers auditctlou SGI, fammais encore une fois, c'est une chose de surveillance et peut être coûteux à implémenter (les performances du système de fichiers peuvent être détériorées).

Nikhil Mulley
la source
etckeeper peut être un adepte silencieux pour seulement des choses spécifiques à / etc.
Nikhil Mulley
Désolé d'être si imprécis. J'ai amélioré la question.
taffer
0

Vous pouvez vérifier rsnapshotqui conserve des instantanés toutes les heures de tous les répertoires que vous voulez ... vous pouvez le configurer pour faire 24 heures, puis X quotidiens, puis X hebdomadaires, etc. Autant que vous le souhaitez pour l'espace disque. Il est assez intelligent pour créer un lien dur lorsque les fichiers n'ont pas changé (il utilise en rsyncarrière-plan.

Aaron D. Marasco
la source
0

Vous pourriez envisager d'utiliser git. Vous pouvez Il est efficace pour suivre les changements et très facile à utiliser pour quelque chose comme ça.

git status # Show changed files
git diff # Show file differences (paged automatically)
git commit -a # Commit all changes. 

Je crois que la configuration initiale va comme ceci. Je ne l'ai pas fait depuis un moment.

cd /etc
git init
git add *
git commit -a -m "Created repository"

Cette approche fonctionne mieux pour un seul serveur, mais peut être superposée avec d'autres outils qui modifient le référentiel. Cela peut être utile sur vos sites canaris pour vous assurer que les changements attendus se produisent.

Vous pourrez peut-être utiliser le clonage pour gérer les fichiers communs à plusieurs serveurs.

BillThor
la source
0

J'ai un script qui s'exécute tous les jours et sauvegarde les fichiers qui ont changé depuis la sauvegarde précédente:

#!bin/bash
ext=$(date +"%Y%m%d")_ChangeS
mkdir -p "$1/$ext" && \
  ionice -c3 rsync -ah --numeric-ids --inplace --backup \
                   --backup-dir="$1/$ext" \
                   --include="/etc" / "$1" && \
  rmdir --ignore-fail-on-non-empty "$1/$ext"

Vous passez dans le chemin où les sauvegardes seraient créées et ce répertoire aura une liste similaire à celle-ci (après quelques exécutions):

20120106_ChangeS  etc
$ls 20120106_ChangeS/etc/
cron.d

Vous pouvez le modifier un peu pour enregistrer les modifications plus souvent ou utiliser inotify pour déclencher une version modifiée du script lorsque des modifications se produisent /etc.

trk7
la source