0

我想为 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 提供的监控功能 [...]” [来源]

有根手机是必须的吗?但是,没有其他方法可以在内核启动 fsmon 二进制文件时/之后运行而不使设备生根吗?

我的第一个想法是在每次启动后执行一个文件/服务init.d。但是要使用它,您需要一部有根电话。然后我发现了这个:init.d 脚本支持

“如果您的设备已植根,则可以使用超级用户权限执行脚本,但普通用户也可以执行。”

但我不明白这是如何工作的(我还没有测试过)这可能是一个可能的解决方案吗?为了在其他设备上运行它(不安装此应用程序),我需要了解该应用程序如何绕过问题。并init.d在用户空间中执行,甚至可以在那里以 root 身份运行监视器吗?

接下来的想法是运行一个 crontab,但同样的故事- 植根电话。

现在我更深一层 - 在内核启动序列中链接/执行二进制文件(或 c 代码).. 老实说 - 我不是专业的内核开发人员。我知道,我需要execve系统调用才能在内核中运行文件。但是我的方法对吗?如果这可能是正确的方式,我以后如何与系统应用程序通信?我是否需要创建一个双方都可以访问的小型“数据库”?哪种方式最适合从系统应用程序访问提供的数据?( kernel-userspace-communication: Procfs, Sysfs, Configfs, ... ) 哪里是启动监视器的正确位置?(当然 - 在设置文件系统之后)

还是绝对不可能在不root手机的情况下使用fanotify

如果有人能给我一些建议,我会很高兴...

4

1 回答 1

1

您正在尝试使用需要权限(CAP_SYS_ADMIN 或 root)的功能,该权限被设计为禁止用户和应用程序进程使用。您要么需要一部为指定应用程序提供此功能的手机,要么需要对手机进行 root。我不知道有任何手机提供此功能,因为它会使应用程序破坏系统的安全性。

于 2017-03-28T13:01:00.187 回答