¿Por qué no puedo usar su para ejecutar con los permisos de otra aplicación?

Es bien sabido que cada aplicación de Android es su propio usuario. Tengo Android Terminal Emulator instalado como usuario u0_a5 .

u0_a5@android:/ $ guau
u0_a5
u0_a5@android:/ $ grupos
u0_a5 sdcard_rw sdcard_r inet all_a5

Bajo adb, cualquier intento de usar el comando su para iniciar sesión como Android Terminal Emulator solo tiene éxito en parte. Como muestra la siguiente sesión de adb, los grupos de permisos a los que pertenece Android Terminal Emulator no se heredan, excepto el grupo de usuario predeterminado u0_a5 .

root@android:/ # su - u0_a5
Identificación desconocida: u0_a5
1|raíz@android:/ # su - 10005
app_5@android:/ $ guau
u0_a5
app_5@android:/ $ grupos
u0_a5

Como usuario 10005 , puedo eliminar archivos propiedad del usuario u0_a5 . Pero no puedo ejecutar comandos que requieran permisos especiales de Android, como "busybox wget protocol://some.uri", que requiere que una aplicación pertenezca al grupo inet .

Entonces, ¿hay alguna forma de suplantar y ejecutar una aplicación en su entorno de permisos específico? ¿O ejecutar con permisos completos de root es mi única (no) elección?

Respuestas (1)

Sí, usar root es la única forma de hacerlo.

Todos los demás grupos o nombres de usuario están bloqueados en la zona de usuario de Android mediante una técnica conocida como sandboxing . Esta es una función de seguridad implementada en el núcleo, por lo que deberá volver a trabajar en Android si aún desea tener éxito.

Ese "sandboxing" evita que una aplicación acceda a los datos de otra aplicación, etc., es cierto. Pero una vez que uno se convierte en root, esto ya no importa (el root puede ingresar a cualquier sandbox). Entonces, la pregunta realmente interesante es: ¿por qué la raíz no puede ingresar a un sandbox y luego "renunciar" a todos los permisos adicionales, excepto los que pertenecen a este sandbox? Esto sería a lo que se dirige el OP.