Wie rufe ich "su" über eine Terminal-Eingabeaufforderung auf?

7

Ich kann eine Root-Eingabeaufforderung im Terminal erhalten, indem ich einen an anderer Stelle dokumentierten Exploit ausführe. (zB hier: http://wiki.cyanogenmod.com/wiki/Motorola_Droid_2_Global:_Full_Update_Guide )

Zu diesem Zeitpunkt kann ich die Binärdatei "su" installieren und ihr die Berechtigung 4755 erteilen. Dies sollte es jedem ermöglichen, sie auszuführen. Da der Eigentümer der Binärdatei "root" ist und das Sticky-Bit gesetzt ist, sollte ich root werden. Aber ich habe anscheinend keine Möglichkeit, mich vom Terminal zu lösen, bevor ich neu gestartet habe. Aber nach dem Neustart kann ich mit 'su' scheinbar nicht root werden.

$ ls -l /system/bin/su
-rwsr-xr-x root    app_101    26234 2012-07-09 15:00 su

Ok, die Berechtigungen sehen gut aus, sollte ich sie ausführen können, um root zu werden, aber nur bei diesem bestimmten Aufruf des Terminals.

$ /system/bin/su
Permission denied

Es schlägt auch fehl, wenn ich den Befehl als root oder mit anderen Argumenten angeben:

$ /system/bin/su /system/bin/sh
Permission denied

Warum? Gibt es einen anderen Mechanismus bei der Arbeit? Ich möchte Superuser.apk nicht installieren, da ich nur eine Möglichkeit haben möchte, bei Bedarf vorübergehend eine Root-Shell abzurufen, um beispielsweise unerwünschte Dateien manuell zu löschen. Außerdem verlässt sich Superuser.apk sowieso auf die su-Binärdatei, daher muss es eine Möglichkeit geben, sie aufzurufen. Warum kann ich das nicht im Terminal replizieren?

Bearbeiten: Ich hatte einen anderen Gedanken, also habe ich versucht, / bin / sh an einen anderen Ort zu kopieren und es suid root gemacht. Aber während ich die neue Binärdatei ausführen kann, gibt sie mir keine Wurzel. Macht Android mit suid etwas Kniffliges / Anderes, was normales Linux nicht tut?

Michael
quelle
1
Ein ungeschütztes 'su' auf dem Gerät zu haben, ist ziemlich riskant, da jeder, der versucht, es zu verwenden, es ohne die Bestätigung des Benutzers erhält, dass Dinge wie diese Superuser-App versuchen, als Gateway hinzuzufügen.
Chris Stratton
Richtig, na ja ... ich habe versucht, vorauszuplanen. Ich war mir nicht sicher, wie ein nachfolgendes Update versuchen würde, su loszuwerden, also habe ich es an verschiedenen Stellen mit unterschiedlichen Namen platziert. Es stellt sich heraus, dass das Update das klebrige Bit entfernt und ich nicht suid von anderen Orten als dem System ausführen kann. Ah, gut.
Michael

Antworten:

6

Der Hinweis ist in der Eigentümer- / Gruppen-ID ...

$ ls -l /system/bin/su
-rwsr-xr-x root    app_101    26234 2012-07-09 15:00 su

Beachten Sie, dass die Gruppen-ID auf 'app_101' gesetzt ist, das sollte 'root' sein, aber busyboxandererseits benötigen Sie die Binärdatei (die Teil der SuperUser.apk-Binärdatei ist, in die sie bei der Installation die entsprechende Binärdatei kopiert /system/xbin) dazu in der Lage chownsein.

t0mm13b
quelle
Ja, dies wäre ein Problem. Letztendlich wird eine Busybox nicht benötigt, da der Standard-Android-Chown auch die Gruppe ändern kann, indem er den Dateinamen chown user.group (zumindest von Froyo-ICS) verwendet
Chris Stratton
1

Versuchen Sie, die -cOption hinzuzufügen . z.B

su -c sh

oder

 su -c 'echo bogus'

(für weitere Argumente)

d14b0ll0s
quelle
0

Ein bisschen mehr graben und ich denke, ich habe die Antwort aufgedeckt. Der Grund, warum es nicht funktioniert, ist, dass die Terminal-App in ihrem Manifest keine Superuser-Berechtigung anfordert, z.

<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>

Diese zusätzliche Sicherheitsebene scheint darauf zurückzuführen zu sein, dass es sich bei der Terminalanwendung um eine Java-Anwendung handelt, obwohl sie diese gut versteckt. Der Superuser scheint die Dinge irgendwie zu verändern, so dass Java-Apps diese Berechtigung erhalten können, auch wenn sie nicht wussten, dass sie sie beim Erstellen benötigen.

Michael
quelle
2
ACCESS_SUPERUSERErlaubnis ist nicht mit Ihrem Problem verbunden
Janot