2013-06-05 29 views
20

當我將手機連接到計算機時,我使用「adb shell」命令與手機進行通信並輸入ps命令輸出當前在手機上運行的進程信息,我發現兩個特殊用戶,一個是root,另一個是系統,據我所知,基於linux的android,所以root用戶是bigest權限的用戶,但我迷惑系統用戶,也許我可以認爲它是一個正常的用戶在Linux系統,但它在Android中是特殊的,它有很多與Android相關的權限,所以有人可以告訴我root用戶和系統用戶的真正不同,以及爲什麼android需要添加一個系統用戶?謝謝: )android系統用戶和linux root用戶有何區別

回答

21

就Linux而言,system用戶只是普通用戶(UID 1000)。然而,Android服務賦予它特殊的權限,您可以訪問幾乎任何東西。大多數服務有這樣的地方代碼:

private static final void enforceSystemOrRoot(String message) { 
    final int uid = Binder.getCallingUid(); 
    if (uid != Process.SYSTEM_UID && uid != 0) { 
     throw new SecurityException(message); 
    } 
} 

什麼,做是拒絕訪問任何人誰不是root或systemshell用戶(UID 2000)(你在做adb shell時得到的)是另一個擁有很多權力的用戶(許多組的成員)。參看

system

$ su 1000 
$ id 
uid=1000(system) gid=1000(system) 
groups=1003(graphics),1004(input),1007(log),1009(mount), 
1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin), 
3002(net_bt),3003(inet),3006(net_bw_stats) 

shell

$ adb shell 
[email protected]:/ $ id 
uid=2000(shell) gid=2000(shell) 
groups=1003(graphics),1004(input),1007(log),1009(mount), 
1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin), 
3002(net_bt),3003(inet),3006(net_bw_stats) 

Android使用一個單獨的用戶對每一個應用程序和系統服務也有其專用的用戶(mediaradiowifi等)。很少有東西以root身份運行(主要是本地守護進程)。

+0

所以,如果我得到SYSYEM PRIVS,可我用它來根設備或我需要真正的UID爲0? – Seth

+0

如果您設法訪問'system',您仍然需要找到一種方法將權限提升到root。但是,您需要特權服務中的漏洞才能完成此操作。 –

+0

@NikolayElenkov如何在adb shell中使用系統用戶?當我在Samsung 4上執行su 1000時,它顯示su命令未找到... –

0

系統用戶無法訪問其他用戶的文件。

如果你這樣做: ls -l命令/data/data/com.google.android.gm/shared_prefs/

你得到了 '權限被拒絕'

如果你是root用戶,你可以做任何事情。 您可以訪問所有文件系統,擦除所有數據。

您還可以重啓手機等

相關問題