我正在使用 osquery v4.1.1 来监视 ubuntu 机器上的文件事件。
$ osqueryi --line "SELECT version, build, platform FROM os_version;"
version = 16.04.3 LTS (Xenial Xerus)
build =
platform = ubuntu
$ osqueryi --line "SELECT version from osquery_info;"
version = 4.1.1
我正在尝试以/etc/
递归方式查看目录中的所有文件,该文件的扩展名.conf
使用以下通配符:/etc/%%/%.conf
. 但是,它还会报告/etc/
. 如果我创建一个文件/etc/foo
,它会为该CREATED
事件和其他人创建一个文件事件。
重新生成的最小配置:
{
"schedule": {
"file_events": {
"query": "SELECT * FROM file_events",
"interval": "5",
"removed": "false"
}
},
"file_paths": {
"sys": ["/etc/%%/%.conf"]
}
}
这些是我做的时候得到的文件事件touch /etc/foo
。
{"name":"file_events","hostIdentifier":"<hostname>","calendarTime":"Mon Dec 30 13:56:03 2019 UTC","unixTime":1577714163,"epoch":0,"counter":0,"numerics":false,"columns":{"action":"CREATED","atime":"1577714161","category":"sys","ctime":"1577714161","gid":"0","inode":"389945","mode":"0644","mtime":"1577714161","size":"0","target_path":"/etc/foo","time":"1577714161","uid":"0"},"action":"added"}
{"name":"file_events","hostIdentifier":"<hostname>","calendarTime":"Mon Dec 30 13:56:03 2019 UTC","unixTime":1577714163,"epoch":0,"counter":0,"numerics":false,"columns":{"action":"ATTRIBUTES_MODIFIED","atime":"1577714161","category":"sys","ctime":"1577714161","gid":"0","inode":"389945","mode":"0644","mtime":"1577714161","size":"0","target_path":"/etc/foo","time":"1577714161","uid":"0"},"action":"added"}
{"name":"file_events","hostIdentifier":"<hostname>","calendarTime":"Mon Dec 30 13:56:03 2019 UTC","unixTime":1577714163,"epoch":0,"counter":0,"numerics":false,"columns":{"action":"UPDATED","atime":"1577714161","category":"sys","ctime":"1577714161","gid":"0","inode":"389945","mode":"0644","mtime":"1577714161","size":"0","target_path":"/etc/foo","time":"1577714161","uid":"0"},"action":"added"}
问题 :
- 甚至是
/etc/%%/%.conf
有效且可用的通配符? - 如果没有,有没有办法实现所需的手表?
- 如果是,为什么不根据 glob 过滤事件?
我可以找到以下函数:filesystem.cpp#replaceGlobWildcards()但除了尝试提取没有通配符的基本路径之外,我无法理解它到底在做什么。
另外,我知道它使用fnmatch,但它如何将类似 SQL 的模式转换为 fnmatch 兼容表达式。