如何在Android的安全权限在运行时检查?(how are android security pe

2019-06-24 01:41发布

这个问题一直在问过怎样的Android强制执行的权限? 。 虽然讨论有好的,问题仍然没有完全回答。

在开发环境中,当应用程序试图做一些事情,需要在AndroidManifest.xml中未声明的权限抛出异常。 那么,如何在系统运行时执行运行时检查?

我想这是在核心框架,这可能会或可能不会需要从本地代码支持最有可能完成的。 但我不知道什么是源代码AOSP文件是有关这一点。

Answer 1:

Android使用了很多标准Linux的(-kernel?)机制,尤其是当它涉及到硬件的限制。

每个应用程序都被分配一个新的唯一(Linux的)用户ID和每当创建应用程序过程中,系统与该用户ID创建它。 该ID将永远不会改变,除非你删除的应用程序。 这意味着访问你的应用程序会出现一个特定的用户,每(Linux的)权限系统,该系统与用户的工作也将适用于您的应用程序在较低的系统水平。

如果您要求WRITE_EXTERNAL_STORAGE在清单您的应用程序也将成为(Linux的)组(称为成员sdcard_rw ),有权限写入到该存储。 在文件系统中的权限被强制执行只允许写入system用户(=所有者)和sdcard_rw基,其他人(其它=)可以仅读出。 又见是谷歌阻止应用程序写入SD卡

通过这样做,Android有几乎做什么,除了设置它产生一次应用程序启动时,其余的下级处理过程的正确的UID / GID的。 应用不属于某一组的成员根本就不能访问某些硬件。

权限<>组映射的列表: platform.xml

也有一些是基于您的应用程序的任何签字和/或简单地通过查找您的应用程序所要求的权限一些(Android软件)的限制:如ContextImpl#的checkPermission() -但这些权限必须在每一个入口点来进行检查代码,允许限制的动作。

不时人们发现上GPS编程,因为像这样的检查某处遗失的方式如转弯。



Answer 2:

关于你的第二个段落,“例外”的运行故障。 权限并不在构建时执行的,只有在运行时。

访问硬件,低级别运行的系统资源,和系统文件通常需要该应用的用户ID是它可以由包管理器为具有相应的Android许可的结果,被分配适当的组的成员。 (那熟悉的例子是网络套接字,并且其zapl提到的SD卡的写入,而且仅在系统之类的东西直接谈话的GSM调制解调器或读取原始触摸屏坐标)。

对于大多数机器人操作由调用库函数,其是用于进程间通信,以在不同的进程中运行的服务存根的方式来完成,该平台代码在多个特权进程中运行上与封装的IPC请求检查的接收端经理找出如果调用应用程序拥有必要的Android许可。

许多特殊权限仅适用于与系统签名进行签名的应用程序 - 即使另一个应用程序声称那些在其清单,他们将不会被包管理器应用。



文章来源: how are android security permissions checked at run-time?