Skip to content

SentinalFS/file-monitor

Repository files navigation

file monitor

It monitors files

Dir structure

.
├── CHANGELOG.json
├── CMakeLists.txt
├── common.h
├── data_types.h
├── headers.h
├── helpers
│   ├── delete.h
│   ├── read_write.h
│   └── rename.h
├── monitor.c
├── README.md
├── VERSION.txt
└── vmlinux.h

BPF traces

VFS Read

sudo bpftrace -e 'kprobe:vfs_read { 
    $file = (struct file *)arg0;
    $dentry = $file->f_path.dentry;
    
    if ($dentry != 0) {
        printf("READ - File: %s, Size: %d bytes, PID: %d, Comm: %s\n", 
               str($dentry->d_name.name), 
               arg2,  // count/size parameter
               pid, 
               comm);
               
        $parent = $dentry->d_parent;
        if ($parent != 0) {
            printf("  Parent dir: %s\n", str($parent->d_name.name));
        }
    }
}'

VFS Write

sudo bpftrace -e 'kprobe:vfs_write { 
    $file = (struct file *)arg0;
    $dentry = $file->f_path.dentry;
    
    if ($dentry != 0) {
        printf("WRITE - File: %s, Size: %d bytes, PID: %d, Comm: %s\n", 
               str($dentry->d_name.name), 
               arg2,  // count/size parameter
               pid, 
               comm);
               
        $parent = $dentry->d_parent;
        if ($parent != 0) {
            printf("  Parent dir: %s\n", str($parent->d_name.name));
        }
    }
}'

VFS Rename

sudo bpftrace -e 'kprobe:vfs_rename { 
    $old_dentry = (struct dentry *)arg1;
    $new_dentry = (struct dentry *)arg3;
    
    if ($old_dentry != 0 && $new_dentry != 0) {
        printf("RENAME - From: %s, To: %s, PID: %d, Comm: %s\n", 
               str($old_dentry->d_name.name), 
               str($new_dentry->d_name.name),
               pid, 
               comm);
               
        $old_parent = $old_dentry->d_parent;
        $new_parent = $new_dentry->d_parent;
        
        if ($old_parent != 0) {
            printf("  Source dir: %s\n", str($old_parent->d_name.name));
        }
        
        if ($new_parent != 0) {
            printf("  Target dir: %s\n", str($new_parent->d_name.name));
        }
    }
}'

VFS Unlink

sudo bpftrace -e 'kprobe:vfs_unlink { 
    $dentry = (struct dentry *)arg2;
    printf("dentry ptr: %p, d_name.len: %d, d_name.name_ptr: %s\n", 
    $dentry, $dentry->d_name.len, str($dentry->d_name.name));
    
    $parent = $dentry->d_parent;
    if ($parent != 0) {
        printf("Parent name: %s\n", str($parent->d_name.name));
    } else {
        printf("Parent: NULL\n");
    }
}'