如何在不root ROM的情况下,从源代码中授予特定应用程序root访问权限?

8

我正在从源代码编译Android ROM,有一个应用程序我希望它被预装并以root权限运行。

如何授予这个特定应用程序root访问权限,而无需对整个ROM进行root?


3
将其安装到系统/应用程序而不是数据/应用程序。 - Raghav Sood
2
将其安装到系统/应用程序中并不会自动授予它root访问权限。 - Charles Liu
1个回答

10

希望您不需要root权限...

典型的原生Android ROM只授予极少数事物root权限,符合最小特权原则。相反,应用程序被授予它们所需的精确权限。

为什么您需要此应用程序拥有root权限?您应该首先查看所有未发布的Android内部权限列表,看看其中是否有一个可以实现您想要的功能。由于您正在构建系统应用程序,因此甚至可以使用其他应用程序通常无法使用的signature权限。您只需要确保您的应用程序由构建Android ROM的密钥签名-然后您可以将其与ROM一起分发或单独分发,它仍将具有您所需的权限访问。

这种方法的优点是:

  • 如果您的应用程序受到攻击或有漏洞,影响将受到限制。
  • 您的实际Java代码具有这些权限,因此无需编写繁琐的命令行。

因此,如果可能,请以这种方式完成您的任务。

但如果你真的需要root权限...

如果你确实需要root权限,那么事情就变得棘手了。

你有三个选择。按优先级排序如下:

  • 添加一个新的系统服务。
  • 添加一些替代的setuid-root二进制文件,并进行必要的修改以满足你的需求。
  • 修改su二进制文件,以检查调用它的确切身份。

如果你确实需要root权限,我会添加一个新的系统服务。这可以作为root运行。然后,你需要添加适当的附加API,以便你的应用程序可以调用它 - 并且权限可以是signature-级别,这样只有你的系统应用程序才能调用它。这是在Android领域中正确的架构方式。

第二或第三个选项涉及创建一些命令行工具来执行你所需的操作,但我不知道在保护应用程序的情况下,它们如何检查调用者的身份。允许任何应用程序调用此功能可能是可以接受的。如果是这样,那么添加一个新的setuid-root可执行文件可能是解决方法。但是,正如我所说,我不知道如何阻止其他应用程序运行它。


1
把应用程序放到系统/应用程序路径中,这样做会使它支持root吗? - android developer
1
很遗憾不是这样!这意味着如果应用程序请求这些权限,它将被授予“signatureOrSystem”权限。但是使用系统密钥对应用程序进行签名同样容易,这也会导致授予这些权限 - 加上“signature”权限。 - Adrian Taylor
没错,系统应用和普通应用并没有什么不同,除了它们能够通过仅限“签名或系统”权限访问的API之外,还有一个事实,即它们由ROM证书签名,因此也可以使用“签名”功能访问系统提供的API。另一方面,系统服务可能会以root身份运行,但在这种意义上,服务与您可以在apk内运行的“服务”略有不同。 - Adrian Taylor
你如何使用特殊证书进行签名? - android developer
Adrian,我想和你谈谈关于这个问题的事情,我已经更新了我的SU.C文件,编译也通过了,但是它没有给我的应用程序提供root访问权限,请帮忙。 - Neji
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接