Verfolgen, Speichern und Zurücksetzen von Dateisystemänderungen, die von einem Programm unter Linux vorgenommen wurden


9

Ich möchte in der Lage sein, wenn ein Programm wie ein Installationsprogramm ausgeführt wird, die Liste der an meinem Dateisystem vorgenommenen Änderungen zu verfolgen, damit ich sie anschließend zurücksetzen kann.

BEARBEITEN: Dies betrifft ein nicht gepacktes Programm. Ich benutze apt-get so weit ich kann.

Idealerweise möchte ich in der Lage sein, etwas zu tun wie:

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

Und dann:

(sudo) revert-modifs fsmodifs.patch

Gibt es eine bequeme Möglichkeit, dies zu tun?

Antworten:


1

Möglicherweise ist der einfachste (?) Weg, dies zu tun, das Starten von einem LiveUSB mit einer "persistenten Datenpartition". (Oder, um den Effekt selbst zu replizieren, in einem Chroot-Gefängnis: Mounten Sie eine RW-Ebene über einer Ro-Ebene.) Machen Sie eine Momentaufnahme des RW-Dateisystems - das nach einem Neustart sehr schlank sein sollte - und führen Sie dann Ihr Installationsprogramm aus. Jede Datei, die geändert oder erstellt wird, befindet sich auf der rw-Überlagerungspartition "Persistente Daten". Sogar entfernte Dateien werden als "magische Punktedateien" angezeigt.


Das sieht kompliziert aus ... Ist es nicht möglich, einfach eine neue Partition zu erstellen, die alte RO zu mounten und die neue in RW darüber zu mounten?
Ywen

Ja, das können Sie auch, vielleicht im Einzelbenutzermodus. Schauen Sie sich das an unionfs- im Grunde akzeptiert das RW-Dateisystem alle Schreibvorgänge, aber das RO-Dateisystem ist immer noch darunter sichtbar. Wenn eine Datei geändert wird, wird sie in die RW fs "migriert". Wenn es gelöscht wird, gibt es tatsächlich eine "magische Punktdatei" auf dem RW fs, um es zu "maskieren". Das Einrichten unionfskann etwas heikel sein, deshalb habe ich LiveUSB vorgeschlagen (es erledigt diesen Teil für Sie und Sie haben ein "sauberes" System-Image, von dem aus Sie beginnen können)
BRPocock

2

Vielleicht einen Blick auf Tripwire werfen? Tripwire ist passiver als Ihr aktives Beispiel, kann aber dennoch für Sie funktionieren.

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

Tripwire ist ein Intrusion Detection System (IDS), das Ihre kritischen Systemdateien und Berichte ständig und automatisch unter Kontrolle hält, wenn sie von einem Cracker (oder aus Versehen) zerstört oder geändert wurden. Dadurch kann der Systemadministrator sofort erkennen, was kompromittiert wurde, und das Problem beheben.


1

Du meinst "CheckInstall"? Funktioniert es, wenn ich keine Makefiles habe? In meinem Fall (Eclim) wurde die Installation über ein JAR-Installationsprogramm durchgeführt.

Nein, ich meine Installwatch, die Teil von CheckInstall ist.
Qerub

"Installwatch funktioniert mit jedem dynamisch verknüpften ELF-Programm und überschreibt Systemaufrufe, die Änderungen am Dateisystem verursachen. Einige dieser Systemaufrufe sind offen (2) und nicht verknüpft (2)." Sollte mit einer JVM gut funktionieren.
Qerub

Ja, aber anscheinend wurde Installwatch allein schon lange nicht mehr gewartet. Außerdem benötigen Sie CheckInstall, um InstallWatch-Protokolle zurücksetzen zu können. Ich sollte noch einen Blick darauf werfen. Vielen Dank.

1

Verwenden Sie LD_PRELOADdiese Option , um eine Bibliothek zu laden, die die openBibliotheksfunktion abfängt und den Pfadnamen ändert / die Ausgabe protokolliert / eine Sicherungskopie erstellt, bevor Sie die Datei öffnen.

Schauen Sie sich den Quellcode für an strace.


Ja, aber wie gesagt, was ist, wenn das Programm statisch verknüpft ist?
Ywen

0

Wenn das Installationsprogramm eine Verpackungsfunktion verwendet (dh für .debPakete für Debian / Ubuntu / ..., .rpmPakete für RedHat / CentOS / ... usw.), sollte das Paketinstallationsprogramm wissen, was bei der Installation und beim Entfernen zu tun ist. Und ich glaube, Sie sollten vorhandene Verpackungssysteme verwenden und keine eigenen erfinden. (Linux hat normalerweise keine Installationsprogramme wie Windows).

Wenn Sie den durch einen Prozess vorgenommenen Dateiänderungen wirklich folgen möchten, können Sie Systemaufrufe verwenden straceoder ltraceabfangen. Sie können auch inotifizierte und verwandte Einrichtungen.

Aber ich weiß nicht von einem catch-modifs& revert-modifswie du willst.

Ich empfehle, kein Installationsprogramm für Ihre Anwendung zu erstellen, sondern den Paketmanager zu verwenden, um .deb(und / oder .rpm) Pakete für Ihre Anwendung bereitzustellen . Sie werden die Abhängigkeitsprobleme besser behandeln als Ihr eigenes Installationsprogramm.


Ja, ich benutze apt-get die ganze Zeit. Ich habe nicht über meine eigenen Anwendungen gesprochen, sondern über unverpackte. Ich habe nicht immer eine .deb zur Hand.

Die von Ihnen erwähnten entpackten Anwendungen sollten dokumentieren, welche Dateien sie verwenden und wie sie installiert werden sollen.

^^ Was ist, wenn sie es nicht tun? Ich wusste, dass ich sie selbst verpacken könnte, aber es ist nicht einfach . Außerdem können solche Befehle nützlich sein, um einige von Ihnen erstellte Systemskripte sicherer zu testen.

Ich stimme zu, dass Ihr Wunsch interessant ist, aber ich bin nicht sicher, ob er leicht umsetzbar ist ...

0

Der einfache Weg, um das zu erreichen, was Sie wollen: Installieren Sie die "nicht vertrauenswürdige" Anwendung in einer brandneuen Instanz einer virtuellen Maschine (VMWare-Workstation, Oracle VirtualBox usw.).

Wenn Sie entscheiden, dass Sie die Anwendung nicht mehr möchten, löschen Sie die virtuelle Maschine.

Ihre anderen Alternativen - das Abrufen von Dateizugriffs-Systemaufrufen - sind wahrscheinlich fehleranfällig und unvollständig. Seien Sie besonders vorsichtig bei Lösungen, die eine dynamische Verknüpfung erfordern, um zu funktionieren (wie es Installwatch zu tun scheint). Ein Installationsprogramm kann zu Recht direkte Systemaufrufe ausführen oder statisch verknüpft sein.


Wow, die virtuelle Maschine ist definitiv übertrieben ... Ich muss nur einige Konfigurationsdateien auf bequeme Weise speichern und sichern.
Ywen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.