android系统用户和linux root用户之间有什么区别

Cry*_*ake 24 android

当我将手机连接到计算机时,我使用"adb shell"命令与我的手机通信并输入ps命令输出当前在手机上运行的进程信息,我找到两个特殊用户,一个是root,另一个是系统,据我所知,android基于linux,所以root用户是bigest权限用户,但我和系统用户混淆,也许我可以把它当作linux系统中的普通用户,但它在Android中很特别,它有很多与android有关的权限,那么有人可以告诉我root用户和系统用户之间真正的不同,以及为什么android需要添加系统用户?谢谢:)

Nik*_*kov 27

就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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做是拒绝任何非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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

Android使用一个单独的用户对每一个应用程序和系统服务也有其专用的用户(media,radio,wifi等).很少有东西以root身份运行(主要是原生守护进程).