26

電話をコンピューターに接続すると、「adb shell」コマンドを使用して電話と通信し、ps コマンドを入力して、電話で現在実行されているプロセス情報を出力します。1 人はルート、もう 1 人はシステムです。私が知る限り、Android は Linux ベースなので、root ユーザーが最大の権限を持つユーザーですが、システム ユーザーと混同しがちです。おそらく、Linux システムでは通常のユーザーと見なすことができますが、Android では特別なユーザーです。 Androidに関連する多くの権限があるので、ルートユーザーとシステムユーザーの本当の違いと、Androidがシステムユーザーを追加する必要がある理由を誰か教えてもらえますか?ありがとう:)

4

2 に答える 2

28

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);
    }
}

それは、ルートまたはsystem. shellユーザー (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
shell@android:/ $ 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 として実行されるものはほとんどありません (主にネイティブ デーモン)。

于 2013-06-05T09:24:25.920 に答える
-1

システム ユーザーは、他のユーザーのファイルにアクセスできません。

実行する場合: ls -l /data/data/com.google.android.gm/shared_prefs/

「許可が拒否されました」というメッセージが表示されます

root ユーザーであれば、何でもできます。すべてのファイル システムにアクセスし、すべてのデータを消去できます。

電話などを再起動することもできます。

于 2013-09-09T22:24:00.547 に答える