Назад | Перейти на главную страницу

Отслеживайте, сохраняйте и отменяйте изменения файловой системы, сделанные программой под Linux

Я хотел бы иметь возможность при запуске такой программы, как установщик, отслеживать список изменений, внесенных в мою файловую систему, чтобы потом я мог отменить их.

РЕДАКТИРОВАТЬ: Это касается неупакованный программа. Я использую apt-get, насколько могу.

В идеале я бы хотел сделать что-то вроде:

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

А потом:

(sudo) revert-modifs fsmodifs.patch

Есть ли удобный способ сделать это?

Может взглянуть на tripwire? Tripwire более пассивен, чем ваш активный пример, но он все равно может работать для вас.

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

Tripwire - это система обнаружения вторжений (IDS), которая постоянно и автоматически держит под контролем важные системные файлы и отчеты, если они были уничтожены или изменены взломщиком (или по ошибке). Это позволяет системному администратору немедленно узнать, что было взломано, и исправить это.

Использовать LD_PRELOAD для загрузки библиотеки, которая перехватывает open функция библиотеки и изменяет путь / регистрирует вывод / делает резервную копию перед открытием файла.

Взгляните на исходный код для strace.

Возможно, самый простой (?) Способ сделать это - загрузиться с LiveUSB с «постоянным разделом данных». (Или, чтобы воспроизвести эффект самостоятельно, в chroot jail: смонтируйте слой rw поверх слоя ro.) Сделайте снимок файловой системы rw - которая должна быть очень тонкой после новой загрузки - затем запустите программу установки. Каждый файл, который он изменяет или создает, будет находиться в оверлейном разделе rw «постоянные данные». Даже удаленные файлы будут отображаться как «волшебные файлы точек».

Если установщик использует какое-либо средство упаковки (например, для .deb пакеты для Debian / Ubuntu / ..., .rpm пакеты для RedHat / CentOS / ... и т. д.), то установщик пакетов должен знать, что делать при установке и удалении. И я считаю, что тебе следует использовать существующие системы упаковки, а не изобретайте свой собственный. (В Linux обычно нет установщиков, как в Windows).

Если вы действительно хотите отслеживать изменения файла, внесенные каким-либо процессом, вы можете использовать strace, или ltrace чтобы поймать системные вызовы. Вы также можете inotify и сопутствующие объекты.

Но я не знаю catch-modifs & revert-modifs Как ты хочешь.

Я предлагаю не создавать установщик для вашего приложения, а использовать диспетчер пакетов, следовательно, предоставить .deb (и / или .rpm) пакеты для вашего приложения. Они справятся с проблемами зависимости лучше, чем ваш собственный установщик.

Самый простой способ добиться желаемого: установить «ненадежное» приложение в совершенно новый экземпляр виртуальной машины (рабочая станция VMWare, Oracle VirtualBox и т. Д.).

Когда вы решите, что вам больше не нужно приложение, удалите виртуальную машину.

Другие ваши альтернативы - перехват системных вызовов доступа к файлам - скорее всего, будут неполными и подвержены ошибкам. Будьте особенно осторожны с любым решением, для работы которого требуется динамическое связывание (как это, похоже, делает Installwatch). Установщик может вполне законно выполнять прямые системные вызовы или иметь статическую связь.