dac*_*ngy 5 security permissions android
此问题之前已经在Android如何强制执行权限?.虽然讨论很好,但问题仍未得到充分解答.
在开发环境中,当应用程序尝试执行需要未在AndroidManifest.xml中声明的权限的操作时,会引发异常.那么运行时系统如何实现运行时检查呢?
我想这很可能是在核心框架中完成的,可能需要也可能不需要本机代码的支持.但我不知道AOSP中的哪些源代码文件与此相关.
zap*_*apl 14
Android使用了许多标准的Linux(-kernel?)机制,特别是在硬件限制方面.
每个应用程序都会分配一个新的唯一(Linux-)用户ID,每当创建应用程序进程时,系统都会使用该用户ID创建它.除非您删除该应用,否则ID将永远不会更改.这意味着,为了访问较低的系统级别,您的应用程序将显示为特定用户,并且与用户协作的每个(Linux-)权限系统也将应用于您的应用程序.
如果您WRITE_EXTERNAL_STORAGE在清单中请求,您的应用程序也将成为sdcard_rw具有写入该存储的权限的(Linux-)组(已调用)的成员.强制执行文件系统的权限只允许写入system用户(=所有者)和sdcard_rw组,其他任何人(=其他)只能读取.另请参阅Google阻止应用写入SD卡
通过这样做,除了设置应用程序启动后产生的进程的正确UID/GID以及其余部分在较低级别处理时,Android几乎不做任何事情.不属于某个组的应用程序根本无法访问某些硬件.
权限列表<>组映射:platform.xml
也有一些是基于您的应用程序的任何签字和/或简单地通过查找您的应用程序所要求的权限一些(Android软件)的限制:如ContextImpl#的checkPermission() -但这些权限必须在每一个入口点来进行检查允许受限操作的代码.
人们不时会发现以编程方式打开GPS的方法,因为这样的检查在某处丢失了.