【发布时间】:2017-08-21 09:08:10
【问题描述】:
我想为 Android x86 实现 fanotify(受内核 > 2.6.37 支持 - 在 Android 5+ 中提供)接口 - 首先用于金鱼模拟器。我喜欢使用工具fsmon 来启动文件系统监视器(一个具有基本结构的C 程序,使用fanotify 系统调用fanotify_init(2) 和fanotify_mark(2))。我通过自己的访问权限扩展了 fsmon 代码。此权限应该能够稍后由 Android 中的系统应用程序进行编辑。 (例如:我可以稍后选择,拒绝哪些文件类型)
问题如下:
“fanotify 的另一个大缺点是它目前是 root-only(更具体地说是 CAP_SYS_ADMIN-only)。这意味着只有 root 用户可以请求使用 fanotify 提供的监控功能 [...] " [source]
root 手机是必须的吗?但是,在内核启动 fsmon 二进制文件没有设备生根的情况下/之后是否还有其他方法可以运行?
我的第一个想法是在init.d 每次启动后执行一个文件/服务。但是要使用它,您需要一部有根电话。然后我发现了这个:init.d scripts support:
“如果您的设备已root,则可以使用超级用户权限执行脚本,但普通用户也可以。”
但我不明白这是如何工作的(我还没有测试过)这可能是一个可能的解决方案吗?为了在其他设备上运行它(不安装此应用程序),我需要了解该应用程序如何绕过问题。而init.d 在用户空间中执行,甚至可以在那里以 root 身份运行监视器吗?
下一个想法是运行一个 crontab,但同样是 story - 已植根电话。
现在我更深一层 - 在内核启动序列中链接/执行二进制文件(或 c 代码).. 老实说 - 我不是专业的内核开发人员。我知道,我需要 execve 系统调用才能在内核中运行文件。但是我的方法对吗?如果这可能是正确的方式,我以后如何与系统应用程序通信?我是否需要创建一个双方都可以访问的小型“数据库”?哪种方式最适合从系统应用程序访问提供的数据? (kernel-userspace-communication: Procfs, Sysfs, Configfs, ...) 哪里是启动监视器的正确位置? (当然 - 在设置文件系统之后)
或者是绝对不可能使用 fanotify 不root手机?
如果有人能给我一些建议,我会很高兴...
【问题讨论】:
-
好的,对于用户空间和内核空间之间的通信:Android特定的Binder是解决这个问题的正确方法吗?我会继续研究.....
标签: android c linux linux-kernel fanotify