安全许可

来源:互联网 发布:神的记事本小说9淘宝 编辑:程序博客网 时间:2024/04/29 21:55

http://blog.csdn.net/iefreer/archive/2009/09/10/4537371.aspx

Android是一个多进程系统,每个应用程序(以及系统的部分)运行在它自己的进程里。大多数程序和系统之间的安全性通过基础的Linux机制在进程级别进行支持,如分配给应用程序的用户和群组IDs。更多细化的安全特性通过“许可”机制来提供,它实施对一个进程能够执行的特定操作方面的限制,和对于每个URI的特定数据段的特许访问的授权。

 

Android安全架构中的一个设计要点是在默认情况下应用程序没有权限执行对其它应用程序、操作系统或用户有害的操作。这些操作包括读/写用户的隐私数据(例如联系方式或e-mail),读/写其它应用程序的文件,执行网络访问,保持设备激活,等等。

 

每一个Android应用程序(.apk文件)都会在安装时就分配一个独有的Linux用户ID,这就为它建立了一个沙盒,使其不能与其他应用程序进行接触(也不会让其它应用程序接触它)。这个用户ID会在安装时分配给它,并在该设备上一直保持同一个数值。

由于安全性限制措施是发生进程级,所以两个package中的代码不会运行在同一个进程当中,他们要作为不同的Linux用户出现。我们可以通过使用AndroidManifest.xml文件中的manifest标签中的sharedUserId属性,来使不同的package共用同一个用户ID。通过这种方式,这两个package就会被认为是同一个应用程序,拥有同一个用户ID(实际不一定),并且拥有同样的文件存取权限。注意:为了保持安全,只有当两个应用程序被同一个签名签署的时候(并且请求了同一个sharedUserId)才会被分配同样的用户ID.

所有存储在应用程序中的数据都会赋予一个属性-该应用程序的用户ID,这使得其他package无法访问这些数据。当通过这些方法getSharedPreferences(String, int), openFileOutput(String, int), 或者openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory)来创建一个新文件时,你可以通过使用MODE_WORLD_READABLE/MODE_WORLD_WRITEABLE标志位来设置是否允许其他package来访问读写这个文件。当设置这些标志位时,该文件仍然属于该应用程序,但是它的全局读写权限已经被设置,使得它对于其他任何应用程序都是可见的。

 

 

 

当我们需要获取某个权限的时候就必须在我们的manifest文件中声明<uses-permission>

通常情况下我们不需要为自己的应用程序声明某个权限,除非你提供了供其他应用程序调用的代码或者数据。这个时候你才需要使用<permission> 这个标签。很显然这个标签可以让我们声明自己的权限。

<permission
        android:name="com.android.launcher.permission.WRITE_SETTINGS"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="normal"
        android:label="@string/permlab_write_settings"
        android:description="@string/permdesc_write_settings"/>

创建了一个权限。

 <provider
            android:name="LauncherProvider"
            android:authorities="com.android.launcher.settings"
            android:writePermission="com.android.launcher.permission.WRITE_SETTINGS"
            android:readPermission="com.android.launcher.permission.READ_SETTINGS" />
在PROVIDER里增加这个权限,表明谁想用这个权限旧的声明

 <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />

原创粉丝点击