¿Hay alguna manera de ejecutar Adb shell como root sin escribir 'su'?

¿Hay alguna manera de ejecutar Adb shell como root sin escribir su? Quiero poder tener acceso a la raíz sin entrar en el shell.

Respuestas (7)

Si entiendo su pregunta correctamente, está preguntando cómo obtener acceso de root automáticamente cuando ejecuta adb shell, para que no tenga que ingresar al shell y escribir supara ejecutar un comando como root en su teléfono.

Esto está controlado por un indicador en su partición de arranque, que la mayoría de las ROM personalizadas han modificado para permitir el permiso de root de forma predeterminada. Si se cae a un $cuando usa, adb shellentonces tiene dos opciones permanentes y una temporal (temporal, lo que significa que no se queda si reinicia):

  1. Flashear una ROM que incluya la modificación
  2. Cree un boot.img personalizado y guárdelo en su teléfono
  3. Reinicie adbden su dispositivo con permisos de root

El número 2 en realidad no es tan difícil, pero puede ser algo peligroso si no tienes cuidado. Hay un artículo wiki aquí que explica el proceso e incluye un par de scripts de Perl para ayudarte. Estas instrucciones asumen un entorno Linux/Unix. Personalmente, he usado estas instrucciones en Fedora Linux y puedo decirle que funcionan, pero no conozco otros entornos * nix como Mac. Tampoco conozco ninguna instrucción similar de Windows, pero podría intentar rastrear algunas si está en Windows. Los comandos exactos variarán un poco de un teléfono a otro, ya que diferentes dispositivos usan diferentes tablas de partición.

Sin embargo, en términos generales, debe extraer su boot.img actual de su teléfono, descomprimirlo, extraer el ramdisk y encontrar el archivo default.prop . Este es un archivo de texto sin formato, que debe abrir en un editor de texto y luego encontrar la línea que contiene el valor ro.secure. Si la línea dice ro.secure=1, debe cambiarlo a ro.secure=0. Después de eso, puede volver a empaquetar el ramdisk y boot.img, luego flashearlo en su teléfono. Una vez que reinicie, será recibido con un #aviso cada vez que realice adb shellsin tener que ejecutar su.

Alternativamente, si está utilizando una ROM personalizada pero no tiene esta modificación, puede simplemente descomprimir la ROM y modificar el boot.img que se incluye con ella siguiendo los pasos anteriores. Luego puede comprimir la ROM con el boot.img recién modificado y actualizar el archivo zip como lo haría normalmente.

Esto probablemente no hace falta decirlo, pero tenga cuidado al hacerlo. Jugar con su partición de arranque puede arruinar fácilmente su teléfono y obligarlo a recuperarse a través de HBoot. Recomiendo encarecidamente probar Fastboot para asegurarse de que puede usar los comandos Fastboot extendidos y realizar una recuperación. Esto varía un poco según su modelo, pero la mayoría de los teléfonos tienen algún tipo de software de escritorio que también se puede ejecutar para actualizar el teléfono.


La tercera opción es que en muchos casos es posible reiniciar adbden su dispositivo con privilegios de root. Una posibilidad es ejecutar adb rootdesde una terminal de PC, aunque esto no funcionará en todas las configuraciones de ROM (la ROM debe construirse como una "depuración de usuario"). También puedes probar la aplicación insegura adbd de Chainfire . Esto no persistirá después de un reinicio, por lo que deberá usar la aplicación o adb rootnuevamente cada vez que reinicie su teléfono.

¿El teléfono también arranca con permisos de root? Podría ser un problema de seguridad.
@Matthew: AFAIK, solo permite adbdtener permiso de root en el teléfono de forma predeterminada. Hay una publicación de un miembro del equipo de Android que implica esto, pero no lo dice explícitamente. Este compromiso con AOSP también implica que es simplemente un indicador que adbdverifica el inicio (no lo veo en ninguna otra parte de la fuente). Como mencioné, la mayoría de las ROM personalizadas que he visto (incluido CM) lo tienen configurado en 0.
Sin embargo, diré que no estoy 100% en lo anterior. No puedo encontrar ninguna documentación oficial relacionada con el archivo default.prop, aunque quizás mi Google-fu esté débil esta noche...
Acabo de descubrir el adb rootcomando para reiniciar adbd en modo auto-su, aparentemente se basa en esto. Sin embargo, creo que tenías razón acerca de que solo era una bandera.
@MatthewRead: el código fuente en la confirmación a la que me vinculé en realidad tiene un comentario en ese sentido :) // ... except we allow running as root in userdebug builds if the service.adb.root property has been set by the "adb root" command". Por cierto, así funcionó la primera versión de BurritoRoot para Kindle Fire, IIRC.
Con las ediciones de defult.prop, lo que debe permitirse en sepolicy para que adb root pueda funcionar de manera permisiva, lo que permite un shell raíz
@eldarerathis, el enlace que publicaste para la segunda opción que enumeraste parece roto. Sin embargo, encontré un hilo de XDA con el mismo título, que supongo que es el mismo artículo que el que vinculaste, así que estoy editando tu respuesta para actualizar ese enlace.

Bueno, si su teléfono está rooteado, puede ejecutar comandos con el comando "su -c".

Este es un ejemplo de un comando cat en el archivo build.prop para obtener información sobre el producto de un teléfono.

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

Esto invoca el permiso de root y ejecuta el comando dentro de ' '

Observe las 5 comillas finales, es necesario que cierre TODAS sus comillas finales o obtendrá un error.

Para aclarar, el formato es así.

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

Asegúrese de ingresar el comando EXACTAMENTE de la forma en que lo haría normalmente cuando lo ejecuta en Shell.

Pruébalo, espero que esto ayude.

Por ejemplo, puede usar adb shell -t "su -c 'sh'"para ejecutar un shell como root. Se -tnecesita para obtener el aviso.

Simplemente instale adbd Insecure .

¿Para qué estás tratando de ejecutar como root? ¿Estás diciendo que quieres ejecutar ADB shell con root pero no quieres usar ADB shell? ¿Puedes aclarar?

Si la aplicación solicita acceso a la raíz, entonces la aplicación SuperUser en su teléfono debe encargarse de darle permiso o no. El proceso en el que rooteó su teléfono debería haber incluido una aplicación SuperUser.

Quiero ejecutar adb shell gdbserver desde mi terminal en lugar de ir a shell para ejecutarlo
@Hank: un terminal casi siempre necesita estar conectado a un shell para realizar cualquier trabajo útil; tal vez debería aclarar su definición de "terminal" y "shell" ya que parece tener una idea diferente de lo que eran que en el lenguaje estándar de Linux/Android
entonces puede hacer adb shell pso adb shelly luego pspara obtener la lista de procesos en ejecución. Entonces, algunas cosas requieren acceso de root, quiero poder hacer lo primero.
La razón "por qué" (especialmente en lo que respecta a gdbserver) sería poder usar la capacidad en un script que se ejecuta en la máquina de desarrollo. Sin embargo, es posible que una secuencia de comandos canalice comandos a lo que adb considera como un shell interactivo, por lo que no es necesario tener adb predeterminado como root por ese motivo.

Como alternativa, puede escribir su script en el teléfono y simplemente hacer que adb lo ejecute, por ejemplo:

adb shell sh /sdcard/myscript.sh

El script puede elevarse sin su intervención (suponiendo que SuperUser esté configurado para recordar la aprobación), por ejemplo:

su
pm setInstallLocation 1

Acabo de hacer esto en mi teléfono con éxito, el único problema es que no he descubierto cómo terminar limpiamente la sesión de adb shell. Tengo que presionar Ctrl-C en mi shell de Windows para volver al símbolo del sistema de Windows; de lo contrario, adb simplemente se sienta en el #indicador y no acepta la entrada.

También puede configurar el bit suid en su 'sh'. Estoy usando BusyBox, por lo que es posible que las instrucciones no coincidan con su configuración:

  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 /sistema/bin/sh
  6. ls -la /system/bin/mksh
    -rwsr-xr-x root shell 157520 2012-11-10 09:54 mksh (observe que el bit suid está configurado)
  7. ^D
  8. shell adb

y deberías tener el indicador de raíz

-1 de mí. Esto es inseguro y abre un enorme agujero. Cualquier APP podría convertirse en root y causar estragos.
Absolutamente no hagas eso, este es un agujero de seguridad catastrófico . (Descargo de responsabilidad: soy el mkshmantenedor).

lo uso para reparar la falla del problema del botón de inicio


dispositivos adb

adb shell su-ccommands

o

adb root shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "INSERTAR EN VALORES seguros (nombre, valor) ('dispositivo_aprovisionado', '1');"

adb matar-servidor