我想实现一个fanotify(内核支持>2.6.37-在Android 5+中提供)Android x86接口-首先为goldfish模拟器。我喜欢使用工具fsmon启动文件系统监视器(一个具有基本结构的C程序使用fanotify syscallsfanotify_init(2)
和fanotify_mark(2)
)。我通过自己的访问权限扩展了fsmon代码。此权限应该可以在以后由Android中的系统应用程序编辑。(例如:我可以稍后选择,拒绝哪些文件类型)
问题如下:
“fanotify的另一个大缺点是,它目前仅限于根目录(CAP_SYS_ADMIN-only更具体一些)。这意味着只有根用户才能请求使用fanotify[…]提供的监视功能。”
[source]
有根电话是必须的吗?但是,在内核启动fsmon二进制文件后,没有其他方法可以在不启动设备的情况下运行它吗?
我的第一个想法是在每次启动后通过init.d
执行一个文件/服务。但要使用它,你需要一个有根的电话。然后我发现了这个:init.d scripts support:
如果您的设备是根目录,则可以使用超级用户权限执行脚本,但普通用户也可以这样做
但我不明白这是如何工作的(我还没有测试过),这可能是一个可行的解决方案吗?对于在其他设备上运行它(不安装此应用程序),我需要了解应用程序如何绕过此问题。init.d
在用户空间中执行,甚至可以在那里以根用户身份运行监视器吗?
下一个想法是运行一个crontab,但是根为story的手机。
现在我再深入一层-链接/执行内核引导序列中的二进制(或c代码)。。我必须诚实-我不是专业的内核开发人员。我知道,我需要execve系统调用来运行内核中的文件。但我的方法对吗?如果这是正确的方式,我以后如何与系统应用程序通信?我需要创建一个小的“数据库”从那里双方都可以访问?从系统应用程序访问提供的数据的最佳方式是什么?(kernel-userspace-communication: Procfs, Sysfs, Configfs, ...)哪里是启动显示器的正确位置?(当然-在设置文件系统之后)
或者说,如果不使用fanotify,就不可能不使用手机?
如果有人能给我一些建议我会很高兴。。。
最佳答案
您正在尝试使用一个功能,该功能需要通过设计从用户和应用程序进程中保留的权限(CAP_SYS_ADMIN或root)。您要么需要一个为指定应用程序提供此功能的电话,要么需要根目录电话。我不知道有哪款手机提供这种功能,因为它会使应用程序破坏系统的安全性。
关于android - Android内核在没有生根的情况下运行fanotify?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43067075/