Auditoría de archivos en Linux: ¿cómo mirar el árbol de directorios para eliminar?

9

Tengo un script de foro ejecutándose en el servidor y, de alguna manera, un pequeño número de archivos adjuntos comienzan a perderse. Quiero saber qué los está eliminando y a qué hora. ¿Cómo puedo configurar Linux auditd (auditctl) para ver el árbol de directorios (los archivos adjuntos se almacenan dentro del árbol de directorios de niveles múltiples) para ver las eliminaciones de archivos allí?

¿Puedo usar alguna otra herramienta para esto?

Vladislav Rastrusny
fuente

Respuestas:

8

Esta es una respuesta que escribí a una pregunta anterior:

Generalmente, si desea saber qué está haciendo un proceso / usuario / archivo sin tener que ejecutar lsof contra él las 24 horas del día, los 7 días de la semana, use auditctl.

Asumir que tiene un control de auditoría de kernel reciente es una operación simple. (Esto está en Debian-fu, si está ejecutando Red Hat translate según corresponda)

# apt-get install auditd

Asegúrese de que se esté ejecutando (/etc/init.d/auditd status).

auditctl -a entry,always -F arch=b64 -S open -F pid=<process id>

Reemplace b64 con b32 si está ejecutando un arco de 32 bits, abrir puede ser reemplazado por cualquier llamada al sistema o la palabra 'todos'

Para más información, lea la página de manual de auditctl.

Puede usar este método y pedirle que observe la llamada al sistema 'desvincular'.

El parámetro -w es útil para ver archivos / directorios, pero como explica la página del manual, hay advertencias.

-w ruta Inserta un reloj para el objeto del sistema de archivos en la ruta. No puede insertar un reloj en el directorio de nivel superior. Esto está prohibido por el núcleo. Los comodines tampoco son compatibles y generarán una advertencia. La forma en que funcionan los relojes es siguiendo el inodo internamente. Esto significa que si pone un reloj en un directorio, verá lo que parecen ser eventos de archivo, pero en realidad es solo la actualización de metadatos. Puede perderse algunos eventos al hacer esto. Si necesita ver todos los archivos en un directorio, se recomienda colocar un reloj individual en cada archivo. A diferencia de las reglas de auditoría de syscall, los relojes no afectan el rendimiento en función del número de reglas enviadas al núcleo.

Aaron Tate
fuente
No puedo :( Tengo PHP ejecutándose en modo CGI. Siempre es un proceso nuevo allí. Además, no quiero ver un solo proceso, sino ver una parte particular del sistema de archivos en busca de alteraciones.
Vladislav Rastrusny
Sí, vea la edición, hice, hay parámetros para ver los directorios del sistema de archivos, pero con advertencias o archivos.
Aaron Tate
Hay alrededor de 1000 carpetas y alrededor de 50k de archivos. Así que esto tampoco va a funcionar ... :(
Vladislav Rastrusny
En general, siempre que conozca las advertencias, debería poder continuar y colocar el reloj en el directorio de nivel superior que contiene las carpetas que desea ver.
Aaron Tate
Necesito hacer lo mismo (ver una carpeta para ver las eliminaciones para poder encontrar el PID / nombre del proceso que lo hizo), pero esto no parece funcionar (al menos en un núcleo 3.x). Si ejecuto "auditctl -a entry, siempre -F arch = b64 -S unlink -w / path / to / dir" para rastrear las eliminaciones, obtengo "la opción watch no se puede dar con una llamada al sistema". ¿Alguien tiene alguna idea?
IBBoard
1

¿Quizás se podría usar incron ?

ptman
fuente
No permite mirar el árbol en su conjunto. Solo por directorio como puedo ver.
Vladislav Rastrusny
0

Un par de ideas Puede usar stracepara ver qué está haciendo su aplicación, pero puede generar un registro de registros y puede ralentizar el sistema.

Otra idea es usar inotifywait, luego lsof/fuseren el archivo para ver qué lo está usando. Puede intentar ejecutar este script con alta prioridad (si puede) para tener información lo más precisa posible. Probablemente no capturará la unlinkllamada, ya que el archivo desaparecerá antes de que se entregue el evento.

Dan Andreatta
fuente
No puedo. No sé en qué proceso ejecutar strace porque encuentro archivos eliminados después de un tiempo. inotifywait tampoco funcionará porque PHP se está ejecutando como CGI y existen muchos procesos PHP con diferentes ID.
Vladislav Rastrusny
inotify se usa para monitorear el sistema de archivos, no los procesos en ejecución. Para strace, debe rastrear el proceso padre principal con la -fbandera, para seguir a los hijos.
Dan Andreatta
0

Si bien la recomendación auditada de fenix parece ideal, puede encontrar un IDS de sistema de archivos como AIDE útil. Desafortunadamente, es poco probable que sea lo suficientemente fino para lo que intenta aislar.

A menudo escribo guiones como solución para problemas como los que usted describe. Si no puede lograr lo que desea con las soluciones recomendadas, escriba algo usted mismo. A menudo no es muy complicado.

Warner
fuente
Parece que es solo para localizar cambios de archivos. No es para monitoreo en tiempo real.
Vladislav Rastrusny