Rastreie, salve e reverta as modificações do sistema de arquivos feitas por um programa no Linux

9

Eu gostaria de poder, quando um programa como um instalador é executado, rastrear a lista das modificações feitas no meu sistema de arquivos para que eu possa reverter as mesmas posteriormente.

EDITAR: Isto diz respeito a um programa não empacotado . Eu uso o apt-get o mais longe possível.

Idealmente, gostaria de poder fazer algo como:

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

E então:

(sudo) revert-modifs fsmodifs.patch

Existe uma maneira conveniente de fazer isso?

    
por Ywen 27.12.2011 / 12:41

6 respostas

1

Possivelmente, a maneira mais fácil (?) de fazer isso é inicializar um LiveUSB com uma "partição de dados persistente". (Ou, para replicar o efeito você mesmo, em uma jaula chroot: monte uma camada rw sobre uma camada ro). Faça um snapshot do sistema de arquivos rw - que deve ser muito fino após uma inicialização - e execute o seu instalador. Todos os arquivos que ele altera ou cria estarão na partição de sobreposição "dados persistentes" do rw. Mesmo arquivos removidos aparecerão como "magic dotfiles".

    
por 28.12.2011 / 05:17
2

Talvez dê uma olhada no tripwire? O Tripwire é mais passivo que o seu exemplo ativo, mas ainda pode funcionar para você.

link

Tripwire is an intrusion detection system (IDS), which, constantly and automatically, keeps your critical system files and reports under control if they have been destroyed or modified by a cracker (or by mistake). It allows the system administrator to know immediately what was compromised and fix it.

    
por 27.12.2011 / 12:52
1

Dê uma olhada no Installwatch:

link

link

    
por 27.12.2011 / 13:58
1

Use LD_PRELOAD para carregar uma biblioteca que intercepte a função de biblioteca open e altere o nome do caminho / registre a saída / faça um backup antes de abrir o arquivo.

Dê uma olhada no código-fonte para strace .

    
por 28.12.2011 / 05:20
0

Se o instalador usar algum recurso de empacotamento (por exemplo, .deb packages para Debian / Ubuntu / ..., .rpm packages para RedHat / CentOS / ... etc), o instalador do pacote deve saber o que fazer instalação e remoção. E eu acredito que você deve usar sistemas de embalagem existentes, não inventar o seu próprio. (Linux convencionalmente não tem instaladores como o Windows).

Se você realmente quiser seguir as alterações de arquivo feitas por algum processo, poderá usar strace ou ltrace para capturar as chamadas do sistema. Você também pode inotify e instalações relacionadas.

Mas eu não sei de um catch-modifs & revert-modifs como você deseja.

Sugiro não fazer um instalador para seu aplicativo, mas usar o gerenciador de pacotes, portanto, forneça pacotes .deb (e / ou .rpm ) para seu aplicativo. Eles vão lidar com os problemas de dependência melhor do que o seu próprio instalador.

    
por 27.12.2011 / 12:51
0

A maneira fácil de obter o que você deseja: instale o aplicativo "não confiável" em uma instância de máquina virtual totalmente nova (estação de trabalho VMWare, Oracle VirtualBox, etc.).

Quando você decidir que não deseja mais o aplicativo, exclua a máquina virtual.

Suas outras alternativas - captura de syscalls de acesso a arquivos - provavelmente serão propensas a erros e incompletas. Seja especialmente cauteloso com qualquer solução que exija vinculação dinâmica para funcionar (como o Installwatch parece fazer). Um instalador pode legitimamente fazer chamadas diretas ao sistema ou estar vinculado estaticamente.

    
por 28.12.2011 / 04:34