16
安全模型
Android中的安全与许可 Android是一个多进程系统,每个应用(以及系统的部分)运行在自己的进程中。很多应用和系统间的安全通过标准Linux工具在进程级执行,比如为应用分配的用户和组标识。额外的细粒度安全特性通过“许可”机制来提供,该机制能够对一个指定进程可实现的特定操作进行约束。 用户标识和文件访问 每个安装在设备上的Android包(.apk)文件,Linux都赋予它一个唯一的用户标识,创建一个沙盒(sandbox)并防止它触及其它应用(同样,也避免其它应用触及它)。这个用户标识是在应用安装在设备上时赋予的,并且通常该应用在设备上的整个生命周期内该标识保持不变。 因为安全enforcement发生在进程级,而正常情况下,每个进程都需要作为不同的Linux用户来运行,任意两个包的代码都不会运行在同一进程中。你可以使用每个包内AndroidManifest.xml中的Manifest标签下的sharedUserId属性来给它们赋予相同的用户标识。通过这样做,为了安全起见,这两个包就会别当作相同的应用,具有相同的用户标识和文件许可。注意:为了保持安全,只有两个具有同样签名(并且请求相同的sharedUserId)的应用才会赋予相同的用户标识. 应用创建的任何文件都会被赋予应用的用户标识,并且,正常情况下不能被其它包访问。当使用getSharedPreferences(String, int), openFileOutput(String, int)或者createDatabase(String, int, int, SQLiteDatabase.CursorFactory)来创建应用时,你可以使用MODE_WORLD_READABLE和/或MODE_WORLD_WRITABLE标志位来允许其它包读/写该文件。当设置了这些标志位,文件虽然始终为你的应用所有,但是它的全局可读/写许可已经被适当设置,所有的应用都可以看到它。

