android study 15 sandbox
android安全模型
android沙箱模型
对于android来说,沙箱模型就是进程隔离和权限管理那一套。每个android应用在安装时被PMS赋予独特的用户标志(UID),一个用户ID识别一个应用程序,根据这个id来决定应该允许还是限制程序访问设备资源。每个应用程序都独立运行在虚拟机的沙箱进程中。
android沙箱可以用来实现应用程序之间的分离,以允许或拒绝一个应用程序访问资源,为了达到这个目的,android会使用一些Linux实用工具,比如与用户相关的用户和组ID,以及权限,来实现程序被允许的操作。
Android应用进程运行在各自的进程上,被分配唯一的用户ID,运行在基本沙箱进程中的应用程序没有被分配权限,因而防止了此类应用访问资源。但是Android程序可以通过manifest来申请权限,或者与其他受信任的应用运行在同一进程中,从而共享其数据和代码。
不同应用想在一个进程中,首先使用相同私钥签名,然后在manifest里给他们申请分配相同的用户id,这可以通过用相同的值/名定义 manifest 属性 android:sharedUserId 来做到。
Android系统分区与加载
Android设备的分区包括系统分区,数据分区,Cache分区,以及SD卡分区,具体如下:
1.系统分区通常是只读分区,里面有系统内核,系统函数库,应用框架,系统应用程序等。是厂商在出厂时写入。当出现安全问题时,可以进入安全模式,只加载系统分区不加载数据分区,隔离第三方应用带来的风险。
/system/app目录存放系统自带应用
/system/lib存放系统库函数
/system/bin与/system/xbin存放系统管理命令
/system/framework存放安卓框架的jar文件
2.数据分区用来存储用户数据与应用程序,出现安全问题时可以不加载数据区,或者直接将数据区格式化。
/data/data存放apk程序的数据,每个APK在/data/data/apk-package目录下有自己专属目录,只能在该目录中进行操作。
/data/app存放用户安装的apk
/data/system下存放了packages.xml,packages.list,appwidgets.xml等文件,记录安装的软件以及widget信息。
/data/misc下存放了WIFI账号,VPN设置等信息
References
https://cloud.tencent.com/developer/article/1799705
http://images.china-pub.com/ebook3800001-3805000/3800568/ch02.pdf