沙箱(sandbox)是為執(zhí)行中的程序提供隔離環(huán)境的一種安全機(jī)制。它通過(guò)嚴(yán)格控制執(zhí)行的程序所訪問(wèn)的資源,以確保系統(tǒng)的安全罐监。
1 基于Linux的權(quán)限模型
Android sandbox本質(zhì)是為了實(shí)現(xiàn)不同應(yīng)用程序之間的互相隔離梳庆,而這種隔離策略是通過(guò)讓不同的應(yīng)用程序運(yùn)行于各自己的虛擬機(jī)進(jìn)程中實(shí)現(xiàn)的。
UID/GID權(quán)限模型
Android中對(duì)文件資源的訪問(wèn)仍遵循Linux的UID/GID權(quán)限模型方式進(jìn)行權(quán)限控制鳞溉。Android將所有uid和gid資源統(tǒng)一為AID(system/core/include/private/android_filesystem_config.h)瘾带。應(yīng)用程序隔離
類似Linux中的用戶隔離策略(UID識(shí)別用戶,確定訪問(wèn)權(quán)限)熟菲,Android中通過(guò)DAC權(quán)限模型來(lái)實(shí)現(xiàn)應(yīng)用程序的隔離(UID識(shí)別應(yīng)用程序看政,確定權(quán)限權(quán)限)朴恳。Android在安裝應(yīng)用程序時(shí)向其分配UID,并保持不變允蚣。
2 Android沙箱模型
2.1 應(yīng)用程序在獨(dú)立進(jìn)程(獨(dú)享UID)
沙箱內(nèi)的應(yīng)用程序運(yùn)行于獨(dú)立的虛擬機(jī)進(jìn)程中于颖,該進(jìn)程獨(dú)享應(yīng)用程序的資源且無(wú)法訪問(wèn)系統(tǒng)和其他應(yīng)用程序的資源。
2.2 應(yīng)用程序在共享進(jìn)程(共享UID)
任何系統(tǒng)無(wú)法避免應(yīng)用程序間共享資源的需求嚷兔,在Android系統(tǒng)中共享UID是實(shí)現(xiàn)資源共享的一種方式森渐。
Android應(yīng)用程序中要實(shí)現(xiàn)UID共享需要滿足以下之一:
- 共享的應(yīng)用程序配置相同的manifest屬性(即添加android:sharedUserId)
- 共享的應(yīng)用做相同的簽名(即Android.mk中增加LOCAL_CERTIFICATE)
3 總結(jié)
- Android是一個(gè)多用戶的Linux系統(tǒng),其每一個(gè)應(yīng)用程序都是一個(gè)用戶
- 系統(tǒng)默認(rèn)賦予每個(gè)應(yīng)用以唯一的UID冒晰,只有系統(tǒng)授權(quán)的UID可訪問(wèn)該應(yīng)用的所有文件
- 每個(gè)進(jìn)程都有獨(dú)立的虛擬機(jī)同衣,因此應(yīng)用代碼運(yùn)行于相互隔離的環(huán)境中
- 每個(gè)應(yīng)用運(yùn)行于其進(jìn)程內(nèi),Android系統(tǒng)來(lái)啟動(dòng)和關(guān)閉該應(yīng)用
- 應(yīng)用程序可通過(guò)共享UID和請(qǐng)求授權(quán)實(shí)現(xiàn)數(shù)據(jù)共享和訪問(wèn)系統(tǒng)服務(wù):
1 https://developer.android.com/guide/components/fundamentals.html
2 http://blog.csdn.net/ljheee/article/details/53191397