• # Repwatcher - surveillance accès fichiers

    Posté par . En réponse à la dépêche Exploiter inotify, c’est simple. Évalué à 8.

    Salut à tous,

    voilà plusieurs années que je développe une application (en OCaml) qui surveille les accès à des fichiers dans des dossiers surveillés puis remonte les informations collectées.

    A l'origine (2007-2008 je crois), le but était d'avoir un log lorsque des personnes téléchargeaient des fichiers chez moi par SSH. J'avais donc besoin d'avoir une date de début et de fin, le path, le nom du fichier et le nom du téléchargeur.
    En effet, je voyais de la bande passante partir la nuit mais sans savoir ce qu'il s'était vraiment passé.
    Aujourd'hui, cela ne se limite pas à SSH.

    Il y a plusieurs canaux (au choix) pour la remontée d'informations:
    - enregistrement dans une base de données (MySQL ou PostgreSQL)
    - envoi d'un mail (instantané ou bufferisé)
    - envoi d'une notification local (popup à l'écran) ou distante (authentification mutuelle TLS entre les clients et le serveur puis la popup par appel dbus)

    L'application vérifie également la progression de lecture du fichier ouvert en vérifiant son offset.
    On peut ainsi en déduire où la vitesse de lecture/écriture.

    Petit retour d'expérience sur inotify:
    - Inotify retourne peu d'informations à l'application qui lit la socket. Du coup, c'est à l'application de maintenir tout une liste d'informations.
    Comme dit précédemment, si on met un dossier en surveillance, ce n'est pas récursif. Il faut donc soi-même faire le parcours en profondeur et gérer la filiation des dossiers.
    Si un dossier est déplacé, cela revient à supprimer et tout refaire.

    • Pour simplifier, lors de l'accès à un fichier, inotify vous dit "ça s'est passé dans le dossier watch id 42 pour le fichier «bidule», celui avec le watch id 42". Vous n'avez pas le chemin complet du dossier, et s'il y a plusieurs accès différents au même fichier, c'est à vous de vous débrouiller pour savoir que l'event CLOSE sur le fichier est correspond à tel ou tel évènement d'ouverture.

    https://github.com/gbe/repwatcher