Ich wundere mich jetzt schon seit einiger Zeit; Wo speichert Android seine Benutzer- und Gruppen-ID-Informationen?
Beispielsweise werden bei Standard-Linux Benutzer- und Gruppeninformationen in /etc/passwd
bzw. gespeichert /etc/group
. Wenn Sie einen Benutzer zu einer Gruppe hinzufügen, wird sein oder ihr Benutzername / UID zur Liste der Benutzer in dieser Gruppe hinzugefügt. Beispielsweise /etc/group
sieht der My Audio Group-Eintrag in folgendermaßen aus:
audio:x:29:pulse,edge-case
Wo Puls auf die UID des Pulseaudio-Daemons abgebildet wird und Edge-Case auf meine UID (1000) auf meiner Linux-Box abgebildet wird.
So wie ich es verstehe, erhält jede App, die auf Android installiert wird, eine eigene UID und GID. Dies ist die Grundlage für das "Sandboxing" von Apps, die auf Android ausgeführt werden und nicht auf Daten einer anderen zugreifen können Prozesse oder Dateien, die einer anderen App gehören, es sei denn, in einer Manifest-Datei, die von App-Programmierern erstellt wurde, ist festgelegt, welche Informationen für andere Apps freigegeben werden sollen und welche nicht. Auf diese Weise erhalten Apps auch Zugang zu Netzwerkdiensten während der Installation, oder fordern diese an, der INTERNET-Gruppe hinzugefügt zu werden, oder ähnliches. Zitieren Sie mich nicht auf den Namen der NET-Netzgruppe, es könnte sich eher um INET oder handeln So oder so, wie ich weiß, gibt es in INET6 mehrere Netzwerkzugriffsebenen, die einer Anwendung über diesen Mechanismus unter Android gewährt werden können.
Meine Frage ist, wo diese Informationen in Android gespeichert sind?
Ist es außerdem möglich, Änderungen vorzunehmen?
Ich möchte einen glibc-Stack damit integrieren und die darin enthaltenen Daten in meine /etc/{passwd,group}
Dateien, vertraue mir, sie existieren auf meinem Telefon, ich habe sogar eine Menge anderer Extras installiert.
Update: Ich habe mehr gesucht und dies könnte das sein, wonach ich suche.
Ich muss ein bisschen tiefer graben und sicherstellen, dass es alles ist, was ich suche.
Update: (5:40 27. Juni 2014)
Da jemand denkt, ich wüsste nicht, was ich tue oder wovon ich rede, lass es mich klarstellen.
Benutzer-UIDs unter Android werden mit 100000 und App-UIDs mit 10000 versetzt, wenn sie der Benutzernummer _ App-Nummer zugeordnet sind. Wenn also ein ps so etwas wie u0_a10 anzeigt, bedeutet dies, dass Benutzer mit UID 100000 eine App mit UID 10010 ausführt.
Ich habe UID- und Benutzer- / Daemon-Namen aus system / core / include / private / android_filesystem_config.h abgerufen und diese verwendet, um meine / etc / passwd- und / etc / group-Dateien (auf meiner Android-Box) zu aktualisieren, zum Beispiel meine / etc / Die passwd-Datei (auf meiner Android-Box) sieht folgendermaßen aus:
....
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
....
Ich habe die Konfiguration in /etc/adduser.conf so eingerichtet, dass neue Benutzer erstellt werden (auf meiner Android-Box):
# 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
Dies entspricht der Android-Richtlinie, ich lasse "glibc-basierte" Systembenutzer immer noch aus dem Bereich 100-999 erstellen, und ich habe den Audio-Benutzer in meinen Dateien / etc / passwd und / etc / group auf 1005 geändert es ist auf Android.
Ich muss Android aktualisieren und mit Informationen zu meinen Benutzer-UIDs sowie zu meinen Daemon- oder Systembenutzer-UIDs aus dem glibc-Stack synchronisieren.
Lesen Sie mehr darüber in dem Buch "Embedded Android" von Karim Yaghmour, das hier verkauft wird
Mein Ziel ist es, Programme wie nvlc zum Laufen zu bringen, aber ich muss UIDs und GIDs synchronisieren, damit Android meine Benutzer und die Gruppen, denen sie angehören, kennt, damit beispielsweise mein Kopfnutzer Zugriff auf die Audiogeräte hat.
Außerdem muss ich Android über Postres und seine Mitgliedschaft in der Netzwerkgruppe informieren, damit es Sockets öffnen und den Zugriff auf Datenbanken ermöglichen kann. Ich habe PARANOID_NETWORKING vorerst im Kernel deaktiviert, aber dieser Hack dient nur dazu, Android so sicher wie Vanilla Linux zu machen, nicht weniger. Es wäre schön, die paranoide Einstellung beizubehalten und die Gruppenberechtigungen auf die Daemons / Benutzer anzuwenden, die ich für richtig halte.
Dies würde Android zu einem großartigen Betriebssystem für öffentlich zugängliche Server mit solch paranoiden und fein abgestimmten Steuerelementen machen. Stellen Sie sich vor, Sie haben Zugriff auf Kerberos, LDAP, PAM oder Wenn Sie Ihr Telefon als WAP mit konfiguriertem Radius verwenden. Alle diese Funktionen sind in Debian und anderen Distributions-Repos kostenlos verfügbar.
Ich habe das alles herausgefunden, ich muss nur wissen, wie man die UID / GID-Datenbank von Android aktualisiert, die jedes Mal aktualisiert wird, wenn Sie eine App installieren, also weiß ich, dass es möglich ist.
Update: (19:08 Uhr, 30. Juni 2014)
Nachdem Sie die Daten in den folgenden Dateien durchgegangen sind ...
/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml
... Ich habe meine Frage so aktualisiert, dass sie "Wie interpretiere ich sie?" Enthält.
- Ich denke, ich muss ein benutzerdefiniertes PAM-Modul erstellen und Bionic und Glibc in eine einzige C-Bibliothek mischen. Sie müssen mit Anwendungen auf beiden Seiten kompatibel sein, keine Ausnahmen. Erwarten Sie C ++ - Ausnahmen, die ich geschrieben habe ein paar Faustregeln-2 :), denen ich folgen soll. Möglicherweise muss ich auch einen Wrapper für gängige Paketverwaltungssysteme wie rpm und apt schreiben, der eine apk-Installation fälscht und jedem neuen deb | rpm-Paket eine UID verleiht und möglicherweise einfach alles in das FHS einbindet. Das könnte die idealste Lösung sein, für die ich gehen könnte, obwohl die meiste Arbeit, da jeder eine Reihe von Berechtigungen in seinem "Manifest" benötigt, vielleicht ein Menü während der Installation, das der Benutzer geben und nehmen kann, wie es sein muss.
- Hat jemand eine gute Referenz, die die Syntax dieser Dateien erklärt? Ich kenne mich mit XML nicht sehr gut aus. Ganz zu schweigen davon, dass die Verwendung normalerweise von der Anwendung abhängt, die es interpretiert.
- Ich verstehe die
packages.list
Datei mit Ausnahme desnull
Eintrags in der letzten Spalte, kann das jemand erklären?