Suivez, enregistrez et annulez les modifications du système de fichiers effectuées par un programme sous Linux


9

J'aimerais pouvoir, lorsqu'un programme tel qu'un programme d'installation est exécuté, suivre la liste des modifications apportées à mon système de fichiers afin de pouvoir les annuler par la suite.

EDIT: Cela concerne un programme non packagé . J'utilise apt-get autant que possible.

Idéalement, j'aimerais pouvoir faire quelque chose comme:

(sudo) catch-modifs some-installer.bin > fsmodifs.patch

Et alors:

(sudo) revert-modifs fsmodifs.patch

Existe-t-il un moyen pratique de le faire?

Réponses:


1

La façon la plus simple (?) De procéder consiste peut-être à démarrer à partir d'un LiveUSB avec une "partition de données persistante". (Ou, pour reproduire l'effet vous-même, dans une prison chroot: montez une couche rw sur une couche ro.) Prenez un instantané du système de fichiers rw - qui devrait être très mince après un nouveau démarrage - puis exécutez votre programme d'installation. Chaque fichier qu'il modifie ou crée sera sur la partition de superposition rw "données persistantes". Même les fichiers supprimés apparaîtront comme des "fichiers dot magiques".


Cela semble compliqué ... N'est-il pas possible simplement de créer une nouvelle partition, de monter l'ancienne RO et de monter par-dessus la nouvelle en RW?
Ywen

Oui, vous pouvez le faire également, à partir du mode mono-utilisateur, peut-être. Jetez un oeil à unionfs- en gros, le système de fichiers RW accepte toutes les écritures, mais le système de fichiers RO est toujours visible en dessous. Si un fichier est modifié, il «migre» vers les RW fs; s'il est supprimé, il y a en fait un "fichier dot magique" sur les RW fs pour le "masquer". La configuration unionfspeut être un peu délicate, c'est pourquoi j'avais suggéré le LiveUSB (il fait cette partie pour vous, et vous avez une image système «propre» pour commencer)
BRPocock

2

Peut-être jetez un œil à tripwire? Tripwire est plus passif que votre exemple actif, mais il peut toujours fonctionner pour vous.

http://www.linuxjournal.com/article/8758

Tripwire est un système de détection d'intrusion (IDS) qui, constamment et automatiquement, garde vos fichiers système critiques et vos rapports sous contrôle s'ils ont été détruits ou modifiés par un pirate (ou par erreur). Il permet à l'administrateur système de savoir immédiatement ce qui a été compromis et de le corriger.


1

Vous voulez dire "CheckInstall"? Ça marche quand je n'ai pas de makefile? Dans mon cas (Eclim), l'installation a été effectuée via un installateur de jar.

Non, je veux dire Installwatch qui fait partie de CheckInstall.
qerub

"Installwatch fonctionne avec tous les programmes ELF liés dynamiquement, remplaçant les appels système qui provoquent des modifications du système de fichiers. Certains de ces appels système sont ouverts (2) et dissociés (2)." Devrait fonctionner correctement avec une JVM.
qerub

Oui, mais apparemment Installwatch seul n'a plus été maintenu depuis longtemps. De plus, vous avez besoin de CheckInstall pour pouvoir rétablir les journaux InstallWatch. Je devrais quand même y jeter un œil. Merci.

1

Permet LD_PRELOADde charger une bibliothèque qui intercepte la openfonction de bibliothèque et modifie le chemin d'accès / enregistre la sortie / effectue une sauvegarde avant d'ouvrir le fichier.

Jetez un œil au code source de strace.


Oui, mais comme quelqu'un l'a dit, que se passe-t-il si le programme est lié statiquement?
Ywen

0

Si le programme d'installation utilise une fonction de conditionnement (par exemple pour les .debpackages pour Debian / Ubuntu / ..., les .rpmpackages pour RedHat / CentOS / ... etc), le programme d'installation du package doit savoir quoi faire lors de l'installation et de la suppression. Et je crois que vous devez utiliser les systèmes d'emballage existants , pas inventer le vôtre. (Linux n'a généralement pas d'installateurs comme Windows).

Si vous voulez vraiment suivre les modifications de fichiers apportées par un processus, vous pouvez utiliser strace, ou ltraceintercepter les appels système. Vous pouvez également inotifier et les installations associées.

Mais je ne connais pas un catch-modifs& revert-modifscomme vous voulez.

Je suggère de ne pas faire de programme d'installation pour votre application, mais d'utiliser le gestionnaire de packages, donc de fournir .deb(et / ou .rpm) des packages pour votre application. Ils géreront les problèmes de dépendance mieux que votre propre programme d'installation.


Oui, j'utilise apt-get tout le temps. Je ne parlais pas de mes propres applications, mais de celles non emballées. Je n'ai pas toujours un .deb à portée de main.

Les applications non packagées que vous mentionnez doivent documenter les fichiers qu'elles utilisent et comment elles doivent être installées.

^^ Et s'ils ne le font pas? Je savais que je pouvais les emballer moi-même, mais ce n'est pas simple . De plus, ces commandes pourraient être utiles pour tester de manière plus sûre certains scripts système que vous créez.

Je suis d'accord que votre souhait est intéressant, mais je ne suis pas sûr qu'il soit facilement réalisable ....

0

Le moyen le plus simple de réaliser ce que vous voulez: installez l'application "non fiable" dans une toute nouvelle instance de machine virtuelle (poste de travail VMWare, Oracle VirtualBox, etc.).

Lorsque vous décidez de ne plus vouloir l'application, supprimez la machine virtuelle.

Vos autres alternatives - intercepter les appels système d'accès aux fichiers - seront probablement sujettes aux erreurs et incomplètes. Méfiez-vous particulièrement de toute solution qui nécessite une liaison dynamique pour fonctionner (comme semble le faire Installwatch). Un installateur peut tout à fait légitimement exercer des appels système directs ou être lié statiquement.


Wow, la machine virtuelle est définitivement exagérée ... J'ai juste besoin de sauvegarder et de sauvegarder certains fichiers de configuration de manière pratique.
Ywen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.