Android开发指南 框架主题 安全和许可
2010-06-17 03:18:00 来源:WEB开发网安全和许可Security and Permissions
Android是一个多进程系统,每个应用程序(以及系统的部分)运行在它自己的进程里。大多数程序和系统之间的安全性通过基础的Linux机制在进程级别进行支持,如分配给应用程序的用户和群组IDs。更多细化的安全特性通过“许可”机制来提供,它实施对一个进程能够执行的特定操作方面的限制,和对于每个URI的特定数据段的特许访问的授权。
安全架构Security Architecture
Android安全架构中的一个设计要点是在默认情况下应用程序没有权限执行对其它应用程序、操作系统或用户有害的操作。这些操作包括读/写用户的隐私数据(例如联系方式或e-mail),读/写其它应用程序的文件,执行网络访问,保持设备激活,等等。
应用程序的进程是一个安全的沙箱。它不能干扰其它应用程序,除非明确声明它需要额外的基本的沙箱不能提供的功能的许可权。这些许可权请求能够被不同方式的操作所处理,常见的是基于证书和用户提示的自动允许或禁止。应用程序的权限请求被声明为静态的,这样后面在安装时能够知道它们而且不会被改变。
应用程序签名Application Signing
所有的Android应用程序(.apk文件)必须用证书进行签名认证,而这个证书的私钥是由开发者保有的。该证书可以用以识别应用程序的作者。该证书也不需要被认证机构签名。Android应用程序完全允许而且一般也都是使用自签名(self-signed)证书。证书是用于在应用程序之间建立信任关系,而不是用于控制程序是否可以安装。签名影响安全性的最重要的方式是通过决定谁可以进入基于签名的许可,以及谁可以共享用户IDs。
用户IDs和文件访问User IDs and File Access
每一个Android应用程序(.apk文件)都会在安装时就分配一个独有的Linux用户ID,这就为它建立了一个沙盒,使其不能与其他应用程序进行接触(也不会让其它应用程序接触它)。这个用户ID会在安装时分配给它,并在该设备上一直保持同一个数值。
由于安全性限制措施是发生进程级,所以两个package中的代码不会运行在同一个进程当中,他们要作为不同的Linux用户出现。我们可以通过使用AndroidManifest.xml文件中的manifest标签中的sharedUserId属性,来使不同的package共用同一个用户ID。通过这种方式,这两个package就会被认为是同一个应用程序,拥有同一个用户ID(实际不一定),并且拥有同样的文件存取权限。注意:为了保持安全,只有当两个应用程序被同一个签名签署的时候(并且请求了同一个sharedUserId)才会被分配同样的用户ID.
更多精彩
赞助商链接