Bueno gente, un amigo (Zak) me pidió una solución para ejecutar scripts para determinados eventos de logs. No conozco nada que haga esto así que le voy a recomendar que haga lo que pongo acá abajo.
Primero creamos una pipe fifo
solucionesroot:~# mkdir /var/spool/logwath/
solucionesroot:~# mkfifo /var/spool/logwath/auth
Ahora solo los que nos queda es crear un daemon, too easy..
#!/bin/bash while (a=b); do cat /var/spool/logwath/auth | procesar_log done;
Y ahora desde otra consola probamos
solucionesroot:~# echo “asdf” > /var/spool/logwath/auth
Y listo, ¿ahora en que nos sirve esto?
Bueno, con esto podemos decirle a nuestro syslog que mande un archivo de log a nuestro daemon, con cada línea que noestro syslog deje le enviará la línea a script procesar_log
Zak espero que te sirva.
Saludos a todos.
[poll id=”3″]
Tags: bash script, escuchar por eventos de log, linux log, linux pipe fifo, listening for log events, logwatch, mkfifo example, syslog
a ver si entendi…
despues de crear la pipe y dejar el daemon corriendo… hago que mi syslog mande los eventos “auth” al file /var/spool/logwath/auth
verdad? de esta menera, cada vez que syslog mande la linea de log, esta tambien le llegara como primer parametro a procesar_log??
porque no me funciona, llegan cosas vacias a procesar_log.
mi procesar_log tiene un simple:
#!/bin/bash
echo $1 >> /tmp/test
y cuando me fijo en /tmp/test para ver que llego tengo dos lineas vacias
lo probaste? que puede ser?
desde ya mil gracias!
Claro Zak, es correcto lo que entiendes, el tema es que tienes que leer del stdin, no de los parámetros que te pasan ($1 $2 etc). Te dejo un ejemplo del script que podrías usar.
#!/bin/bash
while read line; do
echo “asdfasdf$line”
done;
Espero te sirva.
MN
lo pruebo cuando llego a casa! gracias de nuevo!
cuando termine todo el sistemita lo publico, la idea es sacar una foto con la webcam cuando un login falla, y mandar la cara del intruso por mail. jeje
salu3!
¡¡Great Zak!!, va a ser todo un éxito.
Feliz año 😉
Un abrazo.
MN