Android 内核 运行 没有 root 的 fanotify?

Android kernel run fanotify without rooting?

我想实现一个 fanotify (supported by kernel > 2.6.37 - shipped in Android 5+) interface for the Android x86 - at first for goldfish emulator. I like to use the tool fsmon 来启动文件系统监视器(一个具有基本结构的 C 程序,用于使用 fanotify 系统调用 fanotify_init(2)fanotify_mark(2))。我通过自己的访问权限扩展了 fsmon 代码。 Android 中的系统应用程序应该能够稍后编辑此权限。 (例如:我可以稍后选择,拒绝哪些文件类型)

问题如下:

"The other big drawback of fanotify is that it currently is root-only (CAP_SYS_ADMIN-only to be more specific). This means that only the root user can request to use the monitoring capabilities provided by fanotify [...]" [source]

root phone 是必须的吗?但是没有另一种方法可以 运行 on/after 内核引导 fsmon 二进制文件 而无需 root 设备吗?

我的第一个想法是在 init.d 每次启动后执行 file/service。但是要使用它,您需要有根 phone。然后我发现了这个:init.d scripts support:

"If your device is rooted the scripts can be executed using superuser permissions, but normal users can do also."

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

接下来的想法是 运行 一个 crontab,但同样 story - root phone。

现在我再深入一点 - linking/execute 内核引导序列中的二进制文件(或 C 代码)。老实说 - 我不是专业的内核开发人员。我知道,我需要 execve systemcall to run a file in kernel. But is my approach right? If this could be the right way, how can I communicate later with the system app? Do I need to create a small "database" from where both sides can access? Which way is the best to access the provided data from the system app? (kernel-userspace-communication: Procfs, Sysfs, Configfs, ...) 启动监视器的正确位置在哪里? (当然 - 在设置文件系统之后)

或者绝对不可能使用 fanotify 而不 root phone?

如果有人能给我一些提示,我会很高兴...

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