自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

51CTO專(zhuān)家專(zhuān)欄 李洋談Android系統(tǒng)及程序授權(quán)機(jī)制

原創(chuàng)
移動(dòng)開(kāi)發(fā) Android
本文為51CTO移動(dòng)開(kāi)發(fā)頻道邀請(qǐng)安全專(zhuān)家李洋撰寫(xiě)的專(zhuān)家專(zhuān)欄的第二篇文章。在前文中李洋為我們講述了《Android安全框架》,在本文中李洋將向我們介紹《Android系統(tǒng)及程序授權(quán)機(jī)制》。

【51CTO獨(dú)家特稿】李洋老師在前文中向我們介紹了“Android安全框架”。Android開(kāi)發(fā)包工具將代碼和資源數(shù)據(jù)文件編譯成以.apk后綴的安裝文件。單個(gè).apk文件就是一個(gè)應(yīng)用程序,可被用來(lái)安裝在Android系統(tǒng)的手機(jī)上。但是你了解Android系統(tǒng)及程序授權(quán)機(jī)制嗎?本文李洋老師將向我們介紹“Android系統(tǒng)及應(yīng)用程序授權(quán)機(jī)制”。

1.Android系統(tǒng)權(quán)限定義

Android系統(tǒng)在/system/core/private/android_filesystem_config.h頭文件中對(duì)Android用戶/用戶組作了如下定義,且權(quán)限均基于該用戶/用戶組設(shè)置。>Android系統(tǒng)在/system/core/private/android_filesystem_config.h頭文件中對(duì)Android用戶/用戶組作了如下定義,且權(quán)限均基于該用戶/用戶組設(shè)置。

  1. #define AID_ROOT             0  /* traditional unix root user */ 
  2. #define AID_SYSTEM        1000  /* system server */ 
  3. #define AID_RADIO         1001  /* telephony subsystem, RIL */ 
  4. #define AID_BLUETOOTH     1002  /* bluetooth subsystem */ 
  5. #define AID_GRAPHICS      1003  /* graphics devices */ 
  6. #define AID_INPUT         1004  /* input devices */ 
  7. #define AID_AUDIO         1005  /* audio devices */ 
  8. #define AID_CAMERA        1006  /* camera devices */ 
  9. #define AID_LOG           1007  /* log devices */ 
  10. #define AID_COMPASS       1008  /* compass device */ 
  11. #define AID_MOUNT         1009  /* mountd socket */ 
  12. #define AID_WIFI          1010  /* wifi subsystem */ 
  13. #define AID_ADB           1011  /* android debug bridge (adbd) */ 
  14. #define AID_INSTALL       1012  /* group for installing packages */ 
  15. #define AID_MEDIA         1013  /* mediaserver process */ 
  16. #define AID_DHCP          1014  /* dhcp client */ 
  17. #define AID_SDCARD_RW     1015  /* external storage write access */ 
  18. #define AID_VPN           1016  /* vpn system */ 
  19. #define AID_KEYSTORE      1017  /* keystore subsystem */ 
  20. #define AID_USB           1018  /* USB devices */ 
  21. #define AID_DRM           1019  /* DRM server */ 
  22. #define AID_DRMIO         1020  /* DRM IO server */ 
  23. #define AID_GPS           1021  /* GPS daemon */ 
  24. #define AID_NFC           1022  /* nfc subsystem */ 
  25.  
  26. #define AID_SHELL         2000  /* adb and debug shell user */ 
  27. #define AID_CACHE         2001  /* cache access */ 
  28. #define AID_DIAG          2002  /* access to diagnostic resources */ 
  29.  
  30. /* The 3000 series are intended for use as supplemental group id's only. 
  31.  * They indicate special Android capabilities that the kernel is aware of. */ 
  32. #define AID_NET_BT_ADMIN  3001  /* bluetooth: create any socket */ 
  33. #define AID_NET_BT        3002  /* bluetooth: create sco, rfcomm or l2cap sockets */ 
  34. #define AID_INET          3003  /* can create AF_INET and AF_INET6 sockets */ 
  35. #define AID_NET_RAW       3004  /* can create raw INET sockets */ 
  36. #define AID_NET_ADMIN     3005  /* can configure interfaces and routing tables. */ 
  37.  
  38. #define AID_MISC          9998  /* access to misc storage */ 
  39. #define AID_NOBODY        9999 
  40.  
  41. #define AID_APP          10000 /* first app user */ 

值得注意的是:每個(gè)應(yīng)用程序在安裝到Android系統(tǒng)后,系統(tǒng)都會(huì)為其分配一個(gè)用戶ID,如app_4、app_11等。以下是Calendar和Terminal軟件在Android系統(tǒng)中進(jìn)程瀏覽的結(jié)果(其中,黑色字體標(biāo)明的即為應(yīng)用分配的用戶ID):

Android系統(tǒng)中進(jìn)程瀏覽的結(jié)果
USER PID PPID VSIZE RSS WCHAN PC NAME
app_16 2855 2363 216196 20960 ffffffff afd0ee48 S com.android.providers.calendar
app_91 4178 2363 218872 25076 ffffffff afd0ee48 S jackpal.androidterm

 在Android系統(tǒng)中,上述用戶/用戶組對(duì)文件的訪問(wèn)遵循Linux系統(tǒng)的訪問(wèn)控制原則,即根據(jù)長(zhǎng)度為10個(gè)字符的權(quán)限控制符來(lái)決定用戶/用戶組對(duì)文件的訪問(wèn)權(quán)限。該控制符的格式遵循下列規(guī)則:

(1) 第1個(gè)字符:表示一種特殊的文件類(lèi)型。其中字符可為d(表示該文件是一個(gè)目錄)、b(表示該文件是一個(gè)系統(tǒng)設(shè)備,使用塊輸入/輸出與外界交互,通常為一個(gè)磁盤(pán))、c(表示該文件是一個(gè)系統(tǒng)設(shè)備,使用連續(xù)的字符輸入/輸出與外界交互,如串口和聲音設(shè)備),“.”表示該文件是一個(gè)普通文件,沒(méi)有特殊屬性。

(2) 2~4個(gè)字符:用來(lái)確定文件的用戶(user)權(quán)限;

(3) 5~7個(gè)字符:用來(lái)確定文件的組(group)權(quán)限;

(4) 8~10個(gè)字符:用來(lái)確定文件的其它用戶(other user,既不是文件所有者,也不是組成員的用戶)的權(quán)限。

(5) 第2、5、8個(gè)字符是用來(lái)控制文件的讀權(quán)限的,該位字符為r表示允許用戶、組成員或其它人可從該文件中讀取數(shù)據(jù)。短線“-”則表示不允許該成員讀取數(shù)據(jù)。

(6) 第3、6、9位的字符控制文件的寫(xiě)權(quán)限,該位若為w表示允許寫(xiě),若為“-”表示不允許寫(xiě)。

(7) 第4、7、10位的字符用來(lái)控制文件的制造權(quán)限,該位若為x表示允許執(zhí)行,若為“-”表示不允許執(zhí)行。

舉個(gè)例子,“drwxrwxr--  2 root   root    4096  2月 11 10:36 guo”表示的訪問(wèn)控制權(quán)限(黑色字體標(biāo)明)為:因?yàn)間uo的第1個(gè)位置的字符是d,所以由此知道guo是一個(gè)目錄。第2至4位置上的屬性是rwx,表示用戶root擁有權(quán)限列表顯示guo中所有的文件、創(chuàng)建新文件或者刪除guo中現(xiàn)有的文件,或者將guo作為當(dāng)前工作目錄。第5至7個(gè)位置上的權(quán)限是rwx,表示root組的成員擁有和root一樣的權(quán)限。第8至10位上的權(quán)限僅是r--,表示不是root的用戶及不屬于root組的成員只有對(duì)guo目錄列表的權(quán)限。這些用戶不能創(chuàng)建或者刪除guo中的文件、執(zhí)行junk中的可執(zhí)行文件,或者將junk作為他們的當(dāng)前工作目錄。#p#

2. Android應(yīng)用程序權(quán)限申請(qǐng)

每個(gè)應(yīng)用程序的APK包里面都包含有一個(gè)AndroidMainifest.xml文件,該文件除了羅列應(yīng)用程序運(yùn)行時(shí)庫(kù)、運(yùn)行依賴關(guān)系等之外,還會(huì)詳細(xì)地羅列出該應(yīng)用程序所需的系統(tǒng)訪問(wèn)。程序員在進(jìn)行應(yīng)用軟件開(kāi)發(fā)時(shí),需要通過(guò)設(shè)置該文件的uses-permission字段來(lái)顯式地向Android系統(tǒng)申請(qǐng)?jiān)L問(wèn)權(quán)限。

該文件的基本格式如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  3.      package="cn.com.fetion.android" 
  4.      android:versionCode="1" 
  5.      android:versionName="1.0.0"> 
  6.    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
  7.        <activity android:name=".welcomActivity" 
  8.                   android:label="@string/app_name"> 
  9.             <intent-filter> 
  10.                 <action android:name="android.intent.action.MAIN" /> 
  11.                 <category android:name="android.intent.category.LAUNCHER" /> 
  12.             </intent-filter> 
  13.         </activity> 
  14.    </application> 
  15.   <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 
  16. </manifest> 

如上述文件描述中加下劃線的斜體部分,該文件的作用是說(shuō)明該軟件需要發(fā)送短信的功能。

值得注意的是:通過(guò)測(cè)試發(fā)現(xiàn)一種特殊的情況,應(yīng)用程序可以在程序運(yùn)行時(shí)申請(qǐng)root權(quán)限,如右圖,在使用Android Terminal Emulator時(shí)嘗試使用su命令切換到root用戶。若用戶已通過(guò)hacking的方式使得Android系統(tǒng)獲得了root權(quán)限,則可以允許該程序以root用戶權(quán)限執(zhí)行;反之即算用戶選擇“允許”,也不能使程序以root用戶權(quán)限執(zhí)行。

授權(quán)要求#p#

3. Android系統(tǒng)對(duì)應(yīng)用程序權(quán)限申請(qǐng)的處理方式分析

對(duì)Android源代碼中的如下文件進(jìn)行分析:

(1) InstallAppProgress.java:其路徑為\packages\apps\PackageInstaller\src\com\android\packageinstaller\InstallAppProgress.java;

(2) PackageInstallerActivity.java:其路徑為\packages\apps\PackageInstaller\src\com\android\packageinstaller\PackageInstallerActivity.java;

(3) AppSecurityPermissions.java:其路徑為\frameworks\base\core\java\android\widget\AppSecurityPermissions.java

總結(jié)得出如下圖所示的Android系統(tǒng)對(duì)應(yīng)用程序授權(quán)申請(qǐng)的處理流程:

(1) 進(jìn)入處理應(yīng)用程序授權(quán)申請(qǐng)的入口函數(shù);

(2) 系統(tǒng)從被安裝應(yīng)用程序的AndroidManifest.xml文件中獲取該應(yīng)用正常運(yùn)行需申請(qǐng)的權(quán)限列表;

(3) 顯示對(duì)話框,請(qǐng)求用戶確認(rèn)是否滿足這些權(quán)限需求;

(4) 若同意,則應(yīng)用程序正常安裝,并被賦予相應(yīng)的權(quán)限;若否定,則應(yīng)用程序不被安裝。系統(tǒng)僅提供給用戶選擇“是”或者“否”的權(quán)利,沒(méi)有選擇其中某些權(quán)限進(jìn)行授權(quán)的權(quán)利。

[[39511]]李洋博士畢業(yè)于中科院計(jì)算所。10多年來(lái)一直從事計(jì)算機(jī)網(wǎng)絡(luò)信息安全研發(fā)工作,曾主持和參與多項(xiàng)國(guó)家重點(diǎn)項(xiàng)目以及信息安全系統(tǒng)和企業(yè)信息安全系統(tǒng)的研發(fā)工 作。具有Linux系統(tǒng)應(yīng)用、管理、安全及內(nèi)核的研發(fā)經(jīng)驗(yàn),擅長(zhǎng)網(wǎng)絡(luò)安全技術(shù)、協(xié)議分析、Linux系統(tǒng)安全技術(shù)、Linux系統(tǒng)及網(wǎng)絡(luò)管理、Linux 內(nèi)核開(kāi)發(fā)等。

【51CTO.com獨(dú)家特稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載!合作媒體轉(zhuǎn)載請(qǐng)注明原文出處!如果您想與李洋老師探討Android安全架構(gòu)等話題,或者向51CTO移動(dòng)開(kāi)發(fā)頻道投稿請(qǐng)發(fā)郵件至zhousn#51CTO.com(將“#”換成“@”)】

【編輯推薦】

  1. 51CTO專(zhuān)家專(zhuān)欄 李洋談Android安全框架 
責(zé)任編輯:佚名 來(lái)源: 51CTO
相關(guān)推薦

2011-08-01 13:35:08

Android安全框架權(quán)限

2011-09-06 13:56:43

李洋iOS安全機(jī)制

2011-08-29 13:52:15

李洋Android應(yīng)用

2011-08-22 08:53:17

Android啟動(dòng)過(guò)程李洋

2011-11-03 09:24:57

李洋簽名

2011-09-15 08:58:41

Android短信丟失技術(shù)原因

2012-07-16 10:21:48

Android進(jìn)程線程

2010-08-26 08:57:04

AndroidAndroid開(kāi)發(fā)

2012-07-23 13:22:42

Intent Filt安全Android

2012-08-27 09:52:48

Android沙箱模型

2010-01-19 11:21:20

51CTO駐站專(zhuān)家

2016-08-23 18:15:26

2012-02-13 12:47:41

Android 4.0Launcher源碼分析

2012-02-02 15:56:48

Android 4.0Launcher源碼分析

2011-09-22 09:51:41

2012-07-04 09:07:40

2012-01-11 16:02:56

Android 4.0Launcher源碼分析

2012-06-05 10:09:45

AndroidManiAndroidMani

2016-06-12 13:48:33

51CTO

2011-06-01 16:35:50

51CTO投稿
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)