Android顺其自然地继承了Linux内核的安全机制,同时结合移动终端的具体应用特点,进行了许多有益的改进与提升。

window与unix/linux等传统操作系统以用户为中心,假设用户之间是不可信的,更多考虑如何隔离不同用户对资源(存储区域与用户文件,内存区域与用户进程,底层设备等)的访问。在Android系统中,假设应用软件之间是不可信的,甚至用户自行安装的应用程序也是不可信的,因此,首先需要限制应用程序的功能,也就是将应用程序置于“沙箱”之内,实现应用程序之间的隔离,并且设定允许或拒绝API调用的权限,控制应用程序对资源的访问,如访问文件,目录,网络,传感器等。

Android扩展了Linux内核安全模型的用户与权限机制,将多用户操作系统的用户隔离机制巧妙地移植为应用程序隔离在linux中,一个用户标识(UID)识别一个给定用户在Android上,一个UID则识别一个应用程序在安装应用程序时向其分配UID。应用程序在设备上存续期间内,其UID保持不变。仅限用于允许或限制应用程序(而非用户)对设备资源的访问。如此,Android的安全机制与Linux内核的安全模型完美衔接!不同的应用程序分别属于不同的用户,因此,应用程序运行于自己独立的进程空间,与UID不同的应用程序自然形成资源隔离,如此便形成了一个操作系统级别的应用程序“沙箱”

应用程序进程之间,应用程序与操作系统之间的安全性由Linux操作系统的标准进程级安全机制实现。在默认状态下,应用程序之间无法交互,运行在进程沙箱内的应用程序没有被分配权限,无法访问系统或资源。因此,无论是直接运行于操作系统之上的应用程序,还是运行于Dalvik虚拟机的应用程序都得到同样的安全隔离与保护,被限制在各自“沙箱”内的应用程序互不干扰,对系统与其他应用程序的损害可降至最低。Android应用程序的“沙箱”机制如下图,互相不具备信任关系的应用程序相互隔离,独自运行:

Android安全模型之Android安全机制(进程沙箱)

在很多情况下,源自同一开发者同一开发机构的应用程序,相互间存在信任关系。Android系统提供一种所谓共享UID(SharedUserID)机制,使具备信任关系的应用程序可以运行于同一进程空间通常 ,这种信任关系由应用程序的数字签名确定,并且需要应用程序在manifest文件中使用相同的UID共享UID的应用程序进程空间如下图(应用程序数字签名将在后面详细讲述):

Android安全模型之Android安全机制(进程沙箱)



更多相关文章

  1. Android 用户界面---菜单(Menus 一)
  2. Android进程
  3. android 使用html做应用程序界面初探
  4. 关于android应用程序签名的一些事儿
  5. Android应用程序的消息处理机制

随机推荐

  1. 安卓数据库sqlite增删查改—模拟用户登录
  2. 什么是ANR,如何避免?
  3. Android对Linux内核的改动你知道多少
  4. android SQLite实现本地登录注册功能,SQL
  5. Android(安卓)属性设置android:noHistory
  6. Android工程下build target,minSdkVersion
  7. android BLE Peripheral 模拟 ibeacon 发
  8. Android shap 控件美化
  9. Android各个版本的名称和更新
  10. Android应用开发———Android中的常用UI