Lo he estado probando y algo debo estar haciendo mal porque no me funciona.
Una vez comprobado que auditd está arrancado y que al el script que pegaste le falta lectura del socket dentro de la condición while, no me funciona.
He probado a modificar ficheros dentro de un directorio controlado por audit ( con auditctl ) pero el socket no parece leer nada. De hecho, lo que he hecho es
auditctl -w/directorio -p wa
sin clave por la que filtrar.
¿ se te ocurre que puede ser ? ¿ conoces alguna clase de logs de audit ?
Gracias y un saludo
-- "En teoría no hay diferencia entre teoría y práctica. En la práctica, sí la hay."
Se ve que, como lo he puesto en texto plano, me ha filtrado lo que hay entre <>...
En el "while", $data debe ser $data = <mySocket>
#!/usr/bin/perl -X
use strict; use Socket;
my $ruta = "/var/run/audispd_events"; my $script = "/usr/bin/unison"; my $key = "espejo"; my $data = ""; my $buffer = "";
socket (mySocket, PF_UNIX, SOCK_STREAM, 0) || die "socket: $!\n"; connect(mySocket, sockaddr_un($ruta)) || die "connect: $!";
while (defined($data = <mySocket>)) { if ($data =~/$key/) { $buffer = `$script`;
#print $buffer; }
}
close(mySocket) || die "close: $!"; exit;
Si no defines una clave y usas auditd para monitorizar otro directorio o archivo el script no sabrá cuando lanzar correctamente, en este caso, Unison (puede ser Rsync o lo que quieras).
De todas formas, si no vas a usar auditd más que para esto puedes eliminar el fragmento: if ($data =~/$key/) { system($script); }
Y sustituirlo por algo así:
if ($data ne "") { system($script); }
$data = "";
No lo he probado, pero creo que debería funcionar.
Algo hice mal
(Puntos:2)( http://barrapunto.com/~Grohl/bitacora | Última bitácora: Lunes, 09 Marzo de 2015, 09:07h )
Lo he estado probando y algo debo estar haciendo mal porque no me funciona.
Una vez comprobado que auditd está arrancado y que al el script que pegaste le falta lectura del socket dentro de la condición while, no me funciona.
He probado a modificar ficheros dentro de un directorio controlado por audit ( con auditctl ) pero el socket no parece leer nada.
De hecho, lo que he hecho es
auditctl -w
sin clave por la que filtrar.
¿ se te ocurre que puede ser ? ¿ conoces alguna clase de logs de audit ?
Gracias y un saludo
"En teoría no hay diferencia entre teoría y práctica. En la práctica, sí la hay."
Re:Algo hice mal
(Puntos:1)( http://barrapunto.com/ | Última bitácora: Viernes, 21 Agosto de 2009, 11:37h )
En el "while", $data debe ser $data = <mySocket>
#!/usr/bin/perl -X
use strict;
use Socket;
my $ruta = "/var/run/audispd_events";
my $script = "/usr/bin/unison";
my $key = "espejo";
my $data = "";
my $buffer = "";
socket (mySocket, PF_UNIX, SOCK_STREAM, 0) || die "socket: $!\n";
connect(mySocket, sockaddr_un($ruta)) || die "connect: $!";
while (defined($data = <mySocket>)) {
if ($data =~
$buffer = `$script`;
#print $buffer;
}
}
close(mySocket) || die "close: $!";
exit;
Si no defines una clave y usas auditd para monitorizar otro directorio o archivo el script no sabrá cuando lanzar correctamente, en este caso, Unison (puede ser Rsync o lo que quieras).
De todas formas, si no vas a usar auditd más que para esto puedes eliminar el fragmento:
if ($data =~
system($script);
}
Y sustituirlo por algo así:
if ($data ne "") {
system($script);
}
$data = "";
No lo he probado, pero creo que debería funcionar.
Un saludo.