- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android 平台授权管理分析文档
By jeffliu
概述
Android是一个权限分离的系统。这是利用Linux已有的权限管理机制,通过为每一个Application分配不同的uid和gid,从而使得不同的Application之间的私有数据和访问(native以及java层通过这种sandbox机制,都可以)达到隔离的目的。与此同时, Android还在此基础上进行扩展,提供了permission 机制,它主要是用来对Application可以执行的某些具体操作进行权限细分和访问控制,同时提供了per-URI permission机制,用来提供对某些特定的数据块进行ad-hoc 方式的访问。
Permission实现机制分析
uid 、gid 、gids
Android的权限分离的基础是建立在Linux已有的uid、gid、gids基础上的。
Uid: Uid Android在安装一个应用程序,就会为它分配一个uid(参考PackageManagerService中的newUserLP实现)。其中普通Android应用程序的uid是从10000开始分配(参见Process.FIRST_APPLICATION_UID),10000以下是系统进程的uid 。
Gid:对于普通应用程序来说,gid等于uid。由于每个应用程序的uid 和gid 都不相同,因此不管是native层还是java层都能够达到保护私有数据的作用。
GIDS:gids是由框架在Application安装过程中生成,与Application申请的具体权限相关。如果 Application申请的相应的permission被granted,而且中有对应的 gids,那么这个 Application的gids中将包含这个gids 。
Uid、gid、gids的设置过程在ActivityManagerService中的startProcessLocked。在通过 zygote 来启动一个process时,直接将uid传给给了gid。再通过zygote来fork出新的进程(zygote.java 中的forkAndSpecialize),最终在native层进行gid和uid和gids的设置。
2.2. permission
一个权限主要包含三个方面的信息:权限的名称;属于的权限组;保护级别。一个权限组是指把权限按照功能分成的不同的集合。每一个权限组包含若干具体权限,例如在 COST_MONEY 组中包含 android.permission.SEND_SMS , android.permission.CALL_PHONE 等和费用相关的权限。
每个权限通过protectionLevel来标识保护级别: normal , dangerous , signature, signatureorsystem。不同的保护级别代表了程序要使用此权限时的认证方式。normal的权限只要申请了就可以使用; dangerous 的权限在安装时需要用户确认才可以使用;signature和signatureorsystem 的权限需要使用者的app和系统使用同一个数字证书。
Package的权限信息主要通过在AndroidManifest.xml中通过一些标签来指定。如 permission 标签, permission-group 标签 permission-tree 等标签。如果package需要申请使用某个权限,那么需要使用use-permission标签来指定。
【注:android包管理服务_PackageManagerService_源码分析.pdf(来自网络)】
2.3 cm permission实现原理分析
Cm将授权管理集成到android原生的applicationManager应用中。在进程及服务详情里禁用和启用相应的权限。
CM设置对应的代码为packages/apps/CMParts
从其AndroidManifest.xml中可以看出它需要有system的权限这样才能保证它可以操纵permission相关的framework提供的接口和服务
在frameworks/base/core/java/android/widget/中增加了处理permission on/off的新的类:AppSecurityEditablePermissions
对PackageManager.java/PackageManagerService.java等frameworks/base/core/的PM的逻辑进行了修改GrantedPermissions/SharedUserSetting中增加了新的revokedPermissions和effectivePermissio
您可能关注的文档
- 2014年河北省普通高校招生文理科一分一档统计表.doc
- 2014年河北高考文理科一分一档统计表(.pdf
- 2014广东卷完型阅读写作部分.docx
- 2015-OSPF(负载聚合)-05.ppt
- 2015希尔顿国际香港分店开业庆典活动企划策划方案.doc
- 2015年辽宁师范大学翻译硕士(MTI)考研参考书,考研报录比.pdf
- 2017年一级建造师建筑工程管理与实务真题电子版.doc
- 2017年上半年数据库系统工程师考试真题(上午题).pdf
- 2017年北外翻译硕士日语考研真题、考研真题解析、考研参考书目.pdf
- 2017年北电表演学院电影表演创作及理论(学术型)考研真题答案解析及考研重点难点.pdf
文档评论(0)