Uid 1000
啟動者的Uid是一個System Uid(Android規(guī)定android.system.uid=1000,具有該Uid的application碉就,我們稱之為獲得Root權(quán)限)
remount uid
【轉(zhuǎn)】Android Fuse and Runtime Permissions
應(yīng)用程序 runtime 授權(quán)
當被授予運行時權(quán)限READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE時仆嗦,vold 在應(yīng)用的名字空間上虽抄,通過 bind mount 來更新視圖伊脓。讀寫storage 運行時權(quán)限授權(quán)的入口代碼是這個:
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 在外置存儲上權(quán)限控制的改變和多用戶多進程下的安全原理喜庞。
系統(tǒng)使用 setns() 函數(shù)來實現(xiàn)上述特性诀浪。