首页 > 代码库 > Android安全模型之Android安全机制(应用权限)

Android安全模型之Android安全机制(应用权限)

进程沙箱为互不信任的应用程序之间提供了隔离机制,SharedUserID则为具备信任关系的应用程序提供了共享资源的机制。然而,由于用户自行安装的应用程序也不具备可信性,在默认情况下,Android应用程序没有任何权限,不能访问保护的设备API与资源。因此,权限机制是Android安全机制的基础,决定允许还是限制应用程序访问受限的API系统资源。应用程序的权限需要明确定义,在安装时被用户确认,并且在运行时检查,执行,授予和撤销权限。在定制权限下,文件和内容提供者也可以受到保护。

具体而言,应用程序在安装时都分配有一个用户标志(UID)以区别于其他应用程序,保护自己的数据不被其他应用获取。Android根据不同的用户和组,分配不同权限,比如访问网络,访问GPS数据等,这些Android权限在底层映射为Linux的用户与组权限

权限机制的实现层次简要概括如下:

  • 应用层显式声明权限:应用程序包(.apk文件)的权限信息在AndroidManifest.xml文件中通过<permission><premission-group><permission-tree>等标签指定。需要申请某个权限,使用<uses-permission>指定。

  • 权限声明包含权限名称,属于的权限组与保护级别

  • 权限组是权限按功能分成的不同集合,其中包含多个具体权限,例如,发短信,无线上网与拨打电话的权限可列入一个产生费用的权限组。

  • 权限的保护级别分为NormalDangerousSignatureSignatureorsystem四种,不同的级别限定了应用程序行使此权限时的认证方式。比如,Normal只要申请就可用,Dangerous权限在安装时经用户确认才可用,Signature与Signatureorsystem权限需要应用程序必须为系统用户,如OEM制造商或ODM制造商等。

  • 框架层与系统层逐级验证,如果某权限未在AndroidManifest.xml中声明,那么程序运行时会出错。通过命令行调试工具logcat查看系统日志可发现需要某权限的错误信息。

  • 共享UID的应用程序可与系统另一用户程序同一签名,也可同一权限。一般可在AndroidManifest文件中设置sharedUserId,如android:sharedUserId="android.uid.shared",以获得系统权限。但是,这种程序属性通常由OEM植入,也就是说对系统软件起作用。

Android的权限管理模块在2.3版本之后,即使有root权限,仍无法执行很多底层命令和API。例如,su到root用户,执行ls等命令都会出现没有权限的错误。

Android安全模型之Android安全机制(应用权限)