Warum kann ich su nicht verwenden, um unter den Berechtigungen einer anderen App ausgeführt zu werden?

7

Es ist bekannt, dass jede Android-App ein eigener Benutzer ist. Ich habe Android Terminal Emulator als Benutzer u0_a5 installiert .

u0_a5 @ android: / $ whoami
u0_a5
u0_a5 @ android: / $ groups
u0_a5 sdcard_rw sdcard_r inet all_a5

Unter adb ist jeder Versuch, sich mit dem Befehl su als Android Terminal Emulator anzumelden, nur teilweise erfolgreich. Wie die folgende ADB-Sitzung zeigt, werden die Berechtigungsgruppen, zu denen Android Terminal Emulator gehört, mit Ausnahme der Standardbenutzergruppe u0_a5 nicht vererbt .

root @ android: / # su - u0_a5
Unbekannte ID: u0_a5
1 | root @ android: / # su - 10005
app_5 @ android: / $ whoami
u0_a5
app_5 @ android: / $ groups
u0_a5

Als Benutzer 10005 kann ich Dateien löschen, die dem Benutzer u0_a5 gehören . Ich kann jedoch keine Befehle ausführen, für die spezielle Android-Berechtigungen erforderlich sind, z. B. "Busybox Wget Protocol: //some.uri", für die eine App zur inet- Gruppe gehören muss.

Gibt es also eine Möglichkeit, sich als eine App in ihrer spezifischen Berechtigungsumgebung auszugeben und auszuführen? Oder ist das Ausführen mit vollständigen Root-Berechtigungen meine einzige (Nicht-) Wahl?

Shell-Benutzer
quelle

Antworten:

2

Yup mit root ist der einzige Weg zu gehen.

Alle anderen Gruppen oder Benutzernamen werden durch eine als Sandboxing bekannte Technik im Benutzerland von Android gesperrt . Dies ist eine Sicherheitsfunktion, die im Kern implementiert ist. Sie müssen Android also überarbeiten, wenn Sie dennoch erfolgreich sein möchten.

Foren
quelle
2
Dieses "Sandboxing" verhindert, dass eine App auf Daten anderer Apps usw. zugreift. Aber sobald man root wird, spielt dies keine Rolle mehr (root kann in jede Sandbox gelangen). Die wirklich interessante Frage ist also: Warum kann root nicht in eine Sandbox eintreten und dann alle zusätzlichen Berechtigungen außer denen, die zu dieser Sandbox gehören, "aufgeben"? Dies ist das Ziel des OP.
Izzy