Me he estado preguntando durante bastante tiempo; ¿dónde almacena Android su información de identificación de usuario y grupo?
Por ejemplo, en el Linux estándar, la información de usuarios y grupos se almacena en /etc/passwd
y /etc/group
respectivamente. Cuando añades un usuario a un grupo, su nombre de usuario/identidad se añade a la lista de usuarios de ese grupo, por ejemplo la entrada de mi grupo de audio en /etc/group
se parece a esto:
audio:x:29:pulse,edge-case
Donde pulso se mapea al uid del demonio pulseaudio y borde-caso se mapea a mi uid (1000), en mi caja de Linux.
Según tengo entendido, cada aplicación que se instala en Android obtiene su propio uid y gid y esta es la base del "sandboxing" de aplicaciones que se produce en Android ya que todas se ejecutan en su propio proceso y no pueden acceder a los datos de otro proceso o a los archivos propiedad de otra aplicación a menos que haya una declaración en un archivo manifiesto creado por los programadores de aplicaciones que dicte qué información debe ser compartida con otras aplicaciones y cuál no. Así es también como las aplicaciones obtienen o más bien solicitan el acceso a los servicios de red durante la instalación, solicitando ser añadidas al grupo INTERNET o algo así, no me cite en el nombre del grupo NET net, podría ser más como INET o INET6, de cualquier manera sé que hay varios niveles de acceso a la red que pueden ser concedidos a una aplicación a través de este mecanismo en Android.
Mi pregunta es, ¿dónde está almacenada esta información en Android?
Más aún, ¿es posible modificarlo?
Me gustaría integrar una pila glibc con ella y los datos dentro de ella en mi /etc/{passwd,group}
archivos, confía en mí, existen en mi teléfono, incluso he instalado aptos con un montón de otras cosas.
Actualización: Se han estado haciendo más búsquedas y Esto podría ser lo que estoy buscando.
Necesitaré cavar un poco más profundo y asegurarme de que es todo lo que estoy buscando.
Actualización: (5:40 27 de junio de 2014)
Ya que alguien cree que no sé lo que hago o de lo que hablo, déjame aclararlo;
Los UID de usuario en Android se compensan con 100000 y los UID de aplicación se compensan con 10000 cuando se asignan al número de usuario _ número de aplicación, por lo tanto cuando una ps muestra algo como u0_a10 lo que significa que el usuario con UID 100000 está ejecutando la aplicación con UID 10010,
He sacado el UID y los nombres de usuario/ demonio de system/core/include/private/android_filesystem_config.h y los he usado para actualizar mis archivos /etc/passwd y /etc/group (en mi caja de Android), por ejemplo mi archivo /etc/passwd (en mi caja de Android) se ve así :
....
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
....
He establecido la configuración en /etc/adduser.conf para crear nuevos usuarios así (en mi caja de 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
Esto es de acuerdo con la política de Android, dejé que los usuarios del sistema "basado en glibc" sigan siendo creados desde el rango 100-999 creo y modifiqué el usuario de audio en mis archivos /etc/passwd y /etc/group para que sean de 1005, como en Android.
Necesito actualizar Android y sincronizarlo con la información relativa a mis UIDs de usuario así como con mis Daemon o UIDs de usuario del sistema de la pila glibc.
Puedes leer más sobre esto en el libro "Embedded Android" de Karim Yaghmour Vendido aquí
Mi objetivo es hacer que programas como nvlc funcionen, pero necesito sincronizar los UID y GID para que Android conozca a mis usuarios y los grupos a los que pertenecen para que, por ejemplo, el usuario de mi cerebro tenga acceso a los dispositivos de audio.
También tengo que informar a Android sobre Postres y su pertenencia al grupo de la red para que pueda abrir los enchufes y permitir el acceso a las bases de datos. He desactivado PARANOID_NETWORKING en el kernel por el momento, pero este hack sólo sirve para hacer a Android tan seguro como Linux vainilla, nada menos. Sería bueno mantener la configuración paranoica y aplicar los permisos de grupo a los demonios/usuarios que considere adecuados.
Esto haría de Android un gran sistema operativo para servidores de cara al público con controles tan paranoicos y ajustados. Imagina tener acceso a Kerberos, LDAP, PAM, o al usar tu teléfono como WAP teniendo Radius configurado, todos los cuales están disponibles en Debian y otros repositorios de la distribución de forma gratuita.
Tengo todo esto resuelto, sólo necesito saber cómo actualizar la base de datos UID/GID de Android, que se actualiza cada vez que se instala una aplicación, así que sé que es posible.
Actualización : (7:08pm 30 de junio de 2014)
Después de revisar los datos en los siguientes archivos...
/data/system/packages.list
/data/system/packages.xml
/data/system/user/userlist.xml
/data/system/user/0.xml
... He actualizado mi pregunta para incluir "¿cómo lo interpreto?"
- Creo que voy a necesitar crear un módulo PAM personalizado y mezclar Bionic y Glibc en una sola biblioteca de C, necesitan ser compatibles con las aplicaciones de ambos lados, sin excepciones, esperen excepciones de C++ que es ;p--- he escrito un par de reglas de pulgar-2 :) para que yo las siga. También podría necesitar escribir un envoltorio para los sistemas de gestión de paquetes populares como rpm y apt que simule una instalación de apk y le dé a cada nuevo paquete deb|rpm un UID y tal vez sólo sym-link todo en el FHS. Esa podría ser la solución más ideal que podría buscar, aunque la más trabajosa, ya que cada uno necesitaría un conjunto de permisos en su "manifiesto", tal vez un menú durante la instalación y el usuario puede dar y tomar según sus necesidades.
- ¿Alguien tiene una buena referencia que explique la sintaxis de estos archivos? No estoy muy versado en XML, por no mencionar que su uso suele depender de la aplicación que lo interprete.
- Entiendo que el
packages.list
con la excepción del archivonull
en la última columna, ¿alguien puede explicar eso?
0 votos
Posible duplicado de ¿Dónde se almacenan los UID de cada aplicación?