Monitorando integridade de arquivos

Um amigo pediu colaboração para monitorar a integridade de arquivos usando MD5. Seu desejo era executar periodicamente um script para checar os arquivos e alertá-lo via e-mail caso algum dos arquivos fosse alterado. Pra resolver isso, usando uma conta do gmail, fizemos um pequeno script python:

#!/usr/bin/python
# ref: http://stackoverflow.com/questions/1131220/get-md5-hash-of-big-files-in-python
import hashlib, smtplib

def getfilehash(filename):
  md5=hashlib.md5()
    with open(filename,'rb') as f:
    for chunk in iter(lambda: f.read(8192), b''):
      md5.update(chunk)
    return md5.hexdigest()

def notify(filename):
  sender="[email protected]"
  recipient="[email protected]"
  headers="\r\n".join(["From: "+sender, "To: "+recipient, "Subject: ALERT: File "+filename+" owned", "MIME-Version: 1.0", "Content-Type: text/html"])
  m=smtplib.SMTP("smtp.gmail.com", 587)
  m.ehlo()
  m.starttls()
  m.ehlo()
  m.login(sender, "your password")
  m.sendmail(sender, recipient, headers)

# use "md5sum /path/file" to get your md5 hash and paste here
files=[
  ["/etc/passwd", "hash_do_etc_passwd"],
  ["/etc/shadow", "hash_do_etc_shadow"],
  ["/usr/bin/ssh", "hash_do_usr_bin_ssh"]
]

for file in files:
  hashtest=getfilehash(file[0]);
  if file[1]!=hashtest:
    notify(file[0])

Em seguida, acrescentamos o script no crontab…

*/5 * * * * /path/filemon.py

…e aguardamos as notificações! 😀

Tem alguma contribuição? Comente para compartilhar!

Pouco || muito

A vida é interessante… me envolvo com tantas atividades que atraem minha atenção e faço menos do que gostaria de fazer. Mas… ter ideias, ser parte de uma família, um grupo de amigos, trabalhar em uma atividade bacana, tocar vários projetos com destreza, sustentar-se, estudar e pesquisar sobre assuntos que me agradam… me parecem ser os poucos aspectos que realmente tem valor e que valem a pena serem perseguidos!