0
Monitoreo creación de archivos

Solved 4 Respuestas 34 Views
Necesito disparar una alerta cada vez que se cree un archivo en un directorio (vía FTP). No serían muchos archivos (supongo que unos 20 o 30 por día).

Por lo que estuve leyendo, esto se podría hacer usando inotify e icrond.

¿Es una alternativa adecuada? ¿Alguna contra al hacerlo de esa forma?

Desde ya, muchas gracias.

4 Respuestas

2
Mejor respuesta
Usa http://linux.die.net/man/5/incrontab que esta apoyado en inotify. Yo lo use en producción para replicar pubkeys en una arquitectura bastante 'cuestionable' de git servers. Pero en lo que respecta a incrontab es un caño.
respondido por edux (12,550 puntos) Ago 24, 2016
seleccionada por edux Sep 12, 2016
4Comentarios
comentado por HacheEle (1,140 puntos) Ago 24, 2016
Creo que esta opción es la más sencilla y si anda "un caño", no hay más que decir! :)
Muchas gracias!
comentado por HacheEle (1,140 puntos) Ago 31, 2016
Finalmente lo implementé con incron/incrontab.
El único problema que tuve fue con los nombres de archivos con espacios en blanco (cosa de usuario) :)
Lo pude solucionar capturando en el script el nombre de archivo como $* pero sirve únicamente para casos en que se pase un único parámetro al script que atiende el evento.
¿Hay alguna forma mejor de hacerlo?
comentado por edux (12,550 puntos) Ago 31, 2016
https://lists.ubuntu.com/archives/ubuntu-users/2009-June/188011.html si podes, cambiales los nombres a los archivos sacandoles el whitespace por _ no veo otra solucion simple.
comentado por HacheEle (1,140 puntos) Sep 1, 2016
Gracias por la respuesta.
Había leído ese post y justamente por eso fue que puse "cosa de usuario": por más que les dije que no pongan espacios en blanco en el nombre, como el FTP no chilla y les permite crear el achivo, creo que se "olvidan" y los ponen igual.
Y para poder reemplazar los nombres necesito la notificación, así que estoy en un círculo vicioso... :)
Pareciera que la única forma de manejarlo es tomar como nombre de archivo la cadena completa de parámetros (el $*), pero como decía antes, esto sirve sólo si te manejás con un único parámetro (como, por suerte, es mi caso).
1
inotify es una manera, aunque tenés que tener una aplicación que esté monitoreando específicamente eso.

Si vas a tener una aplicación/script/loquesea monitoreando, por ahí tenés otra alternativa. En Python tenés Watchdog por ejemplo. Nunca lo usé y por ahí es un poco demasiado, pero por ahí te sirve: https://pythonhosted.org/watchdog/quickstart.html#a-simple-example
respondido por godlike (8,550 puntos) Ago 24, 2016
1
Si es factible cambiar el ftp, pure-ftpd tiene hooks específicos para eso.
respondido por Saknussemm (240 puntos) Ago 24, 2016
3
La mas simple de todas: auditd + rsyslog/syslog-ng events (o SEC si queres algo pro: https://simple-evcorr.github.io/)

La regla de audit deberia ser algo como:

-w /path/to/ftp/files/ -p wa -k FTP_CRUD

Eso va a mandar las reglas con el key FTP_CRUD al archivo /var/log/audit/audit.log, pasando por el rsyslog/syslog-ng que tengas instalado.

Dps podes hacer una relga de rsyslog/syslog-ng para mandarte una alerta x mail cada vez que se matchea la key FTP_CRUD,  podes usar, por ej en rsyslog el modulo ommail para mandarte un mail o omsnmp para mandar una alerta a un sistema de monitoreo (AVOID NAGIOS AT ALL COST).

Un beneficio extra de usar audit es que podes hacer reportes diarios con aureport y usar ausearch, haciendo cosas como:

$ ausearch --start today --key FTP_CRUD

Eso listaria todas las entradas de log que se generaron hoy.

$ ausearch --start today --key FTP_CRUD --user ftp

Darian todos lso que se generaron hoy que fueron hechas por el usuario ftp.

Para mi es la solucion mas simple y rica en opciones.
Si no como opcion tenes habilitar el xmit log file en el FTP y usar SEC para extraer de ahi las lineas de log que quieras exportar como eventos.

La opcion de Watchdog que te comente @godlike tambien es muy buena opcion, yo lo use en otras ocasiones y funciona bien, de hecho en linux watchdog usa inotify :D

Saludillos
respondido por qlixed (10,630 puntos) Ago 24, 2016
...