Je me demande depuis un certain temps maintenant; où Android stocke-t-il ses informations sur les identifiants des utilisateurs et des groupes?
Par exemple, sur Linux standard, les informations sur les utilisateurs et les groupes sont stockées dans /etc/passwd
et /etc/group
, respectivement. Lorsque vous ajoutez un utilisateur à un groupe, son nom d'utilisateur / UID est ajouté à la liste des utilisateurs de ce groupe, par exemple l'entrée my group audio dans /etc/group
ressemble à ceci:
audio:x:29:pulse,edge-case
Où pulse est mappé à l'uid du démon pulseaudio et edge-case est mappé à mon uid (1000), sur ma boîte Linux.
Si je comprends bien, chaque application installée sur Android obtient son propre uid et gid et c'est la base du "sandboxing" des applications qui se produit sur Android car elles s'exécutent toutes dans leur propre processus et ne peuvent pas accéder aux données d'une autre processus ou fichiers appartenant à une autre application, à moins qu'il n'y ait une déclaration dans un fichier manifeste créé par les programmeurs d'application qui dicte quelles informations doivent être partagées avec d'autres applications et ce qui ne l'est pas. C'est aussi ainsi que les applications gagnent ou préfèrent accéder aux services de mise en réseau pendant l'installation en demandant à être ajoutées au groupe INTERNET ou quelque chose comme ça, ne me citez pas sur le nom du groupe net NET, cela pourrait être plus comme INET ou INET6, de toute façon, je sais qu'il existe plusieurs niveaux d'accès au réseau qui peuvent être accordés à une application via ce mécanisme sur Android.
Ma question est, où ces informations sont-elles stockées dans Android?
De plus, est-il possible de modifier?
Je voudrais intégrer une pile glibc avec elle et les données qu'elle contient dans mes /etc/{passwd,group}
fichiers, croyez-moi, elles existent sur mon téléphone, je les ai même installées avec beaucoup d'autres goodies.
Mise à jour: J'ai fait plus de recherches et c'est peut-être ce que je recherche.
Je vais devoir creuser un peu plus et m'assurer que c'est tout ce que je recherche.
Mise à jour: (5:40 27 juin 2014)
Puisque quelqu'un pense que je ne sais pas ce que je fais ou dont je parle, permettez-moi de clarifier;
Les UID utilisateur sur Android sont décalés de 100000 et les UID d'application sont décalés de 10000 lorsqu'ils sont mappés au numéro d'utilisateur _ numéro d'application, donc lorsqu'un ps affiche quelque chose comme u0_a10, ce qui signifie que l'utilisateur avec UID 100000 exécute l'application avec UID 10010,
J'ai extrait l'UID et les noms d'utilisateur / démon de system / core / include / private / android_filesystem_config.h et les ai utilisés pour mettre à jour mes fichiers / etc / passwd et / etc / group (Sur ma boîte Android), par exemple mon / etc / Le fichier passwd (sur ma boîte Android) ressemble à ceci:
....
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
....
J'ai mis en place la configuration dans /etc/adduser.conf pour créer de nouveaux utilisateurs comme ça (sur ma boîte 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
Ceci est conforme à la politique d'Android, je laisse les utilisateurs du système "basés sur la glibc" être créés à partir de la plage 100-999 je crois et j'ai modifié l'utilisateur audio sur mes fichiers / etc / passwd et / etc / group pour qu'il soit de 1005, comme c'est sur Android.
J'ai besoin de mettre à jour Android et de le synchroniser avec les informations concernant mes UID utilisateur ainsi qu'avec mes UID utilisateur Daemon ou système de la pile glibc.
Vous pouvez en savoir plus à ce sujet dans le livre "Embedded Android" de Karim Yaghmour Vendu ici
Mon objectif est de faire fonctionner des programmes comme nvlc, mais je dois synchroniser les UID et les GID pour qu'Android soit au courant de mes utilisateurs et des groupes auxquels ils appartiennent afin que, par exemple, mon utilisateur intelligent ait accès aux périphériques audio.
Je dois également informer Android de Postres et de son appartenance au groupe réseau afin qu'il puisse ouvrir des sockets et autoriser l'accès aux bases de données. J'ai désactivé PARANOID_NETWORKING dans le noyau pour le moment, mais ce hack ne sert qu'à rendre Android aussi sécurisé que Linux vanilla, rien de moins. Il serait bon de conserver le paramètre paranoïaque et d'appliquer les autorisations de groupe aux démons / utilisateurs que je juge appropriés.
Cela ferait d'Android un excellent système d'exploitation pour les serveurs publics avec de tels contrôles paranoïaques et affinés. Imaginez que vous ayez accès à Kerberos, LDAP, PAM ou lorsque vous utilisez votre téléphone en tant que WAP avec Radius configuré, qui sont tous disponibles gratuitement depuis Debian et d'autres référentiels de distribution.
J'ai tout compris, j'ai juste besoin de savoir comment mettre à jour la base de données UID / GID d'Android, qui est mise à jour chaque fois que vous installez une application, donc je sais que c'est possible.
Mise à jour: (19 h 08, 30 juin 2014)
Après avoir parcouru les données dans les fichiers suivants ...
/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml
... J'ai mis à jour ma question pour inclure "comment l'interpréter?"
- Je pense que je vais devoir créer un module PAM personnalisé et mélanger Bionic et Glibc en une seule bibliothèque C, ils doivent être compatibles avec les applications des deux côtés, sans exception, attendez-vous à des exceptions C ++; p --- J'ai écrit quelques règles de base-2 :) pour moi de suivre. Je pourrais également avoir besoin d'écrire un wrapper sur des systèmes de gestion de paquets populaires comme rpm et apt qui simule une installation apk et donne à chaque nouveau paquet deb | rpm un UID et peut-être simplement tout relier par sym-sym dans le FHS. Cela pourrait être la solution la plus idéale pour laquelle je pourrais aller, bien que la plupart fonctionnent, car chacun aurait besoin d'un ensemble d'autorisations dans son "manifeste", peut-être un menu pendant l'installation et l'utilisateur peut donner et prendre selon les besoins.
- Quelqu'un at-il une bonne référence qui explique la syntaxe de ces fichiers? Je ne connais pas très bien le XML, sans oublier que son utilisation dépend généralement de l'application qui l'interprète.
- Je comprends le
packages.list
fichier à l'exception de l'null
entrée dans la dernière colonne, quelqu'un peut-il expliquer cela?