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

45

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

Madeja
fuente

Respuestas:

40

Si entiendo su pregunta correctamente, está preguntando cómo obtener acceso a la raíz 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 lo usa, adb shellentonces tiene dos opciones permanentes y una temporal (lo que significa que no se pega si reinicia):

  1. Flash una ROM que incluye la modificación
  2. Cree un archivo boot.img personalizado y actualícelo 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 eres descuidado. Hay un artículo wiki aquí lo que explica el proceso e incluye una par de scripts de Perl para ayudarle. 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 Macs. Tampoco conozco instrucciones similares 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 tablas de partición diferentes.

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

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

Probablemente esto sea obvio, pero tenga cuidado al hacer esto. Jugar con su partición de arranque puede destruir fácilmente su teléfono y obligarlo a recuperarse a través de HBoot. Recomiendo encarecidamente probar Fastboot para asegurarse de que puede usar comandos extendidos de Fastboot y realizar una recuperación. Esto varía un poco en función de 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 un 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á durante un reinicio, por lo que deberá usar la aplicación o adb rootnuevamente cada vez que reinicie su teléfono.

eldarerathis
fuente
¿El teléfono también arranca con permisos de root? Podría ser un problema de seguridad.
Mateo leyó
1
@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 el AOSP también implica que es simplemente un indicador que adbdverifica el inicio (no lo veo en ninguna otra parte de la fuente). Como ya he mencionado, la mayoría de las ROMs personalizadas que he visto (CM incluido) lo han puesto a 0.
eldarerathis
Sin embargo, diré que no estoy 100% en lo anterior. No puedo encontrar ninguna documentación oficial relacionada con el archivo default.prop, aunque tal vez mi Google-fu es sólo débil esta noche ...
eldarerathis
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 sobre que era solo una bandera.
Matthew leyó el
1
@MatthewRead: El código fuente en el commit al que me vinculé en realidad tiene un comentario al respecto :) // ... 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í es como funcionó la primera versión de BurritoRoot para Kindle Fire, IIRC.
eldarerathis
15

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

Aquí hay un ejemplo de un comando cat en el archivo build.prop para obtener información del 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 manera que lo haría normalmente cuando lo ejecuta en shell.

Pruébalo, espero que esto ayude.

Ajster1989
fuente
1

¿Para qué intentas 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 root, entonces la aplicación SuperUser en su teléfono debe manejar si le da permiso o no. El proceso en el que rooteaste tu teléfono debería haber incluido una aplicación SuperUser.

Bryan Denny
fuente
Quiero ejecutar adb shell gdbserver desde mi terminal en lugar de entrar en shell para ejecutarlo
Hank
2
@Hank: un terminal casi siempre necesita estar conectado a un shell para realizar cualquier trabajo útil; quizás debería aclarar su definición de "terminal" y "shell" ya que parece tener una idea diferente de lo que eran en el lenguaje estándar de Linux / Android
Lie Ryan
para que pueda hacer adb shell pso adb shelly luego psobtener la lista de procesos en ejecución. Entonces, algunas cosas requieren acceso de root, quiero poder hacer lo primero.
Hank
1
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 un script canalice comandos hacia lo que adb piensa como un shell interactivo, por lo que no es necesario tener el valor predeterminado de adb como root por esa razón.
Chris Stratton
1

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 de forma limpia la sesión de adb shell. Tengo que hacer 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 #símbolo del sistema y no acepta entradas.

Matthew Read
fuente
0

utilizo para reparar la falla del problema del botón de inicio


dispositivos adb

adb shell su -c commands

o

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

adb kill-server

mauro kit barcelona
fuente
-1

También puede establecer el bit suid en su 'sh'. Estoy usando BusyBox, por lo que las instrucciones pueden no coincidir con su configuración:

  1. adb shell
  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 10/11/2012 09:54 mksh (observe que el bit suid está configurado)
  7. ^ D
  8. adb shell

y deberías tener la solicitud de root

looneybits
fuente
3
-1 de mi parte. Esto es inseguro y abre un gran agujero. Cualquier aplicación podría convertirse en root y causar estragos.
ce4
66
Absolutamente no hagas eso, este es un agujero de seguridad catastrófico . (Descargo de responsabilidad: soy el mkshmantenedor.)
mirabilos