標籤:mis prot tac let 解析 副本 系統資源 許可權 script
1 許可權(permission)的定義。
系統本身定義了很多permission,例如
- "android.permission.WAKE_LOCK",
- "android.permission.ACCESS_WIFI_STATE",
- "android.permission.ACCESS_FINE_LOCATION" ,
- "android.permission.ACCESS_FINE_LOCATION"
應用也可以定義一個自己的許可權,例如
<permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"
android:label="@string/permlab_downloadManager"
android:description="@string/permdesc_downloadManager"
android:protectionLevel="signatureOrSystem" />
使用這些permission,第一步需要在AndroidManifest裡面定義。例如
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
當然了系統不會對任何應用開放任何許可權的。否則就等於沒有許可權,許可權還是有層級的
2 android許可權定義的層級。許可權的層級是許可權使用的一個維度
就拿上面定義的android.permission.ACCESS_DOWNLOAD_MANAGER許可權來說。它的使用層級(定義: android:protectionLevel="signatureOrSystem")是系統簽名或者系統應用才可以使用。
系統定義一下層級: normal , dangerous , signature , signatureorsystem
normal 一般定義就可以使用到
dangerous 在安裝時會給使用者提醒,如果使用者關閉了這些許可權,使用時一般的應用程式會提示使用者開啟這些許可權。這種層級的許可權是有限的
- GROUP PERMISSIONS
- CALENDAR(日曆): READ_CLENDER, WRITE_CLENDAR
- CAMERA(相機): CAMEAR
- CONTACTS(連絡人):READ_CONTACTS , WRITE_CONTACTS, GET_ACCOUNTS
- LOCATION(定位): ACCESS_FINE_LOCATION, ACCESS_CORASE_LOCATION
- MICROPHONE(麥克風):RECORD_AUDIO
- PHONE(電話):READ_PHONE_STATE, CALL_PHONE, READ_CALL_LOG, WRITE_CALL_LOG, ADD_VOICEMAIL, USE_SIP, PROCESS_OUTGOING_CALLS
- SMS(簡訊):SEND_SMS, RECEIVE_SMS, READ_SMS, RECEIVE_WAP_PUSH,RECEIVE_MMS
- SENSORS(感應器):BODY_SENSORS
- STORAGE(儲存)
signature 需要系統簽名才可以使用。例如一下的許可權
<permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS"
android:label="@string/permlab_downloadCompletedIntent"
android:description="@string/permdesc_downloadCompletedIntent"
android:protectionLevel="signature" />
當然了回報相關許可權的API會生效。
signatureorsystem 表示需要系統簽名,或者屬於系統應用,(一般內建在system/app或者system/priv-app或者system/priv-app下面的應用)可 以使用系統的API。例如"android.permission.ACCESS_DOWNLOAD_MANAGER",
3 android 許可權使用的使用者維度
app安裝的時候,android會為每一個引用程式分配一個UID(使用者ID)和GID(使用者組ID)。
此外安裝過程中還會產生一個GIDS。通過解析AndroidManifest,可以解析到應用運行時使用到的許可權(<uses-permission>),如果安裝過程中app 被賦予了permission的許可權,而且它有自己的GID,那麼這些許可權的GID會被添加到這個應用的GID裡面。從這個角度來說,app的GIDS會包含它使用 的許可權的集合(前提是已經被賦予)。進一步就是說app能使用到那些許可權或者資源都被定義在他的GUIDS裡面。
綜合上述,一個應用程式會有一個UID。而且會有個一個GIDS。這個GIDS包含了運行時可以使用到的系統資源。
Android利用沙箱來隔離每個應用程式,是之使用到獨立的資源。每個應用程式都有獨立的沙箱,這樣就阻礙了應用程式之間的共用。但是如果需要做到兩個應用程式之間的資源共用,則需要兩個前提:1 是這兩個應用程式有相同的簽名。2 是兩個應用程式定義相同的android:sharedUserId 這樣兩個應用程式就會運行同一進程裡面,彼此共用許可權。
4 其他,linux進程運行中的使用者
- uid(guid).真實使用者(組),進程的真是所有者。
- euid(geuid).有效使用者(組),進程啟動並執行時候需要的各種許可權,依賴於suid。
- suid(gsuid).儲存設定使用者(組),是有效使用者的副本。當超級使用者修改有效用使用者時,會先產生一個有效使用者的副本,即suid。這樣就會有主於有效使用者的恢複。
- fuid(fuid). 檔案使用者(組)
android APP 許可權基礎