[RK3288][Android6.0] 系统中UID(用户ID)知识点小结

来源:互联网 发布:人工智能工程师培训 编辑:程序博客网 时间:2024/06/05 23:03

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

概念:
基于Linux中的user id,区别:

  • Linux 主要用于权限管理,一个用户创建的都是同一个id
  • android 每个应用程序都都创建一个新的uid, 用来表示一个应用程序

定义:
在文件 system/core/include/private/android_filesystem_config.h

#define AID_ROOT             0  /* traditional unix root user */#define AID_SYSTEM        1000  /* system server */#define AID_RADIO         1001  /* telephony subsystem, RIL */#define AID_BLUETOOTH     1002  /* bluetooth subsystem */#define AID_GRAPHICS      1003  /* graphics devices */#define AID_INPUT         1004  /* input devices */#define AID_AUDIO         1005  /* audio devices */#define AID_CAMERA        1006  /* camera devices */#define AID_LOG           1007  /* log devices */#define AID_COMPASS       1008  /* compass device */#define AID_MOUNT         1009  /* mountd socket */#define AID_WIFI          1010  /* wifi subsystem */#define AID_ADB           1011  /* android debug bridge (adbd) */......#define AID_USER        100000  /* offset for uid ranges for each user */

这些宏定义会在代码中被直接使用,比如su命令判断如果不是root或者shell权限就不让使用:

int main(int argc, char** argv) {    uid_t current_uid = getuid();    if (current_uid != AID_ROOT && current_uid != AID_SHELL) error(1, 0, "not allowed");}

宏定义又被转换成字符串:

static const struct android_id_info android_ids[] = {    { "root",          AID_ROOT, },    { "system",        AID_SYSTEM, },    { "radio",         AID_RADIO, },    { "bluetooth",     AID_BLUETOOTH, },    { "graphics",      AID_GRAPHICS, },    { "input",         AID_INPUT, },    { "audio",         AID_AUDIO, },    { "camera",        AID_CAMERA, },    { "log",           AID_LOG, },    { "compass",       AID_COMPASS, },    ......    };

转换成字符串后方便记忆使用,比如在init.rc中:

service surfaceflinger /system/bin/surfaceflinger    class core    user system

查看:
查看当前系统所有现有UID方法:

kris@:~$ adb pull /data/system/packages.list113 KB/s (4701 bytes in 0.040s)

packages.list:

com.android.providers.telephony 1001 0 /data/data/com.android.providers.telephony platform 3002,3003,3001com.android.providers.media 10005 0 /data/data/com.android.providers.media default 1023,1015,1024com.sohu.inputmethod.sogou 10041 0 /data/data/com.sohu.inputmethod.sogou default 3003com.android.wallpapercropper 10014 0 /data/data/com.android.wallpapercropper platform nonecom.android.documentsui 10021 0 /data/data/com.android.documentsui platform nonecom.android.galaxy4 10022 0 /data/data/com.android.galaxy4 default nonecom.android.externalstorage 10002 0 /data/data/com.android.externalstorage platform 1023,1015com.android.htmlviewer 10024 0 /data/data/com.android.htmlviewer platform nonecom.android.browser 10017 0 /data/data/com.android.browser platform 3003com.android.soundrecorder 1000 0 /data/data/com.android.soundrecorder platform 3002,1023,1015,3003,3001

文件各个列的意义见文件package.c中的注释:
这里写图片描述
其中第二列的值就表示UID


参考:
Android系统中UID
ANDROID 中UID与PID的作用与区别

阅读全文
1 0
原创粉丝点击