나는 지금 꽤 오랫동안 궁금했습니다. 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
.