3 votos

¿Cuál es el UID "u#_everybody"?

En (multi-usuario) Android hay UIDs como estos:

  • u0_everybody
  • u10_everybody
  • u11_everybody

Parecen diferentes a los habituales UIDs uXX_aYY utilizados para las aplicaciones. ¿Cuál es su propósito? ¿Es esta una forma de hacer que los archivos estén disponibles para todas las aplicaciones (compartir entre aplicaciones de una cuenta de usuario)?

6voto

Jack Wade Puntos 231

Como se indica aquí:

Las interacciones entre usuarios están bloqueadas usando el GID everybody.

Android reserva UIDs / GIDs que van desde 10000 hasta 19999 para aplicaciones. AID_EVERYBODY es uno de los grupos especiales, que se utiliza para controlar la capacidad de lectura / escritura de la aplicación en el almacenamiento externo (/sdcard). Este grupo tiene GID 9997 para el propietario del dispositivo. Si hay perfiles o múltiples usuarios, el GID toma la forma de XX09997, donde XX es UserID. Así que u11_everybody se resuelve a UID 1109997 y u11_a500 a 1110500.

A partir de Android 6, cada aplicación tiene su propia vista de /sdcard, que está controlada exponiendo /data/media/[UserID] con diferentes permisos. Esto se logra utilizando un sistema de archivos emulado (anteriormente FUSE, ahora sdcardfs) y espacios de nombres de montaje. Para el propietario del dispositivo es decir, UserId 0, /sdcard aparece con las siguientes tres VISTAS de conjuntos de permisos:

  1. Para procesos en ejecución en el espacio de nombres de montaje root como init, netd, vold, etc., los permisos aparecen como 0.1015, 0771.
  2. Para procesos que tienen android.permission.READ_EXTERNAL_STORAGE, los permisos aparecen como 0.9997, 0750.
  3. Para procesos que tienen android.permission.WRITE_EXTERNAL_STORAGE, los permisos aparecen como 0.9997, 0770.

La captura de pantalla muestra tres VISTAS emuladas con diferentes valores de gid y máscara para obtener diferentes conjuntos de permisos: introducir descripción de la imagen aquí * Los archivos nunca tienen permiso de ejecución es decir, máscara=6 se convierte en máscara=7 para archivos.
* máscara=23 aparece incorrecto, ¿puede ser un error? En realidad es máscara=27.

Teniendo en cuenta las tres distintas VISTAS, llegamos a cuatro situaciones:

  1. Los procesos que se ejecutan como root, es decir, UID 0, siempre tienen acceso de lectura/escritura a /sdcard. Sin embargo, si un proceso no privilegiado que se ejecuta en el espacio de nombres de montaje root desea acceso de lectura/escritura a /sdcard, eso sería controlado por el grupo AID_SDCARD_RW (GID 1015). Un ejemplo es el daemon de ADB que se ejecuta con UID / GID 2000 pero 1015 en sus grupos suplementarios.

Dado que cada aplicación se ejecuta con su UID único en un espacio de nombres de montaje separado:

  1. Las aplicaciones sin permisos READ/WRITE_EXTERNAL_STORAGE no podrán leer ni escribir en /sdcard.

Dado que cada aplicación es miembro del grupo everybody (9997):

  1. Las aplicaciones con permiso READ_EXTERNAL_STORAGE podrán leer el /sdcard.
  2. Las aplicaciones con permiso WRITE_EXTERNAL_STORAGE podrán escribir en /sdcard. Por lo tanto, la aplicación tiene acceso completo de lectura/escritura al Almacenamiento Público compartido / externo, incluido el Almacenamiento Privado de otras aplicaciones.

Hay una excepción a las reglas anteriores para aplicaciones; cada aplicación siempre tiene acceso de lectura/escritura a su propio Almacenamiento Privado Externo. Tomemos como ejemplo la aplicación com.xyz con UID 10500. Además del directorio de datos interno /data/data/com.xyz, la aplicación tiene un directorio de Almacenamiento Privado /sdcard/Android/data/com.xyz con UID propietario 10500. Por lo tanto, este directorio siempre es legible / escribible por la aplicación.
Tenga en cuenta que /sdcard/Android/data es accesible para todas las aplicaciones, pero sin acceso de lectura/escritura.

De la misma manera funciona para otras cuentas de usuario / perfiles.

Paquetes Binarios Opacos: (OBB)

Algunas aplicaciones necesitan almacenamiento adicional para guardar archivos grandes que no se pueden incluir en el archivo .apk debido al límite máximo de tamaño de 100MB. Hay dos posibles ubicaciones de obb donde se guardan estos archivos: /data/media/obb/ y /sdcard/Android/obb/. El primero fue introducido antes del concepto de múltiples usuarios, por lo que solo está disponible para el propietario del dispositivo. El segundo está disponible para aplicaciones en cuentas de usuario múltiples / perfiles también.
El acceso al primero se controla de la misma manera que al /sdcard, mientras que el segundo siempre es accesible por una aplicación, al igual que el almacenamiento externo privado.


RELACIONADO:

0 votos

Considerando la longitud que recorriste (es decir, partes de código fuente de referencia) puedo apreciar el esfuerzo puesto en esta respuesta y agradecerte. Aquí también como comentario algunos puntos sería genial confirmar. 1) con Android 6 diferentes usuarios (multi-usuarios) están mejor aislados, que solo simples aplicaciones (usando espacios de nombres de montaje), ¿verdad? 2) los diversos tipos (es decir, por usuario) del todos (9997) GID sirven el propósito de dar acceso a /sdcard acceso a las aplicaciones, permitir a las aplicaciones acceder a un lugar común /sdcard y no solo su /sdcard/Android/data/com.xyz "privado de la aplicación", ¿correcto?

0 votos

¿Existe todavía esta carpeta obb en Android, ¿funciona este mecanismo de "compartir entre usuarios" en combinación con el aislamiento del espacio de nombres de mount?

0 votos

@humanityANDpeace 1) Lo he mencionado en un comentario en tu pregunta anterior, puedo agregarlo como respuesta si es necesario. La única aislación adicional notable entre aplicaciones de diferentes cuentas de usuario es el almacenamiento compartido separado (es decir, /sdcard). 2) Sí, el grupo everyone solo sirve para controlar el acceso de las aplicaciones al almacenamiento externo compartido público (/sdcard) y al almacenamiento externo privado de otras aplicaciones (/sdcard/Android/data/*). Una aplicación siempre tiene acceso de lectura/escritura a su propio almacenamiento externo privado /sdcard/Android/data/com.xyz. La sección OBB se agrega a la respuesta

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X