Monitorare il sistema con Inotify e Incron

Mattepuffo's logo
Monitorare il sistema con Inotify e Incron

Monitorare il sistema con Inotify e Incron

Inotify è un ottimo sistema di notifica, presente dalla versione del Kernel 2.6.13 e sempre più usato nelle varie distro.

Grazie a questo "nuovo" sistema è possibile accorgersi di eventuali modifiche e danni in tempo quasi reale, rispetto invece ai più vecchi sistemi tipo dnotify.

Se poi lo controlliamo con inron il sistema diventa quasi perfetto.

Incron è un programma che prende molto da cron, anche se in verità incron non ha nulla a che vedere con lo scheduling.

Cron infatti svolge azioni periodiche, mentre incron rimane in ascolto e cattura gli eventi di inotify.

Per prima cosa installiamo incron.

Dovrebbe essere presente su tutte le distro; su Archlinux:

# pacman -Sy incron

La tabelle di inrcond sono divise in tre colonne:

  • la prima indica il PATH da controllare
  • la seconda l'evento da rilevare
  • la terza il comando da eseguire quando si scatena l'evento

Per quanto riguarda l'evento da rilevare abbiamo a disposizione un'ampia scelta:

IN_ACCESS -> il file è stato letto

IN_ATTRIB -> cambiamento attributi

IN_CLOSE_WRITE -> file aperto in modifca e poi chiuso

IN_CLOSE_NOWRITE -> file chiuso senza modifiche

IN_CREATE -> file/directory create

IN_DELETE -> file/directory cancellate

IN_DELETE_SELF -> file/directory osservata è stata cancellata

IN_MODIFY -> file modificato

IN_MOVE_SELF -> file/directory spostata o rinominata

IN_MOVED_FROM -> file/directory spostata dalla directory controllata

IN_MOVED_TO -> file/directory spostata nella directory controllata

IN_OPEN -> file aperto

IN_ALL_EVENTS -> qualsiasi evento

Insomma ce ne è per tutti i gusti.

Per controllare gli eventi possiamo usare incrontab (simile a crontab).

Per vedere gli eventi per l'utente corrente:

# incrontab -l
/srv/http IN_CREATE,IN_DELETE logger "ATTENZIONE"

Io ho un solo evento impostato per root.

Per aggiungere o modificare una tabella possiamo usare lo switch -e e poi modificare il tutto usando l'editor predefinito (che in genere è Vim).

Nel mio caso controllo la directory di Apache, controllando qualsiasi evento.

Con il comando logger scrivo dentro a /var/log/messages.log il messaggio ATTENZIONE ogni qualvolta succede qualcosa.

Questo un altro esempio:

/srv/http IN_ALL_EVENTS logger "ATTENZIONE IN $@ è avvenuto $%"

Facciamo una prova:

# cd /srv/http

# touch prova

# rm prova

# cat /var/log/messages.log

Feb 20 21:52:23 localhost logger: "ATTENZIONE IN /srv/http è avvenuto IN_OPEN"
Feb 20 21:52:23 localhost logger: "ATTENZIONE IN /srv/http è avvenuto IN_CLOSE_WRITE"
Feb 20 21:52:23 localhost logger: "ATTENZIONE IN /srv/http è avvenuto IN_ATTRIB"
Feb 20 21:52:23 localhost logger: "ATTENZIONE IN /srv/http è avvenuto IN_CREATE"
Feb 20 21:52:25 localhost logger: "ATTENZIONE IN /srv/http è avvenuto IN_DELETE"

I vari simboli che iniziano con $ sono delle variabili sotto forma di argomento e ce ne sono diversi:

$$ -> per fare il segno del dollaro

$@ -> percorso, PATH, che stiamo controllando

$# -> nome del file che stiamo controllando

$% -> nome dell'evento rilevato

$& -> nome numerico dell'evento rilevato

Un problema di inotify, però, è che non riesce a controllare anche le subdirectory.

Quindi a meno che non vogliamo inserire una tabella per ogni directory dobbiamo modificare qualcosa del genere:

find /srv/http -type d -print0 | xargs -0 -I{} echo "{} IN_ALL_EVENTS logger "In $@/$# avvenuto $%"" > /etc/incron.d/webroot.conf

Con questo comando creiamo il file /etc/incron.d/webroot.conf con dentro il risultato del comando find.

Riavviamo il demone e facciamo qualche prova!


Condividi

Commentami!