Android内核运行fanotify而不生根?

时间:2017-03-28 10:26:55

标签: android c linux linux-kernel fanotify

我想为Android x86实现一个fanotify(由内核> 2.6.37支持 - 在Android 5+中提供)接口 - 首先是金鱼模拟器。我喜欢使用工具fsmon来启动文件系统监视器(具有基本结构的C程序,以使用fanotify系统调用fanotify_init(2)fanotify_mark(2))。我通过自己的访问权限扩展了fsmon代码。此权限应该可以稍后由Android中的系统应用进行编辑。 (例如:我可以稍后选择,拒绝哪些文件类型)

问题在于:

  

“fanotify的另一大缺点是它目前只是root用户(仅限CAP_SYS_ADMIN)更具体。这意味着只有root用户可以请求使用fanotify提供的监控功能[...] “   [source]

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

我的第一个想法是在init.d每次启动后执行文件/服务。但要使用它,你需要一个root电话。然后我发现了这个:init.d scripts support

  

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

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

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

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

绝对不可能使用fanotify 而不用root 手机?

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

1 个答案:

答案 0 :(得分:1)

您正在尝试使用需要权限(CAP_SYS_ADMIN或root)的功能,该权限由用户和应用程序进程按设计隐瞒。您需要一部能够为指定应用程序提供此功能的手机,或者您需要手机根。我不知道任何提供此功能的手机电话,因为它会使应用程序破坏系统的安全性。