为了学习,我最近跳入了android开发教程并编写了自己的应用程序。我想以适当的方式在我的代码中获得root权限。因此,不是通过调用/system/xbin/su
而是使用类似seteuid(0)
的方法。不幸的是,seteuid方法对我不起作用。
我正在以root用户身份在真实设备上测试应用程序,并启用了调试模式,而且很清楚地看到,当使用对/system/xbin/su
的调用时,我的应用程序请求系统的root权限,而seteuid和seteguid(setuid和setguid不会发生)也不起作用,但是我不希望那些人这样做,因为它们只能降低权限)。
请提供有关在哪里寻找适当的代码实现以请求root权限的建议,就像它会成为顶尖开发人员一样。也许一些本地api调用?还是每个人都只是使用su
呼叫来获得所需的访问权限?
最佳答案
在Linux中提升特权的通常方法-即以比已登录用户更大的特权运行应用程序-是在可执行文件上设置SUID标志(例如chmod ug + s ...)。这将使该过程采用二进制文件所有者(通常是root)的身份,而不是已登录用户的身份。
要在Android上有效地执行操作,即使在有根设备上也很困难。首先,您将无法使用包含具有SUID权限的二进制文件的常规(APK)机制安装应用。其次,Android应用程序不是通常意义上的可执行文件-单个可执行文件可处理所有应用程序的启动。
不过,如果要在命令行上进行试验,则应该至少在某些文件系统位置中的二进制文件上设置SUID标志。
如果您拥有扎根的Android,那么很可能已经有一些基础结构可以控制特权提升。 “ su”命令很可能会起作用(因为将有内核mod使其起作用),并且将为它提供凭据或其他方式来控制哪些应用程序可以使用它。我相信,正如您所建议的那样,在植根于Android的应用程序中,调用“ su”是进行特权提升的常用方法。但是,它充满了困难。有一个文档https://su.chainfire.eu/解释了通常在有根的Android设备中如何实现“ su”,并提供了有关如何正确使用它的一些指导。