Uid 1000
启动者的Uid是一个System Uid(Android规定android.system.uid=1000,具有该Uid的application,我们称之为获得Root权限)
remount uid
【转】Android Fuse and Runtime Permissions
应用程序 runtime 授权
当被授予运行时权限READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE时,vold 在应用的名字空间上,通过 bind mount 来更新视图。读写storage 运行时权限授权的入口代码是这个:
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
grantRuntimePermission
--> onExternalStoragePolicyChanged
-->remountUidExternalStorage
-->mConnector.execute("volume", "remount_uid", uid, modeName);
↓
-->vm->remountUid(uid, mode)
上述核心代码和 zygote 中很类似,不再赘述,至此,才算彻底搞清楚了 Androd M 在外置存储上权限控制的改变和多用户多进程下的安全原理。
系统使用 setns() 函数来实现上述特性。