2017년 9월 17일 일요일

android uid


android uid
android에서 ps 를 사용하면 uid 정보가 나오게 됩니다.

USER      PID   PPID  VSIZE  RSS   WCHAN              PC  NAME
root      1     0     23576  800   SyS_epoll_ 0000000000 S /init
root      2     0     0      0       kthreadd 0000000000 S kthreadd
...
u0_a140   22795 3283  2410844 7096  SyS_epoll_ 0000000000 S com.sec.android.inputmethod:spellcheckerService
root      24524 2     0      0     rescuer_th 0000000000 S kbase_event
u0_a274   28170 3283  3331968 39244 SyS_epoll_ 0000000000 S com.samsung.android.messaging
root      28193 2     0      0     rescuer_th 0000000000 S kbase_event
root      28254 2     0      0     rescuer_th 0000000000 S kbase_event
u0_a133   28331 3284  2085420 88736 SyS_epoll_ 0000000000 S com.sec.android.app.sbrowser
root      28371 2     0      0     rescuer_th 0000000000 S kbase_event
u0_i0     28421 3284  2401876 51428 SyS_epoll_ 0000000000 S com.sec.android.app.sbrowser:sandboxed_process0
u0_a185   31540 3284  1973280 33600 SyS_epoll_ 0000000000 S com.kakao.talk

이중에 USER라고 표시되어 있는 부분입니다.
해당 값의 의미는 아래 파일에서 의미를 찾을 수 있습니다.
android_filesystem_config.h
https://android.googlesource.com/platform/system/core/+/master/libcutils/include/private/android_filesystem_config.h

uid가 왜 filesystem과 연관되어 있는지 궁금해 하실 수도 있습니다.
user id는 사용자를 구별하기위한 숫자입니다. 즉 linux, unix계열에서 사용자를 추가할때 uid(숫자)를 사용하게 됩니다. 사용자의 권한으로 만들어지는 파일들도 동일하게 uid(숫자)를 파일시스템에 기록을 해두어야 합니다. (누가 생성했는지 정보) 그러기 위해서는 목록을 관리해야 하는데요. 그 부분이 위파일 입니다.

ls -l을 해주면 아래 정보가 나오며 root , root 이런식으로 나오는데 앞쪽이 user, 뒤의 정보가 group정보가 됩니다.

ls -l
total 8216
dr-xr-xr-x 240 root   root         0 2017-09-12 06:55 acct
lrwxrwxrwx   1 root   root        50 1970-01-01 09:00 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
drwxrwx---   8 system cache     4096 2017-09-02 09:57 cache
drwxr-xr-x   3 root   root         0 1970-01-01 09:00 config
drwxrwx--x   3 radio  system    4096 2016-10-18 12:16 cpefs
lrwxrwxrwx   1 root   root        17 1970-01-01 09:00 d -> /sys/kernel/debug

해당값을 숫자로 보기위해서는 ls -n 을 하면 됩니다.
동일한 내용이지만 아래와 같이 나옵니다.
ls -n
total 8216
dr-xr-xr-x 240 0    0          0 2017-09-12 06:55 acct
lrwxrwxrwx   1 0    0         50 1970-01-01 09:00 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
drwxrwx---   8 1000 2001    4096 2017-09-02 09:57 cache
drwxr-xr-x   3 0    0          0 1970-01-01 09:00 config
drwxrwx--x   3 1001 1000    4096 2016-10-18 12:16 cpefs
lrwxrwxrwx   1 0    0         17 1970-01-01 09:00 d -> /sys/kernel/debug
drwxrwx--x  59 1000 1000    4096 2017-09-12 06:55 data
-rw-r--r--   1 0    0        970 1970-01-01 09:00 default.prop

다시 돌아와서 ps 정보를 ps -n으로 보면 아래와 같습니다.

10274     28170 3283  3331968 37472 SyS_epoll_ 0000000000 S com.samsung.android.messaging
0         28193 2     0      0     rescuer_th 0000000000 S kbase_event
0         28254 2     0      0     rescuer_th 0000000000 S kbase_event
10133     28331 3284  2085420 69492 SyS_epoll_ 0000000000 S com.sec.android.app.sbrowser
0         28371 2     0      0     rescuer_th 0000000000 S kbase_event
99000     28421 3284  2400844 34536 SyS_epoll_ 0000000000 S com.sec.android.app.sbrowser:sandboxed_process0
10185     31540 3284  1973300 30236 SyS_epoll_ 0000000000 S com.kakao.talk
0         31617 2     0      0     rescuer_th 0000000000 S kbase_event
1000      31965 3283  1836980 9148  SyS_epoll_ 0000000000 S com.samsung.SMT

정리해 보자면 u0_a133 이런 id를 가졌다고한다면 실제 uid는 10133 이 됩니다.
사용자가 설치한 앱들의 id는 10000부터 시작하기 때문에 그렇습니다.

android_filesystem_config.h 파일내

#define AID_APP 10000       /* TODO: switch users over to AID_APP_START */
#define AID_APP_START 10000 /* first app user */
#define AID_APP_END 19999   /* last app user */

또한 설치된 app의 uid는 설치한 시점에 따라서 단말마다 다를 수 있습니다.


댓글 없음:

댓글 쓰기