繁体   English   中英

如何在Android的系统应用程序上扎根工作?

[英]How can I get root to work for system app in Android?

我需要将nfs共享从系统应用程序挂载到sdcard或mnt文件夹,但是mount仅在授予root访问权限的情况下起作用。 我怎样才能做到这一点? (这不仅是一个程序,没有root也不能运行。例如,我还需要root才能使用dd刷新系统上的自定义恢复)

我下载了AOSP棉花糖源,并在/ system / xbin文件夹中添加了su及其所有必需的内容。 当我尝试运行su它向我显示"Permission denied" ,但通过adb shell根目录可以正常工作(我可以在xbin文件夹中运行它)。 我需要添加什么权限才能以root用户身份运行系统应用程序? 谢谢。

使用平台密钥构建并签名的系统和系统应用程序。 我正在测试的应用程序在Manifest.xml具有sharedUid=android.uid.system属性

AOSP提供的su有限制,以确保您是调用它的root或shell用户。 此检查位于https://android.googlesource.com/platform/system/extras/+/master/su/su.c#85

您始终可以将系统UID( AID_SYSTEM )添加到此检查; 但是,这会给具有系统UID的所有应用程序/进程授予一揽子根特权,从而带来安全风险。 如果您接受这些风险并且想要一个简单的解决方案,那么我只会在su.c中将系统用户添加到此行中。

我建议重新评估您的用例,并可能编写一个本机守护程序/服务,以公开应用程序只能执行所需操作的功能。 然后,您可以使用更高级别的android权限以及本机守护程序本身的POSIX功能来实施这些操作。

唯一适用于我的解决方案是init作为根进程启动的服务器二进制文件。 我编写了简单的服务器二进制文件,可以从Java端通过LocalSocket进行连接,并且可以向它发送一些命令。 为了在系统启动时启动服务器二进制文件,我在init.rc脚本中添加了以下init.rc行:

service suservice /system/bin/suservice
   class core
   user root
   group root
   socket suservice stream 0600 system system

在Java方面,我编写了一个简单的库,该库可通过回调接口工作,并从此服务接收数据,如果出现问题,则返回错误。

现在,只有以system:system开头的应用程序可以使用此本地套接字运行root命令。 用户应用收到扩展Permission denied

PS现在根本不需要运行或保留su二进制文件,因为服务器二进制文件已作为root运行。 我现在可以从系统中完全删除su二进制文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM