Kann ich die Adb-Shell als root ausführen, ohne 'su' einzugeben?


45

Kann ich die Adb-Shell als root ausführen, ohne etwas einzugeben su? Ich möchte in der Lage sein, root-Zugriff zu haben, ohne in die Shell zu gehen.

Antworten:


40

Wenn ich Ihre Frage richtig verstehe, werden Sie gefragt, wie Sie beim Ausführen automatisch Root-Zugriff erhalten adb shell, damit Sie nicht in die Shell gehen und sueinen Befehl eingeben müssen, um als Root auf Ihrem Telefon ausgeführt zu werden.

Dies wird durch ein Flag in Ihrer Startpartition gesteuert, das von den meisten benutzerdefinierten ROMs so geändert wurde, dass standardmäßig Root-Berechtigungen gewährt werden. Wenn Sie $bei der Verwendung auf a fallen gelassen werden, stehen adb shellIhnen zwei permanente und eine temporäre Option zur Verfügung (temporär bedeutet, dass es beim Neustart nicht funktioniert):

  1. Flashen Sie ein ROM, das die Änderung enthält
  2. Erstellen Sie eine benutzerdefinierte boot.img und flashen Sie sie auf Ihr Telefon
  3. Starten Sie adbdauf Ihrem Gerät mit Root-Berechtigungen neu

Nummer 2 ist eigentlich nicht so schwer, aber es kann etwas gefährlich sein, wenn Sie nachlässig sind. Es gibt hier einen Wiki-Artikel , der den Vorgang erklärt und ein paar Perl-Skripte enthält, die Ihnen helfen sollen. Diese Anweisungen setzen eine Linux / Unix-Umgebung voraus. Ich habe diese Anweisungen persönlich unter Fedora Linux verwendet und kann Ihnen mitteilen, dass sie funktionieren, aber ich kenne keine anderen * nix-Umgebungen wie Macs. Ich kenne auch keine ähnlichen Windows-Anweisungen, aber ich könnte versuchen, einige aufzuspüren, wenn Sie unter Windows arbeiten. Die genauen Befehle sind von Telefon zu Telefon unterschiedlich, da verschiedene Geräte unterschiedliche Partitionstabellen verwenden.

Allgemein gesprochen, obwohl, müssen Sie Ihren aktuellen boot.img von Ihrem Telefon ziehen, entpacken, extrahieren Sie die RAM - Disk, und finden Sie die default.prop Datei. Dies ist eine Klartextdatei, die Sie in einem Texteditor öffnen und dann die Zeile finden müssen, die den Wert enthält ro.secure. Wenn in der Zeile steht ro.secure=1, müssen Sie dies in ändern ro.secure=0. Danach können Sie die Ramdisk und die boot.img neu packen und dann auf Ihr Telefon flashen. Nach dem Neustart werden Sie #jedes Mal, wenn Sie einen Vorgang ausführen adb shell, mit einer Eingabeaufforderung begrüßt , ohne dass Sie ihn ausführen müssen su.

Wenn Sie ein benutzerdefiniertes ROM verwenden, das diese Änderung jedoch nicht aufweist, können Sie das ROM einfach dekomprimieren und die darin enthaltene Datei boot.img mithilfe der obigen Schritte ändern. Anschließend können Sie das ROM mit der neu geänderten Datei boot.img komprimieren und die komprimierte Datei wie gewohnt flashen.

Dies ist wahrscheinlich selbstverständlich, aber seien Sie vorsichtig, wenn Sie dies tun. Wenn Sie mit Ihrer Boot-Partition spielen, kann dies Ihr Telefon zerstören und Sie zur Wiederherstellung über HBoot zwingen. Ich würde empfehlen, Fastboot zu testen, um sicherzustellen, dass Sie erweiterte Fastboot-Befehle verwenden und eine Wiederherstellung durchführen können. Dies hängt ein wenig von Ihrem Modell ab, aber die meisten Telefone verfügen über eine Art Desktop-Software, mit der das Telefon auch neu gestartet werden kann.


Die dritte Möglichkeit ist, dass in vielen Fällen ein Neustart adbdauf Ihrem Gerät mit Root-Rechten möglich ist. Eine Möglichkeit ist die Ausführung adb rootvon einem PC-Terminal aus, obwohl dies nicht für alle ROM-Konfigurationen funktioniert (das ROM muss als "userdebug" erstellt werden). Sie können auch die unsichere Chainfire-App ausprobieren . Dies wird auch nach einem Neustart nicht so bleiben. Sie müssten daher entweder die App verwenden oder adb rootdas Telefon bei jedem Neustart erneut starten.


Startet das Telefon auch mit Root-Berechtigungen? Könnte ein Sicherheitsproblem sein.
Matthew Read

1
@Matthew: AFAIK, es erlaubt adbdstandardmäßig nur , Root- Rechte auf dem Telefon zu haben. Es gibt einen Beitrag von einem Mitglied des Android-Teams, der dies impliziert, aber nicht explizit sagt. Diese Übergabe an das AOSP impliziert auch, dass es sich lediglich um ein Flag handelt, das adbdbeim Start überprüft wird (ich sehe es an keiner anderen Stelle in der Quelle). Wie ich bereits erwähnt habe, hat die Mehrheit der benutzerdefinierten ROMs, die ich gesehen habe (einschließlich CM), den
Wert

Ich werde jedoch sagen, dass ich nicht zu 100% der oben genannten Meinung bin. Ich kann keine offizielle Dokumentation zu der Datei default.prop finden, obwohl mein Google-fu heute Abend vielleicht nur schwach ist ...
eldarerathis

adb rootHabe gerade den Befehl entdeckt, adbd im Auto-Su-Modus neu zu starten, anscheinend hängt er davon ab. Ich glaube, Sie hatten Recht damit, dass es nur eine Flagge ist.
Matthew Read

1
@MatthewRead: Der Quellcode in dem Commit, mit dem ich verlinkt habe, hat tatsächlich einen Kommentar zu diesem Effekt :) // ... except we allow running as root in userdebug builds if the service.adb.root property has been set by the "adb root" command". So funktionierte übrigens die erste Version von BurritoRoot für den Kindle Fire, IIRC.
Eldarerathis

15

Wenn Ihr Telefon gerootet ist, können Sie Befehle mit dem Befehl "su -c" ausführen.

Hier ist ein Beispiel für einen cat-Befehl in der Datei build.prop, mit dem Produktinformationen für Telefone abgerufen werden können.

adb shell "su -c 'cat /system/build.prop |grep "product"'"

Dies ruft die Root-Berechtigung auf und führt den Befehl innerhalb des '' aus.

Beachten Sie die 5 End-Anführungszeichen, die erforderlich sind, damit Sie ALLE Ihre End-Anführungszeichen schließen. Andernfalls wird eine Fehlermeldung angezeigt.

Zur Verdeutlichung ist das Format so.

adb shell "su -c '[your command goes here]'"

Stellen Sie sicher, dass Sie den Befehl GENAU so eingeben, wie Sie es normalerweise tun würden, wenn Sie ihn in der Shell ausführen.

Probieren Sie es aus, ich hoffe, das hilft.



1

Wofür versuchst du als root zu laufen? Sie sagen, dass Sie die ADB-Shell mit root ausführen möchten, aber nicht die ADB-Shell verwenden möchten? Könntest Du das erläutern?

Wenn die Anwendung den Root-Zugriff anfordert, sollte die SuperUser-Anwendung auf Ihrem Telefon die Erlaubnis erteilen oder nicht. Der Prozess, in dem Sie Ihr Telefon gerootet haben, sollte eine SuperUser-Anwendung enthalten haben.


Ich möchte adb shell gdbserver von meinem Terminal ausführen, anstatt in die Shell zu gehen, um es auszuführen
Hank

2
@Hank: Ein Terminal muss fast immer mit einer Shell verbunden sein, um nützliche Arbeit zu leisten. Vielleicht sollten Sie Ihre Definition von "Terminal" und "Shell" präzisieren, da Sie anscheinend eine andere Vorstellung davon haben, was sie waren als in der Standardsprache von Linux / Android
Lie Ryan

Sie können also adb shell psoder adb shellund dann psdie Liste der ausgeführten Prozesse abrufen. Für einige Dinge ist Root-Zugriff erforderlich. Ich möchte in der Lage sein, Ersteres zu tun.
Hank

1
Der Grund für das "Warum" (insbesondere in Bezug auf gdbserver) ist, dass die Funktion in einem Skript verwendet werden kann, das auf dem Entwicklungscomputer ausgeführt wird. Es ist jedoch möglich, dass ein Skript Befehle an das weiterleitet, was adb als interaktive Shell ansieht. Daher ist es nicht unbedingt erforderlich, dass adb standardmäßig auf root gesetzt ist.
Chris Stratton

1

Alternativ können Sie Ihr Skript am Telefon schreiben und es einfach von adb ausführen lassen, zum Beispiel:

adb shell sh /sdcard/myscript.sh

Das Skript kann sich ohne Ihr Eingreifen selbst erhöhen (vorausgesetzt, SuperUser merkt sich die Genehmigung), zum Beispiel:

su
pm setInstallLocation 1

Ich habe dies nur mit Erfolg auf meinem Telefon gemacht. Das einzige Problem war, dass ich nicht genau herausgefunden habe, wie ich die AdB-Shell-Sitzung sauber beenden kann. Ich muss Strg-C in meiner Windows-Shell drücken, um zur Windows-Eingabeaufforderung zurückzukehren. Andernfalls sitzt adb nur an der #Eingabeaufforderung und akzeptiert keine Eingaben.


0

Ich benutze für die Reparatur Home Button Problem Fehler


adb Geräte

adb shell su -c commands

oder

ADB-Root-Shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "INSERT INTO secure (Name, Wert) VALUES ('device_provisioned', '1');"

adb kill-server


-1

Sie können auch das suid-Bit auf Ihr "sh" setzen. Ich verwende BusyBox, daher stimmen die Anweisungen möglicherweise nicht mit Ihrem Setup überein:

  1. ADB Shell
  2. su
  3. mount -o remount, rw / system (oder: adb remount)
  4. ls -la / system / bin / sh lrwxr-xr-x root-Shell 2012-11-10 15:20 sh -> mksh
  5. chmod 4755 / system / bin / sh
  6. ls -la / system / bin / mksh
    -rwsr-xr-x Root-Shell 157520 2012-11-10 09:54 mksh (beachte, dass das suid-Bit gesetzt ist)
  7. ^ D
  8. ADB Shell

und Sie sollten die root-Eingabeaufforderung haben


3
-1 von mir. Das ist unsicher und öffnet ein riesiges Loch. Jede APP könnte Root werden und Chaos anrichten.
ce4

6
Tun Sie das auf keinen Fall, dies ist eine katastrophale Sicherheitslücke . (Haftungsausschluss: Ich bin der mkshBetreuer.)
Mirabilos
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.