Ich möchte den folgenden Befehl als root im Android Terminal Emulator ausführen .
mount -o bind /storage/extSdCard /data/media
Ich habe dies auf einem Samsung Galaxy S3 mit CyanogenMod 11 getestet und es funktioniert wie erwartet. Wenn ich /data/media
mit einer anderen App wie dem Dateimanager ES File Explorer einsteige, erhalte ich den Inhalt der externen SD-Karte anstelle des internen Speichers.
Das Problem ist, dass dies auf einem anderen S3, den ich habe, nicht funktioniert, auf diesem läuft Stock TouchWiz ROM Version 4.3 und ist mit CF-Auto-Root gerootet . Ich habe auch versucht, Adams benutzerdefinierten Kernel zu verwenden, und es funktioniert auch nicht.
ls /data/media
Wenn ich den Befehl auf dem Terminal ausführe und dann als root eintippe, wird der Inhalt der externen SD-Karte angezeigt, aber wenn ich ein anderes Terminal als normaler Benutzer (nicht root) starte und denselben Befehl eingebe, erhalte ich den Inhalt des internen Speicher. Dasselbe passiert, wenn ich versuche, /data/media
mit dem Dateimanager ES File Explorer darauf zuzugreifen
Es scheint also, dass Root-Befehle nur für den Root-Benutzer wirksam sind, nicht für andere systemweite Benutzer. Was könnte die Ursache für dieses Verhalten sein?
UPDATE: OK, mein Fehler, ich habe mich nicht richtig ausgedrückt. Es stimmt, dass ein normaler Benutzer nicht darauf zugreifen kann /data/media
. Aber /data/media
der wahre Ort der Dateien ist der interne Speicher. Es gibt viele Pfade, auf denen Android diesen Speicher für normale Benutzer verfügbar macht, wie /sdcard
oder /storage/sdcard0
, die beide /data/media/0
über ein FUSE-Dateisystem verweisen.
Mein Gedanke hier ist, dass, wenn ich einen Ordner mit dem Namen 0
auf der externen SD erstelle und dann /storage/extSdCard
an binde /data/media
, wenn das System versucht, darauf zuzugreifen, /sdcard
oder der Inhalt von as nicht mehr auf den internen Speicher, sondern stattdessen auf die externe SD /storage/sdcard0
verweist ./storage/extSdCard/0
/data/media
Dies funktioniert wie erwartet auf CM11, wenn ich es als Root ausführe
mount -o bind /storage/extSdCard /data/media
Wenn ich dann auf das Terminal zugreife /sdcard
, entweder als root oder als normaler Benutzer, erhalte ich den Inhalt von /storage/extSdCard/0
. Dasselbe passiert, wenn ich ES File Explorer im normalen oder Root-Modus verwende
Aber wenn ich dasselbe mit der gerooteten Stock 4.3-Firmware mache, funktioniert es nicht. Nur root auf dem Terminal kann die Änderungen sehen, normale Benutzer auf dem Terminal und normale und root-Benutzer auf ES File Explorer sehen keine Änderung
Mein Fall, ich nehme an, es ist der gleiche Grund für Sie.
Gehen Sie zu Ihrer Superuser-Manager-App, ich nehme an, es ist SuperSU.
Gehen Sie zu den Einstellungen und suchen Sie nach „Mount Namespace Separation“ und prüfen Sie, ob es aktiviert ist. Deaktivieren Sie die Option und starten Sie neu.
SuperSU hat diese Option bereitgestellt, um Ihr System sicherer zu machen, indem der Mount-Namespace einer App vor dem anderer versteckt wird. Wenn Sie also etwas mounten oder unmounten, ist es nur für die App (UID) sichtbar, die Sie verwenden, und sonst nichts.
Alternativ su
können Sie beim Ausführen von eine Option hinzufügen, -m
damit Ihre Shell die Kontrolle über den Master-Mount-Namespace hat. Dann funktionieren deine Reittiere global.
Anscheinend ist dies jetzt eine Sicherheitsfunktion von Android SELinux – Mounts, die von den meisten Prozessen initiiert werden, sind für andere Prozesse nicht sichtbar. Siehe diese Antwort .
Ein verwandter Android-Kernel-Entwicklungsthread schlägt vor, einen nicht benötigten Systemdienst (z. B. /system/bin/debuggerd
) durch ein Shell-Skript zu ersetzen, das den gewünschten Mount-Befehl ausführt. Dies würden Sie mit starten start debuggerd
.
Update: Dies hat bei mir nach einem Neustart funktioniert.
Feuerlord
I get the contents of the internal memory.)
-- Ich verstehe nicht, wie ein normaler Benutzer/data/media
ohne erhöhte Rechte überhaupt Inhalte sehen kann. Sie sollten eine Fehlermeldung im Terminal erhalten, etwa "Operation nicht zulässig". In Bezug auf Ihren zweiten Fall mit ES sollte ES als normaler Benutzer nichts im/data
Verzeichnis anzeigen, und ich weiß nicht, wie ich mit ES direkt zu einem bestimmten Ort wechseln kann (es scheint keine Standortleiste zu haben). Trotzdem/data/media
kann ein normaler Benutzer mit Terminal immer noch darauf zugreifen. Ich habe es überprüft, funktioniert gut.ZapperDJ