Rastree, guarde y revierta las modificaciones del sistema de archivos realizadas por un programa en Linux

9

Me gustaría poder, cuando se ejecuta un programa como un instalador, rastrear la lista de las modificaciones realizadas en mi sistema de archivos para que luego pueda revertirlas.

EDITAR: Esto se refiere a un programa no empaquetado . Yo uso apt-get lo más lejos que puedo.

Idealmente, me gustaría poder hacer algo como:

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

Y entonces:

(sudo) revert-modifs fsmodifs.patch

¿Hay una manera conveniente de hacer eso?

Ywen
fuente

Respuestas:

1

Posiblemente la forma más fácil (?) De hacer esto es arrancar desde un LiveUSB con una "partición de datos persistente". (O, para replicar el efecto usted mismo, en una cárcel chroot: monte una capa rw sobre una capa ro.) Tome una instantánea del sistema de archivos rw, que debería ser muy delgado después de un arranque nuevo, luego ejecute su instalador. Cada archivo que altere o cree estará en la partición superpuesta rw "datos persistentes". Incluso los archivos eliminados aparecerán como "archivos de puntos mágicos".

BRPocock
fuente
Esto parece complicado ... ¿No es posible crear una nueva partición, montar la antigua RO y montar sobre ella la nueva en RW?
Ywen
Sí, puede hacerlo también, desde el modo de usuario único, tal vez. Eche un vistazo a unionfs: básicamente, el sistema de archivos RW acepta todas las escrituras, pero el sistema de archivos RO todavía es visible debajo de él. Si un archivo ha cambiado, "migra" al RW fs; si se elimina, en realidad hay un "archivo de puntos mágico" en el RW fs para "enmascararlo". La configuración unionfspuede ser un poco complicada, es por eso que le sugerí LiveUSB (hace esa parte por usted, y tiene una imagen de sistema "limpia" para comenzar)
BRPocock
2

Tal vez echar un vistazo a Tripwire? Tripwire es más pasivo que su ejemplo activo, pero aún puede funcionar para usted.

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

Tripwire es un sistema de detección de intrusos (IDS) que, de forma constante y automática, mantiene los archivos e informes críticos del sistema bajo control si un cracker los ha destruido o modificado (o por error). Permite al administrador del sistema saber de inmediato qué se vio comprometido y solucionarlo.

Corith Malin
fuente
1

Echa un vistazo a Installwatch:

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

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

qerub
fuente
¿Te refieres a "CheckInstall"? ¿Funciona cuando no tengo makefiles? En mi caso (Eclim) la instalación se realizó a través de un instalador jar.
No, me refiero a Installwatch, que es parte de CheckInstall.
qerub
"Installwatch funciona con todos los programas ELF dinámicamente vinculados, anulando las llamadas al sistema que causan alteraciones en el sistema de archivos. Algunas de esas llamadas al sistema están abiertas (2) y desvinculadas (2)". Debería funcionar bien con una JVM.
qerub
Sí, pero aparentemente Installwatch solo ya no se ha mantenido durante mucho tiempo. Además, necesita CheckInstall para poder revertir los registros de InstallWatch. Todavía debería echar un vistazo. Gracias.
1

Se usa LD_PRELOADpara cargar una biblioteca que intercepta la openfunción de la biblioteca y cambia el nombre de ruta / registra la salida / hace una copia de seguridad antes de abrir el archivo.

Echa un vistazo al código fuente de strace.

Ben Voigt
fuente
Sí, pero como alguien dijo, ¿qué pasa si el programa está estáticamente vinculado?
Ywen
0

Si el instalador utiliza alguna instalación de empaquetado (es decir, para .debpaquetes para Debian / Ubuntu / ..., .rpmpaquetes para RedHat / CentOS / ... etc.), entonces el instalador de paquetes debe saber qué hacer durante la instalación y la eliminación. Y creo que debe usar los sistemas de embalaje existentes , no inventar el suyo. (Linux convencionalmente no tiene instaladores como Windows).

Si realmente desea seguir los cambios de archivo realizados por algún proceso, puede usar straceo ltracecapturar llamadas del sistema. También puede inotificar e instalaciones relacionadas.

Pero no sé de un catch-modifs& revert-modifscomo quieres.

Sugiero no hacer un instalador para su aplicación, sino usar el administrador de paquetes, por lo tanto, proporcionar .deb(y / o .rpm) paquetes para su aplicación. Manejarán los problemas de dependencia mejor que su propio instalador.

Basile Starynkevitch
fuente
Sí, uso apt-get todo el tiempo. No estaba hablando de mis propias aplicaciones, sino de las no empaquetadas. No siempre tengo un .deb a mano.
Las aplicaciones no empaquetadas que menciona deben documentar qué archivos usan y cómo deben instalarse.
^^ ¿Y si no lo hacen? Sabía que podía empaquetarlos yo mismo, pero no es sencillo . Además, dichos comandos podrían ser útiles para probar de manera más segura algunos scripts del sistema que realice.
Estoy de acuerdo en que su deseo es interesante, pero no estoy seguro de si es fácilmente implementable ...
0

La manera fácil de lograr lo que desea: instale la aplicación "no confiable" en una nueva instancia de máquina virtual (estación de trabajo VMWare, Oracle VirtualBox, etc.).

Cuando decida que ya no desea la aplicación, elimine la máquina virtual.

Sus otras alternativas, la captura de llamadas al sistema de acceso a archivos, probablemente serán propensas a errores e incompletas. Tenga especial cuidado con cualquier solución que requiera vinculación dinámica para funcionar (como parece hacer Installwatch). Un instalador puede ejercer legítimamente llamadas directas al sistema o estar vinculado estáticamente.


fuente
Wow, la máquina virtual definitivamente es exagerada ... Solo necesito guardar y hacer una copia de seguridad de algunos archivos de configuración de una manera conveniente.
Ywen