![](/img/trans.png)
[英]how to get access of android root directory (/system/app) programatically?
[英]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.