Śledzenie, zapisywanie i przywracanie modyfikacji systemu plików dokonanych przez program pod Linuksem

9

Chciałbym móc, gdy program taki jak instalator jest uruchomiony, śledzić listę zmian wprowadzonych w moim systemie plików, aby móc je później przywrócić.

EDYCJA: Dotyczy to nieopakowanego programu. Używam apt-get tak daleko, jak to możliwe.

Idealnie chciałbym móc zrobić coś takiego:

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

I wtedy:

(sudo) revert-modifs fsmodifs.patch

Czy jest na to wygodny sposób?

Ywen
źródło

Odpowiedzi:

1

Być może najłatwiejszym (?) Sposobem na to jest uruchomienie LiveUSB za pomocą „trwałej partycji danych”. (Lub, aby samemu odtworzyć efekt, w więzieniu chroot: zamontuj warstwę rw nad warstwą ro.) Zrób migawkę systemu plików rw - który powinien być bardzo cienki po nowym uruchomieniu - a następnie uruchom instalator. Każdy plik, który zmienia lub tworzy, będzie znajdował się na partycji nakładki „trwałe dane”. Nawet usunięte pliki pojawią się jako „magiczne pliki kropkowe”.

BRPocock
źródło
To wygląda na skomplikowane ... Czy nie można po prostu utworzyć nowej partycji, zamontować starą RO i zamontować nad nią nową w RW?
Ywen
Tak, możesz to również zrobić, być może w trybie pojedynczego użytkownika. Spójrz na unionfs- w zasadzie system plików RW akceptuje wszystkie zapisy, ale system plików RO jest nadal widoczny pod nim. Jeśli plik się zmieni, „migruje” do pliku RW fs; jeśli zostanie usunięty, faktycznie jest „magiczny plik kropkowy” na RW fs, aby go „zamaskować”. Konfiguracja unionfsmoże być trochę drażliwa, dlatego zasugerowałem LiveUSB (robi to za Ciebie, a ty masz „czysty” obraz systemu na początek)
BRPocock
2

Może rzucisz okiem na tripwire? Tripwire jest bardziej pasywny niż twój aktywny przykład, ale wciąż może działać dla ciebie.

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

Tripwire to system wykrywania włamań (IDS), który stale i automatycznie utrzymuje kontrolę nad krytycznymi plikami systemowymi i raportami, jeśli zostały zniszczone lub zmodyfikowane przez crackera (lub przez pomyłkę). Pozwala administratorowi systemu natychmiast dowiedzieć się, co zostało naruszone i naprawić.

Corith Malin
źródło
1

Spójrz na Installwatch:

http://en.wikipedia.org/wiki/Installwatch#Functionality

http://asic-linux.com.mx/~izto/checkinstall/installwatch.html

qerub
źródło
Masz na myśli „CheckInstall”? Czy to działa, gdy nie mam plików makefile? W moim przypadku (Eclim) instalacja została wykonana za pomocą instalatora jar.
Nie, mam na myśli Installwatch, który jest częścią CheckInstall.
qerub
„Installwatch działa z każdym dynamicznie połączonym programem ELF, zastępując wywołania systemowe, które powodują zmiany w systemie plików. Niektóre z takich wywołań systemowych są otwarte (2) i rozłączają (2).” Powinien działać dobrze z JVM.
qerub
Tak, ale najwyraźniej sam Installwatch nie był już utrzymywany przez długi czas. Ponadto potrzebujesz CheckInstall, aby móc przywrócić dzienniki InstallWatch. Powinienem jeszcze rzucić okiem. Dzięki.
1

Służy LD_PRELOADdo ładowania biblioteki, która przechwytuje funkcję openbiblioteki i zmienia nazwę ścieżki / rejestruje dane wyjściowe / tworzy kopię zapasową przed otwarciem pliku.

Spójrz na kod źródłowy strace.

Ben Voigt
źródło
Tak, ale jak ktoś powiedział, co, jeśli program jest statycznie powiązany?
Ywen
0

Jeśli instalator korzysta z jakiegoś narzędzia do pakowania (np. Dla .debpakietów Debian / Ubuntu / ..., .rpmpakietów dla RedHat / CentOS / ... itd.), Wówczas instalator pakietów powinien wiedzieć, co zrobić podczas instalacji i usuwania. Uważam, że powinieneś korzystać z istniejących systemów pakowania , a nie wymyślać własny. (Linux zwykle nie ma instalatorów takich jak Windows).

Jeśli naprawdę chcesz śledzić zmiany plików dokonane przez jakiś proces, możesz użyć stracelub ltraceprzechwycić wywołania systemowe. Możesz także powiadomić i powiązane usługi.

Ale nie wiem o tematyce catch-modifsi revert-modifsjak chcesz.

Sugeruję, aby nie tworzyć instalatora dla twojej aplikacji, ale aby użyć menedżera pakietów, a zatem zapewnić .deb(i / lub .rpm) pakiety dla twojej aplikacji. Poradzą sobie z problemami zależności lepiej niż twój własny instalator.

Basile Starynkevitch
źródło
Tak, cały czas używam apt-get. Nie mówiłem o własnych aplikacjach, ale o nieopakowanych. Nie zawsze mam pod ręką plik .deb.
Wspomniane nieopakowane aplikacje powinny dokumentować, jakich plików używają i jak powinny zostać zainstalowane.
^^ Co jeśli nie? Wiedziałem, że sam mogę je spakować, ale to nie jest proste . Ponadto takie polecenia mogą być przydatne do bezpieczniejszego testowania niektórych twoich skryptów systemowych.
Zgadzam się, że twoje życzenie jest interesujące, ale nie jestem pewien, czy można je łatwo zrealizować ....
0

Prosty sposób na osiągnięcie tego, co chcesz: zainstaluj „niezaufaną” aplikację w zupełnie nowej instancji maszyny wirtualnej (stacja robocza VMWare, Oracle VirtualBox itp.).

Jeśli zdecydujesz, że nie chcesz już aplikacji, usuń maszynę wirtualną.

Inne alternatywy - przechwytywanie wywołań dostępu do plików - prawdopodobnie będą podatne na błędy i niekompletne. Zachowaj szczególną ostrożność w przypadku każdego rozwiązania wymagającego dynamicznego łączenia w celu działania (jak wydaje się to robić w przypadku Installwatch). Instalator może całkiem legalnie wykonywać bezpośrednie wywołania systemowe lub być statycznie powiązany.


źródło
Wow, maszyna wirtualna zdecydowanie przesadza ... Muszę tylko zapisać i wykonać kopię zapasową niektórych plików konfiguracyjnych w wygodny sposób.
Ywen