C'è un modo per eseguire la shell Adb come root senza digitare "su"?


45

Esiste un modo per eseguire la shell Adb come root senza digitare su? Voglio essere in grado di accedere alla radice senza entrare nella shell.

Risposte:


40

Se capisco correttamente la tua domanda, mi stai chiedendo come ottenere automaticamente l'accesso root quando esegui adb shell, in modo da non dover andare nella shell e digitare super eseguire un comando come root sul tuo telefono.

Questo è controllato da un flag nella partizione di avvio, che la maggior parte delle ROM personalizzate ha modificato per consentire l'autorizzazione di root per impostazione predefinita. Se vieni lasciato cadere a $quando utilizzi, adb shellhai due opzioni permanenti e una temporanea (il che significa che non si attacca al riavvio):

  1. Flash una ROM che include la modifica
  2. Crea un boot.img personalizzato e invialo sul tuo telefono
  3. Riavvia adbdsul dispositivo con i permessi di root

Il numero 2 in realtà non è poi così difficile, ma può essere alquanto pericoloso se non si tiene conto. C'è un articolo wiki qui che spiega il processo e include un paio di script Perl per aiutarti. Queste istruzioni presuppongono un ambiente Linux / Unix. Ho usato personalmente queste istruzioni su Fedora Linux e posso dirti che funzionano, ma non conosco altri ambienti * nix come i Mac. Inoltre non conosco istruzioni simili per Windows, ma potrei provare a rintracciarne alcune se sei su Windows. I comandi esatti variano leggermente da telefono a telefono poiché diversi dispositivi utilizzano tabelle di partizione diverse.

In generale, tuttavia, è necessario estrarre il file boot.img corrente dal telefono, decomprimerlo, estrarre il ramdisk e trovare il file default.prop . Questo è un file di testo semplice, che è necessario aprire in un editor di testo e quindi trovare la riga che contiene il valore ro.secure. Se la riga indica che ro.secure=1è necessario modificarlo in ro.secure=0. Dopodiché puoi reimballare ramdisk e boot.img, quindi inviarlo sul tuo telefono. Una volta riavviato, verrai accolto con un #prompt ogni volta che eseguirai adb shellsenza eseguire su.

In alternativa, se si utilizza una ROM personalizzata ma non presenta questa modifica, è possibile decomprimere la ROM e modificare il file boot.img che è incluso con essa seguendo i passaggi precedenti. Quindi puoi comprimere la ROM con il file boot.img appena modificato e eseguire il flashing del file zip come faresti normalmente.

Questo probabilmente è ovvio, ma fai attenzione quando lo fai. Fare casino con la partizione di avvio può facilmente distruggere il telefono e costringerti a recuperare tramite HBoot. Consiglio vivamente di provare Fastboot per essere sicuro di poter utilizzare i comandi Fastboot estesi ed eseguire un ripristino. Questo varia un po 'in base al modello, ma la maggior parte dei telefoni ha una sorta di software desktop che può essere eseguito anche per il reflash del telefono.


La terza opzione è che in molti casi potrebbe essere possibile riavviare adbdil dispositivo con i privilegi di root. Una possibilità è quella di eseguire adb rootda un terminale PC, anche se questo non funzionerà su tutte le configurazioni della ROM (la ROM deve essere costruita come "userdebug"). Puoi anche provare l'app adbd insecure di Chainfire . Ciò non persisterà durante il riavvio, quindi sarà necessario utilizzare l'app o adb rootnuovamente ogni volta che si riavvia il telefono.


Il telefono si avvia anche con i permessi di root? Potrebbe essere un problema di sicurezza.
Matteo Leggi il

1
@Matthew: AFAIK, consente adbddi avere l'autorizzazione di root sul telefono solo per impostazione predefinita. C'è un post di un membro del team Android che implica questo, ma non lo dice esplicitamente. Questo impegno con l'AOSP implica anche che si tratta semplicemente di un flag che adbdverifica all'avvio (non lo vedo altrove nella fonte). Come ho già detto, la maggior parte delle ROM personalizzate che ho visto (CM incluso) lo hanno impostato su 0.
eldarerathis,

Dirò che non sono al 100% su quanto sopra, però. Non riesco a trovare alcuna documentazione ufficiale relativa al file default.prop, anche se forse il mio Google-fu è solo debole stanotte ...
eldarerathis,

Ho appena scoperto il adb rootcomando per riavviare adbd in modalità auto-su, apparentemente si basa su questo. Penso che avessi ragione sul fatto che fosse solo una bandiera, però.
Matthew Leggi il

1
@MatthewRead: il codice sorgente nel commit a cui ho collegato ha effettivamente un commento in tal senso :) // ... except we allow running as root in userdebug builds if the service.adb.root property has been set by the "adb root" command". Per inciso, è così che ha funzionato la prima versione di BurritoRoot per Kindle Fire, IIRC.
eldarerathis,

15

Bene, se il tuo telefono è rootato puoi eseguire i comandi con il comando "su -c".

Ecco un esempio di un comando cat sul file build.prop per ottenere informazioni sul prodotto di un telefono.

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

Questo invoca il permesso di root ed esegue il comando all'interno di ''

Nota le 5 virgolette finali, che sono necessarie per chiudere TUTTE le virgolette finali o riceverai un errore.

Per chiarimenti il ​​formato è così.

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

Assicurati di inserire il comando ESATTAMENTE come faresti normalmente quando lo esegui nella shell.

Provalo, spero che questo ti aiuti.



1

Cosa stai cercando di eseguire come root? Stai dicendo che vuoi eseguire la shell ADB con root ma non vuoi usare la shell ADB? Puoi chiarire?

Se l'applicazione richiede l'accesso come root, l'applicazione SuperUser sul telefono dovrebbe gestirle autorizzando o meno. Il processo in cui hai effettuato il root del tuo telefono dovrebbe aver incluso un'applicazione SuperUser.


Voglio eseguire adb shell gdbserver dal mio terminale invece di andare in shell per eseguirlo
Hank

2
@Hank: un terminale deve quasi sempre essere collegato a una shell per fare qualsiasi lavoro utile; forse dovresti chiarire la tua definizione di "terminale" e "shell" poiché sembra che tu abbia un'idea diversa di quello che erano rispetto al linguaggio Linux / Android standard
Lie Ryan,

così puoi fare adb shell psoe adb shellquindi psottenere l'elenco dei processi in esecuzione. Quindi qualcosa richiede l'accesso come root, voglio essere in grado di fare il primo.
Hank

1
Il motivo "why" (specialmente per quanto riguarda gdbserver) sarebbe quello di poter usare la funzionalità in uno script in esecuzione sulla macchina di sviluppo. Tuttavia, è possibile che uno script installi i comandi in quella che adb pensa come una shell interattiva, quindi avere adb default su root non è davvero necessario per questo motivo.
Chris Stratton,

1

In alternativa, puoi scrivere il tuo script sul telefono e semplicemente far eseguire adb, ad esempio:

adb shell sh /sdcard/myscript.sh

Lo script può elevarsi senza il tuo intervento (supponendo che SuperUser sia impostato per ricordare l'approvazione), ad esempio:

su
pm setInstallLocation 1

Ho appena fatto questo sul mio telefono con successo, l'unico problema è che non ho ancora capito come terminare in modo pulito la sessione della shell adb. Devo Ctrl-C nella mia shell di Windows per tornare al prompt dei comandi di Windows, altrimenti adb si trova solo al #prompt e non accetta l'input.


0

io uso per riparazione problema pulsante home home


dispositivi adb

shell adb su -c commands

o

shell root adb sqlite3 /data/data/com.android.providers.settings/database/settings.db "INSERIRE VALORI (nome, valore) sicuri ('device_provisioned', '1');"

kill-server adb


-1

Puoi anche impostare il bit di suid sul tuo 'sh'. Sto usando BusyBox, quindi le istruzioni potrebbero non corrispondere alla tua configurazione:

  1. shell adb
  2. su
  3. mount -o remount, rw / system (o: 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 (notare che il bit di suid è impostato)
  7. ^ D
  8. shell adb

e dovresti avere il prompt di root


3
-1 da me. Questo è insicuro e apre un enorme buco. Qualsiasi APP potrebbe diventare root e provocare il caos.
Ce4,

6
Non farlo assolutamente, questo è un buco di sicurezza catastrofico . (Dichiarazione di non responsabilità: sono il mkshmanutentore.)
mirabilos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.