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

版权所有,禁止匿名转载;禁止商业使用。

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

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

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

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


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


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


?权限的保护级别分为 Normal , Dangerous , Signature 与 Signatureorsystem 四种,不同的级别限定了应用程序行使此权限时的 认证方式 。比如,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等命令都会出现没有权限的错误。

0 0