Aprendiendo Perl, el reto: tripwire

Marcelo E. Magallon marcelo.magallon en gmail.com
Lun Abr 16 10:03:58 PDT 2012


En el reto anterior de "Aprendiendo Perl"[0] se pedía encontrar
archivos duplicados.  Este reto requiere de algunas de las cosas
que se hicieron ahí, pero para un propósito distinto.

Escriba un programa que monitoree un directorio para encontrar
cualquier archivo que cambie.  Programas como tripwire
implementan esto guardando meta información del archivo la
primera vez que corren y luego revisan que esa información
coincida posteriormente.  Por ejemplo, el tamaño y "digest" SHA1
deben permanecer iguales.  También se podría guardar el contenido
original, pero eso no es muy conveniente.

Dado que usted está al nivel de Aprendiendo Perl, no podemos
pedir demasiado o juzgarlo fuertemente.  Buena parte del problema
está en guardar los datos y leerlos posteriormente.  Una pista:
cree un archivo plano para guardar los datos "buenos" en la
primera corrida, y luego lea este archivo durante la segunda
corrida:

    1 #nombre:tamaño:SHA1
    2 file.txt:1023:53a0935982ae11a4784d51aa696733c947c0614f

¿Cómo va a manejar la seguridad de este archivo después de
crearlo?  Como ejemplo, puede consultar CPAN::Checksums[1], que
se encarga de la misma tarea para los módulos de CPAN.

Hay muchas formas en las que puede utilizar esto.  Puede
ejecutarlo en forma periódica desde cron, por ejemplo, pero
también puede hacer un 'daemon' que corra de forma contínua y que
esté revisando de forma periódica.  Una vez que encuentre un
cambio, puede reportarlo de muchas formas, pero vamos a pedir
solo que imprima una línea en la terminal, que puede verse algo
así como:

    1 file.txt cambió.
    2 
    3 Era:
    4 Tamaño: 1023 bytes
    5 SHA1: 53a0935982ae11a4784d51aa696733c947c0614f
    6 
    7 Ahora es:
    8 Tamaño: 2001 bytes
    9 SHA1: 730c6983bb9f942ef5cf6c174d76ad0c1594c1a7

[0] http://www.learning-perl.com/?p=286
[1] https://www.metacpan.org/module/CPAN::Checksums

          -------------------- 8< --------------------

Ese es el nuevo reto que publició brian en
http://www.learning-perl.com/?p=287.  Como siempre, quien quiera
publicar sus propias soluciones acá en la lista de correo es
bienvenido a hacerlo, y quien quiera comentar las soluciones
presentadas es igualmente bienvenido.


Más información sobre la lista de distribución Costarica-pm