50 votos

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

¿Existe alguna forma para ejecutar Adb shell como root sin tener que escribir su? Quiero poder tener acceso de root sin tener que entrar en la terminal.

46voto

David Negron Puntos 971

Si estoy entendiendo correctamente tu pregunta, estás preguntando cómo obtener acceso root automáticamente cuando ejecutas adb shell, para que no tengas que ir al shell y escribir su para ejecutar un comando como root en tu teléfono.

Esto está controlado por un indicador en tu partición de arranque, que la mayoría de las ROMs personalizadas han modificado para permitir permisos de root por defecto. Si caes a un $ cuando usas adb shell, entonces tienes dos opciones permanentes y una temporal (temporal significa que no se mantiene si reinicias):

  1. Flashea una ROM que incluya la modificación
  2. Crea un boot.img personalizado y flashealo en tu teléfono
  3. Reinicia adbd en tu dispositivo con permisos de root

La opción número 2 en realidad no es tan difícil, pero puede ser un poco peligroso si eres descuidado. Hay un artículo en el wiki aquí, que explica el proceso e incluye un par de scripts en Perl para ayudarte. Estas instrucciones asumen un entorno de Linux/Unix. Personalmente he usado estas instrucciones en Fedora Linux y te puedo decir que funcionan, pero no sé sobre otros entornos *nix como Mac. Tampoco conozco instrucciones similares para Windows, pero podría intentar encontrar algunas si estás en Windows. Los comandos exactos variarán un poco de teléfono a teléfono ya que diferentes dispositivos utilizan diferentes tablas de particiones.

En general, necesitas extraer tu boot.img actual de tu teléfono, desempaquetarlo, extraer el ramdisk y encontrar el archivo default.prop. Este es un archivo de texto plano, que necesitas 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=1 entonces necesitas cambiarlo a ro.secure=0. Después de eso, puedes reempaquetar el ramdisk y boot.img, luego flashearlos en tu teléfono. Una vez que reinicies, te encontrarás con un indicador # cada vez que ejecutes adb shell sin tener que ejecutar su.

Alternativamente, si estás usando una ROM personalizada pero no tiene esta modificación, simplemente descomprime la ROM y modifica el boot.img que está incluido en ella usando los pasos anteriores. Luego puedes comprimir la ROM con el nuevo boot.img modificado y flashear el archivo zip como lo harías normalmente.

Esto probablemente va sin decir, pero ten cuidado al hacer esto. Manipular tu partición de arranque puede fácilmente estropear tu teléfono y obligarte a recuperarlo a través de HBoot. Recomiendo encarecidamente probar Fastboot para asegurarte de que puedas usar comandos extendidos de Fastboot y realizar una recuperación. Esto varía un poco según tu modelo, pero la mayoría de los teléfonos tienen algún tipo de software de escritorio que se puede utilizar para reflashear el teléfono también.


La tercera opción es que en muchos casos puede ser posible reiniciar adbd en tu dispositivo con privilegios de root. Una posibilidad es ejecutar adb root desde un terminal de PC, aunque esto no funcionará en todas las configuraciones de ROM (la ROM debe estar construida como una "userdebug"). También puedes probar la aplicación adbd insecure de Chainfire. Esto no persistirá a través de un reinicio, por lo que necesitarías usar la aplicación o adb root nuevamente cada vez que reinicies tu teléfono.

0 votos

¿El teléfono también arranca con permisos de root? Podría ser un problema de seguridad.

1 votos

@Matthew: Hasta donde sé, solo permite que adbd tenga permiso de root en el teléfono por defecto. Hay una publicación de un miembro del equipo de Android que lo sugiere, pero no lo declara explícitamente. Este commit al AOSP también sugiere que es simplemente una bandera que adbd verifica al iniciar (no lo veo en otra parte del código fuente). Como mencioné, la mayoría de ROMs personalizados que he visto (incluido CM) lo tienen establecido en 0.

0 votos

Diré que no estoy al 100% seguro respecto a lo anterior. No puedo encontrar ninguna documentación oficial relacionada con el archivo default.prop, aunque tal vez mi habilidad de búsqueda en Google esté un poco débil esta noche...

18voto

Ajster1989 Puntos 41

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

Aquí tienes 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 permisos de root y ejecuta el comando dentro de las ' '

Nota los 5 comillas finales, es necesario que cierres TODAS tus comillas finales o obtendrás un error.

Para aclarar, el formato es así.

adb shell "su -c '[tu comando va aquí]'"

Asegúrate de ingresar el comando EXACTAMENTE de la forma en que lo harías normalmente al ejecutarlo en la terminal.

Inténtalo, espero que esto te ayude.

0 votos

Por ejemplo, puedes usar adb shell -t "su -c 'sh'" para ejecutar un shell como root. El -t es necesario para obtener el indicador.

3voto

linuxmaniax Puntos 11

Simplemente instala adbd Insecure.

1voto

Bryan Denny Puntos 18960

¿Para qué estás intentando 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 SuperUsuario en tu teléfono debería encargarse de darle permiso o no. El proceso en el que lograste el acceso root en tu teléfono debería haber incluido una aplicación SuperUsuario.

0 votos

Quiero ejecutar adb shell gdbserver desde mi terminal en lugar de entrar en la shell para ejecutarlo

2 votos

@Hank: una terminal casi siempre necesita estar conectada a un shell para realizar cualquier trabajo útil; tal vez deberías aclarar tu definición de "terminal" y "shell", ya que parece que tienes una idea diferente de lo que son en comparación con el lenguaje estándar de Linux/Android.

0 votos

Para poder hacer adb shell ps o adb shell y luego ps para obtener la lista de procesos en ejecución. Algunas cosas requieren acceso de root, quiero poder hacer lo primero.

1voto

Matthew Read Puntos 35808

Como alternativa, podrías escribir tu 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 tu intervención (asumiendo que SuperUsuario 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 aún no he descubierto cómo terminar la sesión de adb de forma limpia. Tengo que presionar Ctrl-C en mi shell de Windows para volver al símbolo de comando de Windows -- de lo contrario, adb simplemente se queda en el símbolo # y no acepta entrada.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X