【问题标题】:Linux kernel: log all file accessLinux内核:记录所有文件访问
【发布时间】:2014-02-05 02:16:13
【问题描述】:

在一个非常受限的嵌入式 Linux 系统上,我希望记录所有打开/映射/任何用于读取和或写入的文件。换句话说,所有至少被访问一次的文件。最好的方法是什么?由于“某些”限制,我不希望修改/破解文件系统、初始化脚本和用户空间级别……我认为我更愿意在内核中做事。即使在正确的函数中插入 printk 也是可以接受的。如果这很重要,我正在使用 ext3 文件系统。

【问题讨论】:

  • 您想更改内核但不修改 FS 堆栈?你能澄清一下吗?无论如何,如何在可堆栈文件系统中拦截 FS 调用,记录并将其转发到本机 FS。如果要跟踪整个 FS,请将这个可堆叠的 FS 挂载到 /':检查这里:wrapfs.filesystems.org/docs/linux-stacking/index.html
  • 正确。我想避免 FS 堆栈修改,我可以在内核中做任何事情。
  • inotify 怎么样?如果这没有帮助,也许我不明白你的问题。 man7.org/linux/man-pages/man7/inotify.7.html
  • 你想要auditd,Linux 审计守护进程。 security.blogoverflow.com/2013/01/…
  • 谢谢。我真的更喜欢在内核中做事情,因为我需要监控一旦 init 启动就会发生的棘手事情。我已经准备好修补内核了。我只是问拦截所有打开的 fs 调用的最佳位置是什么。

标签: linux-kernel filesystems ext3


【解决方案1】:

回答我自己的问题。修补内核文件系统驱动程序是一个可行的解决方案:

char *buf = (char*)__get_free_page(GFP_USER);
char *name = dentry_path_raw(file->f_dentry, buf, PAGE_SIZE);
printk("FILE OPEN read: %d write: %d %s\n", file->f_mode & FMODE_READ, file->f_mode & FMODE_WRITE, name);
free_page((unsigned long)buf);

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2015-12-22
    • 2011-12-15
    • 2015-10-05
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多