fanotify FAN_ALLOW / FAN_DENY



  • Hallo Community,

    ich versuche mittels fanotify einen OnAccess Virus Scanner zu bauen.
    Dem fanotify Aufruf initialisere Ich mit
    fanotify_init(FAN_CLASS_CONTENT | FAN_UNLIMITED_QUEUE | FAN_UNLIMITED_MARKS, O_LARGEFILE | O_RDONLY);
    und den Filesystem Mark setzte ich auf
    fanotify_mark(fan_desc, FAN_MARK_ADD | FAN_MARK_MOUNT,FAN_OPEN_PERM | FAN_ACCESS_PERM | FAN_OPEN_EXEC_PERM | FAN_EVENT_ON_CHILD | FAN_CLOSE_WRITE, AT_FDCWD, "/home");
    Nutzen möchte ich hier die FAN_DENY und FAN_ALLOW Funktion.
    Das heißt, wenn eine Datei geöffnet wird, möchte Ich diese mittels Socket API an den Virus Scanner ClamAV senden.
    Das Problem ist, das im prinzip die zu scanende Datei erst von z.B. cat oder vi oder einer andere Applikation geöfnet wird,
    daraufhin fanotify meldet das sich die Datei im Zugriff befindet und aber auch der ClamAV dies Datei öffnen möchte.
    Solange noch kein FAN_ALLOW oder FAN_DENY gesetzt wurde, bleibt die Datei im blockiermodus, sodass überhaupt keine Anwendung die Datei öffnen kann.
    Ich würde gerne beim ersten zugriff auf eine Datei den zugriff erstmal blockieren, daraufhin die Datei scannen und wenn ein Virus gefunden
    wurde, die Datei blockieren und wenn kein Virus gefunden wurde den Zugriff erlauben.

    Hat jemand schon Erfahrungen mit dieser Konstelation mit fanotify ?
    Kann mir jemand weiterhelfen ?

    Danke und Gruß
    ToRein



  • @ToRein sagte in fanotify FAN_ALLOW / FAN_DENY:

    Ich würde gerne beim ersten zugriff auf eine Datei den zugriff erstmal blockieren, daraufhin die Datei scannen und wenn ein Virus gefunden
    wurde, die Datei blockieren und wenn kein Virus gefunden wurde den Zugriff erlauben.

    Das hört sich eher nach Filesystem-Driver-schreiben an.



  • Hallo,

    ich möchte keinen Treiber schreiben.
    Wenn ich die Doku von fanotify richtig interpretiere

    https://man7.org/linux/man-pages/man7/fanotify.7.html
    ....
    Additional capabilities compared to the inotify(7) API include the
    ability to monitor all of the objects in a mounted filesystem, the
    ability to make access permission decisions, and the possibility to
    read or modify files before access by other applications
    .
    ....

    Könnte das lesen einer Datei gelingen, bevor die eigentliche Applikation das macht ?



  • Also vorweg: Ich hab keine Ahnung von der API die du da verwenden willst. Nur so eine Idee.

    Ginge es evtl. dass du zum Scannen einen Hardlink in ein nicht überwachtest Verzeichnis machst, und diesen Hardlink verwendest um die Datei scannen zu lassen? Wenn das nicht geht, dann ginge evtl. die Datei zu kopieren. Oder halt die Datei zu lesen und die Daten auf irgend einem anderen Weg dem Scanner zukommen zu lassen.

    Wobei du ja schreibst du willst die Datei mittels Sockets an den Scanner schicken. In dem Fall wäre das ja kein Problem - also wenn du die Daten mittels Socket schicken kannst, dann reicht es ja wenn dein Programm die Datei lesen kann. Anderen Programme bräuchten dann ja vor dem Scan keinen Zugriff.



  • Hallo Community,

    Ich habe eine Lösung gefunden.

    Zu sehen unter https://github.com/Rocket-Search/clamavaddon



  • Hallo ToRein,
    ich habe mir den Fall mal angeschaut und wäre von selbst nicht auf die Lösung gekommen.
    Jetzt habe ich mal einen Blick auf deine Lösung geworden, interessant! Danke dafür!


Log in to reply