Je me demande depuis un certain temps maintenant où Android stocke ses informations d'identification d'utilisateur et de groupe.
Par exemple, sous Linux standard, les informations sur les utilisateurs et les groupes sont stockées dans le répertoire /etc/passwd
y /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 du groupe mon audio dans /etc/group
ressemble à ça :
audio:x:29:pulse,edge-case
Où pulse est mappé à l'uid du daemon pulseaudio et edge-case est mappé à mon uid (1000), sur ma boîte Linux.
D'après ce que j'ai compris, 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'un autre processus ou aux fichiers appartenant à une autre application, à moins qu'il n'y ait une déclaration dans un fichier Manifest créé par les programmeurs de l'application qui dicte quelles informations doivent être partagées avec d'autres applications ou non. C'est également de cette façon que les applications obtiennent ou plutôt demandent l'accès aux services de réseau pendant l'installation en demandant à être ajoutées au groupe INTERNET ou quelque chose comme ça, ne me citez pas le nom du groupe NET net, il pourrait être plus comme INET ou INET6, de toute façon je sais qu'il y a plusieurs niveaux d'accès au réseau qui peuvent être accordés à une application par ce mécanisme sur Android.
Ma question est la suivante : où ces informations sont-elles stockées dans Android ?
En outre, est-il possible de le modifier ?
J'aimerais y intégrer une pile glibc et les données qu'elle contient dans mon /etc/{passwd,group}
croyez-moi, ils existent sur mon téléphone, j'ai même installé apt avec plein d'autres choses.
Mise à jour : J'ai fait plus de recherches et C'est peut-être ce que je cherche.
Je vais devoir creuser un peu plus et m'assurer que c'est tout ce que je recherche.
Mise à jour : (5:40 le 27 juin 2014)
Puisque quelqu'un pense que je ne sais pas ce que je fais ou ce dont je parle, permettez-moi de clarifier ;
Les UID des utilisateurs sur Android sont décalés de 100000 et les UID des applications sont décalés de 10000 lorsqu'ils sont mappés au numéro d'utilisateur _ numéro d'application, donc lorsqu'un ps montre quelque chose comme u0_a10, cela signifie que l'utilisateur avec l'UID 100000 exécute l'application avec l'UID 10010,
J'ai extrait les noms d'UID et d'utilisateur/daemon 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 mon boîtier Android), par exemple mon fichier /etc/passwd (sur mon boîtier 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 une configuration dans /etc/adduser.conf pour créer de nouveaux utilisateurs comme ceci (sur mon 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 en accord avec la politique d'Android, je laisse les utilisateurs du système "basé sur la glibc" être créés dans la plage 100-999 je crois et j'ai modifié l'utilisateur audio sur mes fichiers /etc/passwd et /etc/group pour être de 1005, comme c'est le cas sur Android.
J'ai besoin de mettre à jour Android et de le synchroniser avec les informations concernant mes UID d'utilisateur ainsi qu'avec mes UID de démon ou d'utilisateur 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 j'ai besoin de synchroniser les UID et les GID pour qu'Android connaisse mes utilisateurs et les groupes auxquels ils appartiennent, afin que, par exemple, mon utilisateur brainard ait accès aux périphériques audio.
J'ai également besoin d'informer Android de Postres et de son appartenance au groupe réseau afin qu'il puisse ouvrir des sockets et permettre 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ûr que vanilla Linux, pas moins. Ce serait bien de garder le paramètre paranoïaque et d'appliquer les permissions de groupe aux démons/utilisateurs qui me conviennent.
Cela ferait d'Android un excellent système d'exploitation pour les serveurs publics avec des contrôles aussi paranoïaques et précis. Imaginez que vous ayez accès à Kerberos, LDAP, PAM, ou que vous utilisiez votre téléphone comme WAP avec Radius configuré, tous ces systèmes sont disponibles gratuitement dans Debian et d'autres distributions.
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 le 30 juin 2014)
Après avoir examiné 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 fusionner Bionic et Glibc en une seule bibliothèque C. Ils doivent être compatibles avec les applications des deux côtés, sans exceptions, sauf les exceptions C++ ;p--- J'ai écrit quelques règles du pouce-2 :) à suivre. Je pourrais aussi avoir besoin d'écrire un wrapper pour les 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 juste un lien symétrique vers le FHS. C'est peut-être la solution la plus idéale que je puisse adopter, mais c'est aussi celle qui demande le plus de travail, car chaque paquet aurait besoin d'un ensemble de permissions dans son "manifeste", peut-être un menu pendant l'installation et l'utilisateur pourrait donner et prendre ce qu'il veut.
- Quelqu'un a-t-il une bonne référence qui explique la syntaxe de ces fichiers ? Je ne connais pas très bien le XML, sans compter que son utilisation dépend généralement de l'application qui l'interprète.
- Je comprends que
packages.list
à l'exception de l'élémentnull
dans la dernière colonne, quelqu'un peut-il expliquer cela ?