安卓系统用户和Linux root用户之间有什么区别?

27
当我将手机连接到电脑并使用adb shell命令与手机进行通信,并输入ps命令以输出当前在手机上运行的进程信息时,我发现有两个特殊用户:一个是root,另一个是system。
据我所知,Android基于Linux,因此root用户是最高权限用户。然而,我对system用户感到困惑。也许我可以将其视为Linux系统中的普通用户,但在Android中它是特殊的:它拥有许多与Android相关的权限。
有人能告诉我root用户和system用户之间的真正区别,以及为什么Android需要添加一个system用户吗?
2个回答

29

就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或者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身份运行(主要是本地守护进程)。


如果我获得了系统权限,我能用它来获取设备的root权限吗?还是我需要真正的UID 0? - Seth
如果您成功到达 system,您仍然需要找到一种提升到 root 权限的方法。但是,为此您需要在特权服务中发现一个漏洞。 - Nikolay Elenkov
@NikolayElenkov 我怎样在adb shell中使用系统用户?当我在三星4上执行su 1000时,它显示su命令未找到... - ARK

0

系统用户无法访问其他用户的文件。

如果您执行以下命令: ls -l /data/data/com.google.android.gm/shared_prefs/

您将会得到“权限被拒绝”的提示。

如果您是root用户,您可以做任何事情。 您可以访问所有文件系统,清除所有数据。

您还可以重新启动手机等操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接