Zastanawiam się już od dłuższego czasu; gdzie Android przechowuje informacje o użytkownikach i identyfikatorach grup?
Na przykład w standardowym systemie Linux informacje o użytkownikach i grupach są przechowywane odpowiednio w /etc/passwd
i /etc/group
. Gdy dodajesz użytkownika do grupy, jego nazwa użytkownika / identyfikator użytkownika jest dodawana do listy użytkowników w tej grupie, na przykład pozycja mojej grupy audio /etc/group
wygląda następująco:
audio:x:29:pulse,edge-case
Gdzie puls jest mapowany do UID demona pulseaudio, a przypadek krawędzi jest mapowany do mojego UID (1000) na moim Linux-ie.
Jak rozumiem, każda aplikacja instalowana na Androidzie ma swój własny identyfikator użytkownika i identyfikator gid, a to jest podstawa „piaskownicowania” aplikacji, które mają miejsce na Androidzie, ponieważ wszystkie działają we własnym procesie i nie mogą uzyskać dostępu do danych innego proces lub pliki należące do innej aplikacji, chyba że w pliku manifestu utworzonym przez programistów aplikacji znajduje się deklaracja określająca, jakie informacje mają być udostępniane innym aplikacjom, a które nie. W ten sposób aplikacje zyskują, a raczej żądają dostępu do usług sieciowych podczas instalacji, prosząc o dodanie do grupy INTERNET lub coś w tym rodzaju, nie cytuj mnie w nazwie grupy NET, może to być bardziej INET lub INET6, w każdym razie wiem, że istnieje kilka poziomów dostępu do sieci, które można przyznać aplikacji za pośrednictwem tego mechanizmu w systemie Android.
Moje pytanie brzmi: gdzie te informacje są przechowywane w systemie Android?
Co więcej, czy można modyfikować?
Chciałbym zintegrować z nim stos glibc i zawarte w nim dane w moich /etc/{passwd,group}
plikach, zaufajcie mi, istnieją one na moim telefonie, mam nawet zainstalowane wiele innych dodatków.
Aktualizacja: Przeprowadziłem więcej wyszukiwań i może tego właśnie szukam.
Będę musiał kopać nieco głębiej i upewnić się, że to wszystko, czego szukam.
Aktualizacja: (5:40, 27 czerwca 2014 r.)
Ponieważ ktoś myśli, że nie wiem, co robię lub mówię, pozwól mi wyjaśnić;
Identyfikatory UID użytkownika w Androidzie są przesunięte o 100000, a identyfikatory UID aplikacji są przesunięte o 10000 po odwzorowaniu na numer użytkownika _ numer aplikacji, stąd gdy ps pokazuje coś w rodzaju u0_a10, co oznacza, że użytkownik o UID 100000 działa z UID 10010
Wyciągnąłem UID i nazwy użytkownika / demona z systemu / core / include / private / android_filesystem_config.h i użyłem ich do aktualizacji plików / etc / passwd i / etc / group (na moim Androidzie), na przykład mojego / etc / plik passwd (na moim urządzeniu z Androidem) wygląda następująco:
....
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
....
Skonfigurowałem konfigurację w /etc/adduser.conf, aby tworzyć nowych użytkowników takich jak (na moim urządzeniu z Androidem):
# 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
Jest to zgodne z polityką Androida, pozwalam, aby użytkownicy systemu „opartego na glibc” nadal byli tworzeni z zakresu 100–999. Wierzę i zmodyfikowałem użytkownika audio w moich plikach / etc / passwd i / etc / group na 1005, takich jak to jest na Androida.
Muszę zaktualizować system Android i zsynchronizować go z informacjami dotyczącymi moich identyfikatorów UID użytkowników, a także z identyfikatorami UEM użytkownika demona lub użytkownika systemowego ze stosu glibc.
Możesz przeczytać więcej na ten temat w książce „Embedded Android” Karim Yaghmour Sprzedany tutaj
Moim celem jest, aby programy takie jak nvlc działały, ale muszę zsynchronizować identyfikatory UID i GID, aby Android wiedział o moich użytkownikach i grupach, do których należą, aby na przykład mój użytkownik z dostępem miał dostęp do urządzeń audio.
Muszę również poinformować Androida o Postres i jego członkostwie w grupie sieci, aby mógł otwierać gniazda i umożliwić dostęp do baz danych. Na razie wyłączyłem PARANOID_NETWORKING w jądrze, ale ten hack służy tylko do uczynienia Androida tak bezpiecznym jak waniliowy Linux. Byłoby miło zachować ustawienie paranoiczne i zastosować uprawnienia grupy do tych demonów / użytkowników, których uważam za stosowne.
To sprawiłoby, że Android byłby doskonałym systemem operacyjnym dla serwerów publicznych z tak paranoicznymi i precyzyjnie kontrolowanymi kontrolami. Wyobraź sobie, że masz dostęp do Kerberos, LDAP, PAM lub Gdy używasz telefonu jako WAP z skonfigurowanym Radius, wszystkie z nich są dostępne bezpłatnie w Debianie i innych repozytoriach dystrybucyjnych.
Rozumiem to wszystko, muszę tylko wiedzieć, jak zaktualizować bazę danych UID / GID Androida, która jest aktualizowana za każdym razem, gdy instalujesz aplikację, więc wiem, że jest to możliwe.
Aktualizacja: (19:08, 30 czerwca 2014 r.)
Po przejrzeniu danych w następujących plikach ...
/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml
... zaktualizowałem swoje pytanie, aby zawierało „jak to zinterpretować?”
- Myślę, że będę musiał stworzyć niestandardowy moduł PAM i połączyć Bionic i Glibc w jedną bibliotekę C, muszą one być kompatybilne z aplikacjami po obu stronach, bez wyjątków, oczekuj wyjątków C ++, to znaczy; p --- napisałem kilka zasad kciuka-2 :) dla mnie do naśladowania. Być może będę musiał także napisać opakowanie do popularnych systemów zarządzania pakietami, takich jak rpm i apt, które udają instalację apk i dają każdemu nowemu pakietowi deb | rpm identyfikator UID, a może po prostu sym-link wszystko do FHS. To może być najbardziej idealne rozwiązanie, na jakie mógłbym pójść, choć najbardziej pracujące, ponieważ każde z nich potrzebuje zestawu uprawnień w swoim „manifeście”, być może menu podczas instalacji, które użytkownik może dać i wziąć w razie potrzeby.
- Czy ktoś ma dobre referencje, które wyjaśniają składnię tych plików? Nie jestem zbyt dobrze zaznajomiony z XML, nie wspominając, że jego użycie zwykle zależy od aplikacji, która go interpretuje.
- Rozumiem
packages.list
plik z wyjątkiemnull
wpisu w ostatniej kolumnie. Czy ktoś może to wyjaśnić?