osquery在目录或文件上是否inotify安装监视程序

时间:2019-08-22 10:19:11

标签: inotify osquery

我正在使用osquery监视文件和文件夹,以获取有关这些文件的任何操作的事件。 osquery配置有一种特定的语法:

  • "/etc/":以1的深度监视整个目录。
  • "/etc/%":以1的深度监视整个目录。
  • "/etc/%%":以/etc/为根递归地监视整个树。

在查看大量目录的情况下,我正在尝试评估内存使用情况。在此过程中,我发现了以下统计数据:

  • "/etc""/etc/%""/etc/%.conf":发现只有1个inotify句柄以osquery的名称注册。

  • "/etc/%%:找到的以289进行inotify的句柄比以osquery的名义注册的句柄要多一些,因为树下总共有285个目录。检查/proc/$PID/fdinfo中的条目时,文件中列出的所有inode都仅指向文件夹。

例如:用于"/etc/%.conf"

$ grep -r "^inotify" /prod/$PID/fdinfo/
18:inotify wd:1 ino:120001 sdev:800001 mask:3ce ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:01001200bc0f1cab

$ printf "%d\n" 0x120001
1179649

$ sudo debugfs -R "ncheck 1179649" /dev/sda1
debugfs 1.43.4 (31-Jan-2017)
Inode   Pathname
1179649 //etc

在此处的整个目录上都建立了inotify监视程序,但是仅报告匹配文件/etc/*.conf的事件。 osquery是否根据提供的file_paths过滤事件,这是我的假设,但不确定。

我为证明上述主张而进行的另一项实验是,使用inotify(7)中的源代码并在特定文件上运行观察程序。当我查看inotify观察者列表时,它只会显示:

$ ./a.out /tmp/inotify.cc &

$ cat /proc/$PID/fdinfo/3
...
inotify wd:1 ino:1a1 sdev:800001 mask:38 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:a1010000aae325d7

$ sudo debugfs -R "ncheck 417" /dev/sda1
debugfs 1.43.4 (31-Jan-2017)
Inode   Pathname
417 /tmp/inotify.cc

因此,根据此实验,可以在单个文件上建立观察程序(这在inotify手册页中很清楚)。这支持osquery正在根据提供的文件模式进行某种过滤的说法。

有人可以核实该说法吗?


我的osquery配置:

{
  "options": {
    "host_identifier": "hostname",
    "schedule_splay_percent": 10
  },
  "schedule": {
    "file_events": {
      "query": "SELECT * FROM file_events;",
      "interval": 5
    }
  },

  "file_paths": {
    "sys": ["/etc/%.conf"]
  }
}

$ osqueryd --version
osqueryd version 3.3.2

$ uname -a
Linux lab 4.9.0-6-amd64 #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07) x86_64 GNU/Linux

1 个答案:

答案 0 :(得分:1)

听起来像是侦探!

我认为源代码中的注释支持这一点。值得一读。我认为相关文件: