사용자 / 그룹 ID 정보는 Android에 어디에 저장되며 어떻게 해석합니까?


15

나는 지금 꽤 오랫동안 궁금했습니다. Android는 사용자 및 그룹 ID 정보를 어디에 저장합니까?

예를 들어 표준 Linux에서는 사용자 및 그룹 정보가 각각 /etc/passwd및에 저장됩니다 /etc/group. 사용자를 그룹에 추가하면 해당 사용자 이름 / uid가 해당 그룹의 사용자 목록에 추가됩니다 (예 : 내 오디오 그룹 항목은 /etc/group다음과 같습니다).

audio:x:29:pulse,edge-case

여기서 펄스는 pulseaudio 데몬의 uid에 매핑되고 edge-case는 Linux 상자에서 내 uid (1000)에 매핑됩니다.

내가 알기로, Android에 설치되는 각 앱은 자체 UID와 GID를 얻습니다. 이것은 모두 자체 프로세스에서 실행되며 다른 프로세스의 데이터에 액세스 할 수 없으므로 Android에서 발생하는 앱의 "샌드 박싱"의 기초입니다. 앱 프로그래머가 만든 매니페스트 파일에 다른 앱과 공유 할 정보와 공유하지 않는 정보를 나타내는 선언이없는 한 다른 앱이 소유 한 프로세스 또는 파일. 이것은 또한 인터넷 그룹이나 그와 비슷한 것에 추가하도록 요청하여 설치하는 동안 앱이 네트워킹 서비스에 대한 액세스를 얻거나 오히려 요청하는 방법입니다 .NET net 그룹의 이름을 인용하지 마십시오. INET6, 안드로이드 에서이 메커니즘을 통해 응용 프로그램에 부여 할 수있는 여러 수준의 네트워크 액세스가 있음을 알고 있습니다.

제 질문은이 정보가 Android에 어디에 저장되어 있습니까?

더 수정할 수 있습니까?

나는 glibc 스택을 스택에 통합하고 내 /etc/{passwd,group}파일 에 들어있는 데이터를 믿어 내 폰에 존재하며 다른 많은 것들과 함께 설치하기도합니다.

업데이트 : 더 많은 검색을 수행했으며 이것이 내가 찾고있는 것일 수 있습니다.

좀 더 깊이 파고 그것이 내가 찾고있는 모든 것인지 확인해야합니다.

업데이트 : (2014 년 6 월 27 일 5:40)

누군가 내가하고있는 일이나 말하고있는 내용을 모른다고 생각하기 때문에 명확히하겠습니다.

Android의 사용자 UID는 사용자 번호 _ 앱 번호에 매핑 될 때 100000으로 오프셋되고 앱 UID는 10000으로 오프셋됩니다. 따라서 ps에 u0_a10이 표시되면 UID 100000을 가진 사용자가 UID 10010으로 앱을 실행하고 있음을

system / core / include / private / android_filesystem_config.h에서 UID 및 사용자 / 데몬 이름을 가져 와서 내 / etc / passwd 및 / etc / group 파일을 업데이트하는 데 사용했습니다 (예 : 내 / etc / passwd 파일 (내 안드로이드 상자에 있음)은 다음과 같습니다

....
brainard:x:100002:100002:Professor Brainard,0420,,:/home/brainard
:/bin/bash
radio:x:1001:1001::/data/radio:/bin/false
bluetooth:x:1002:1002::/data/bluetooth:/bin/false
graphics:x:1003:1003::/home/graphics:/bin/false
input:x:1004:1004::/home/input:/bin/false
camera:x:1006:1006::/home/camera:/bin/false
log:x:1007:1007::/home/log:/bin/false
compass:x:1008:1008::/home/compass:/bin/false
mount:x:1009:1009::/home/mount:/bin/false
wifi:x:1010:1010::/home/wifi:/bin/false
adb:x:1011:1011::/home/adb:/bin/false
install:x:1012:1012::/home/install:/bin/false
media:x:1013:1013::/home/media:/bin/false
dhcp:x:1014:1014::/home/dhcp:/bin/false
....

/etc/adduser.conf에서 구성을 설정하여 새로운 사용자를 만들었습니다 (Android 상자에서).

# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically
# allocated user accounts/groups.
FIRST_UID=100001
LAST_UID=199999

FIRST_GID=100001
LAST_GID=199999

이것은 안드로이드의 정책에 따라, "glibc 기반"시스템 사용자가 여전히 100-999 범위에서 생성되도록하고 / etc / passwd 및 / etc / group 파일의 오디오 사용자를 1005로 수정했습니다. 그것은 안드로이드에 있습니다.

Android를 업데이트하고 glibc 스택의 데몬 또는 시스템 사용자 UID뿐만 아니라 사용자 UID 관련 정보와 동기화해야합니다.

Karim Yaghmour가 판매 한 책 "Embedded Android"에서 이에 대한 자세한 내용을 볼 수 있습니다.

내 목표는 nvlc와 같은 프로그램이 작동하도록하는 것이지만 Android가 내 사용자와 그들이 속한 그룹을 인식하여 예를 들어 내 두뇌 사용자가 오디오 장치에 액세스 할 수 있도록 UID와 GID를 동기화해야합니다.

또한 소켓을 열고 데이터베이스에 액세스 할 수 있도록 Postres와 네트워크 그룹의 멤버 자격에 대해 Android에 알려야합니다. 나는 당분간 커널에서 PARANOID_NETWORKING을 비활성화했지만이 해킹은 안드로이드를 바닐라 리눅스만큼 안전하게 만드는 역할을합니다. 편집증 설정을 유지하고 그룹 권한을 내가 맞는 데몬 / 사용자에게 적용하는 것이 좋을 것입니다.

이로 인해 Android는 편집증과 미세 조정 된 제어 기능을 갖춘 공개 서버를위한 훌륭한 운영 체제가됩니다. Kerberos, LDAP, PAM에 액세스하거나 Radius를 구성한 WAP로 전화를 사용할 때 데비안 및 기타 배포 저장소에서 모두 무료로 사용할 수 있다고 상상해보십시오.

나는이 모든 것을 알아 냈습니다. 앱을 설치할 때마다 업데이트되는 Android UID / GID 데이터베이스를 업데이트하는 방법을 알아야합니다. 그래서 가능하다는 것을 알고 있습니다.

업데이트 : (2014 년 6 월 30 일 오후 7시 08 분)

다음 파일의 데이터를 검토 한 후 ...

/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml

... "어떻게 해석합니까?"를 포함하도록 질문을 업데이트했습니다.

  • 필자는 맞춤형 PAM 모듈을 만들고 Bionic과 Glibc를 단일 C 라이브러리에 혼합해야하며 양쪽 모두의 응용 프로그램과 호환되어야하며 예외는 없으며 C ++ 예외를 기대해야합니다 .p --- 필자가 작성했습니다. 내가 따라야 할 엄지 손가락 -2의 몇 가지 규칙 :). rpm 및 apt와 같은 인기있는 패키지 관리 시스템에 래퍼를 작성하여 apk 설치를 위조하고 각 새로운 deb | rpm 패키지에 UID를 제공하고 모든 것을 FHS에 sym-link 할 수도 있습니다. 각각의 "manifest"에 권한 세트가 필요할 것이기 때문에 설치하는 동안 사용자가 필요에 따라 제공하고 취할 수있는 메뉴 일 것입니다.
  • 누구든지 이러한 파일의 구문을 설명하는 좋은 참고 자료가 있습니까? 나는 XML에 정통하지 않으며, 사용은 말할 것도없이 일반적으로 해석하는 응용 프로그램에 달려 있습니다.
  • 마지막 열의 항목을 packages.list제외 하고 파일을 이해하고 있습니다 null.

답변:


1

GET_ACCOUNTS권한을 보았 습니까? ( Ed. 참고 : 해당 기능은 웹 인증을 위해 개발 된 기능이므로이 질문에 유용한 것은 아닙니다.)

개인적으로 저는 APK 설치 당시 계산 된 UID / GID 값과 관련하여이 주제에 대해 읽고 있습니다. 현재 간단한 '블로그 기사에 대한 연구'이지만이 주제에 대해서도 조금 더 연구하고 싶습니다. 이러한 다중 연결된 OS 기능에 대한 참조 문서를 참조 하면 Android에서는 Android OS에 계정 서비스 가있는 것 같습니다 . ( Ed. 참고 Android 의 계정 서비스 는 Android 사용자의 웹 계정에 대한 응용 프로그램 용으로 개발 된 서비스 일 수 있습니다.)

개인적으로 나는 다른 기사를 쓰는 것에 전념하지만 즉시 계정 서비스가 더 많은 연구를 할 수 있습니다. 아마도 Android 기기에서 Kerberos를 적용하는 것과 관련하여 직교 적으로 관련이있을 수 있습니다. Android 플랫폼에서 Kerberos 서비스를 구현하는 것과 관련하여 일부 기존 작업이 있습니다. 웹앱의 경우 물론 OAuth / OAuth2가 있습니다.

분명히 Android는 일반적인 UNIX 암호 / 그림자 파일 ( Anderson2013 )을 사용하지 않습니다 . 현재 내 최선의 추정은 안드로이드 OS 계정 서비스가 추가 연구 방식의 주제 일 수 있다는 것입니다 ... 적어도 안드로이드 계정 서비스가 웹 인증 유틸리티 ( API : AccountManager ).

/etc/passwd안드로이드 소스 코드 어딘가에 대한 안드로이드의 대안에 대해 더 많은 것이 있다고 확신 합니다. 바라건대, CyanogenMod에서도 똑같이 접근 할 수 있기를 바랍니다.


1

여기에 안드로이드가 UID / GID 조회를 구현하는 방법에 대한 생각입니다. 질문이있는 사람에게 도움이 되길 바랍니다.

grp_pwd.cpp 는 Android가 UID / 사용자 이름을 passwd구조로 변환하는 방법을 설명합니다 . 로부터 getpwuid기능을 우리는 볼 수 있습니다

  1. UID는 처음부터 소정의 에이즈 비교 generated_android_ids.h아래 $(AOSP_ROOT)/out/soong/.intermediates/bionic/libc/generated_android_ids/gen에서 발생되는 android_filesystem_config.h 따른 바이오닉 / libc의 / Android.bp바이오닉 / Android.bp . 에이즈는에 UID지도에 사용자 이름에 저장되어 struct android_id_info android_ids[]최대 보았을 때, 그들은으로 변환 passwd하여 구조 uidgidAID, 홈 디렉토리 세트로 설정 /과 쉘 세트 /system/bin/sh( 코드 ).

  2. 이전 단계에서 사용자를 찾지 못하면이 기능은 OEM 정의 사용자를 찾습니다. 이러한 사용자의 UID를이 범위 AID_OEM_RESERVED_STARTAID_OEM_RESERVED_ENDAID_OEM_RESERVED_2_STARTAID_OEM_RESERVED_2_END. 공급 업체 정의 사용자는에 저장됩니다 /vendor/etc/passwd. 사용자 이름이 설정되고 oem_${uid}다른 속성은 AID 사용자와 같은 방식으로 설정됩니다.

  3. 마지막으로 모든 앱 사용자를 확인 app_id_to_passwd()하고 프로세스는 매우 유사합니다.

모든 passwd항목 을 얻으려면 getpwent()동일한 파일과 getpwent (3) 맨 페이지를 참조하십시오.


0

우선 모든 응용 프로그램마다 고유 한 PID (프로세스 ID)가 있음을 알고 있으므로이 PID는 운영 체제의 커널에 의해 응용 프로그램에 할당됩니다.

  1. Android ADT에서는 logcat에서 PID를 볼 수 있습니다.
  2. 기기에서 PID를 보려면 Play 스토어 에서 애플리케이션을 설치해야합니다 (앱에서 표시 한 PID가 정품인지 여부를 보장 할 수 없음)
  3. 수정 부분에 오는 것은 큰 아니요입니다.
  4. PID를 원하는대로 수정할 수는 없습니다. 보안 문제로 이어질뿐 아니라 다른 앱에 대한 앱 간의 모호성이 같은 PID를 가질 수 있으므로 충돌이 발생할 수 있습니다.

6
PID와는 아무런 관련이 없습니다. init를 제외하고는 가변적입니다. init는 항상 첫 번째 프로세스이기 때문에 항상 PID 1입니다. 이것은 안드로이드가 내 glibc 스택에서 UID를 인식하게하는 것과 관련이 있습니다. ) (예 : Postgres 데몬)와 같은 보안 문제가 아니기 때문에 Bionic 스택이 시스템에있는 이러한 추가 UID 및 GID를 인식하게하면 보안이 향상됩니다. Android Kerberos, LDAP 및 PAM을 인식하는 것이 어떻게 보안 결함이 될 수 있습니까?! 끔찍할 것입니다!
Overloaded_Operator
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.