標籤:android style io ar color 使用 sp strong 檔案
進程沙箱為互不信任的應用程式之間提供了隔離機制,SharedUserID則為具備信任關係的應用程式提供了共用資源的機制。然而,由於使用者自行安裝的應用程式也不具備可信性,在預設情況下,Android應用程式沒有任何許可權,不能訪問保護的裝置API與資源。因此,許可權機制是Android安全機制的基礎,決定允許還是限制應用程式訪問受限的API和系統資源。應用程式的許可權需要明確定義,在安裝時被使用者確認,並且在運行時檢查,執行,授予和撤銷許可權。在定製許可權下,檔案和內容提供者也可以受到保護。
具體而言,應用程式在安裝時都分配有一個使用者標誌(UID)以區別於其他應用程式,保護自己的資料不被其他應用擷取。Android根據不同的使用者和組,分配不同許可權,比如訪問網路,訪問GPS資料等,這些Android許可權在底層映射為Linux的使用者與組許可權。
許可權機制的實現層次簡要概括如下:
應用程式層顯式聲明許可權:應用程式套件組合(.apk檔案)的許可權資訊在AndroidManifest.xml檔案中通過<permission>,<premission-group>與<permission-tree>等標籤指定。需要申請某個許可權,使用<uses-permission>指定。
許可權聲明包含許可權名稱,屬於的許可權組與保護層級。
許可權組是許可權按功能分成的不同集合,其中包含多個具體許可權,例如,發簡訊,無線上網與撥打到電話的許可權可列入一個產生費用的許可權組。
許可權的保護層級分為Normal,Dangerous,Signature與Signatureorsystem四種,不同的層級限定了應用程式行使此許可權時的認證方式。比如,Normal只要申請就可用,Dangerous許可權在安裝時經使用者確認才可用,Signature與Signatureorsystem許可權需要應用程式必須為系統使用者,如OEM製造商或ODM製造商等。
架構層與系統層逐級驗證,如果某許可權未在AndroidManifest.xml中聲明,那麼程式運行時會出錯。通過命令列調試工具logcat查看系統日誌可發現需要某許可權的錯誤資訊。
共用UID的應用程式可與系統另一使用者程式同一簽名,也可同一許可權。一般可在AndroidManifest檔案中設定sharedUserId,如android:sharedUserId="android.uid.shared",以獲得系統許可權。但是,這種程式屬性通常由OEM植入,也就是說對系統軟體起作用。
Android的許可權管理模組在2.3版本之後,即使有root許可權,仍無法執行很多底層命令和API。例如,su到root使用者,執行ls等命令都會出現沒有許可權的錯誤。
Android安全模型之Android安全機制(應用許可權)