¿Cómo invoco "su" desde un indicador de terminal?

7

Puedo obtener un mensaje raíz en el terminal ejecutando uno de los exploits documentados en otro lugar. (por ejemplo, aquí: http://wiki.cyanogenmod.com/wiki/Motorola_Droid_2_Global:_Full_Update_Guide )

En este punto, puedo instalar el binario "su" y darle permisos 4755. Esto debería permitir que cualquiera lo ejecute, y dado que el propietario del binario es "root" y el bit fijo está configurado, debería convertirme en root. Pero aparentemente no tengo forma de deshacerme de la raíz del terminal antes de reiniciar. Pero, después de reiniciar, parece que no puedo convertirme en root usando 'su'.

$ ls -l /system/bin/su
-rwsr-xr-x root    app_101    26234 2012-07-09 15:00 su

Ok, los permisos se ven bien, debería poder ejecutarlo para que se convierta en root, pero solo en esta invocación particular del terminal.

$ /system/bin/su
Permission denied

También falla si especifico el comando para ejecutar como root, o con cualquier otro argumento:

$ /system/bin/su /system/bin/sh
Permission denied

¿Por qué? ¿Hay algún otro mecanismo en el trabajo? No quiero instalar Superuser.apk, porque solo quiero una forma de obtener temporalmente un shell raíz si es necesario, por ejemplo, para eliminar manualmente los archivos no deseados. Además, Superuser.apk se basa en el binario su de todos modos, por lo que debe tener alguna forma de llamarlo, entonces, ¿por qué no puedo replicar eso en la terminal?

Editar: tuve otro pensamiento, así que intenté copiar / bin / sh en otra ubicación y lo hice suid root. Pero aunque puedo ejecutar el nuevo binario, no me da root. ¿Android está haciendo algo complicado / diferente con suid que Linux normal no hace?

Miguel
fuente
1
Tener un 'su' sin protección en el dispositivo es bastante arriesgado, ya que cualquier cosa que intente usarlo lo obtendrá sin ninguna confirmación del usuario de que cosas como esa aplicación de superusuario intentan agregar como puerta de enlace.
Chris Stratton
Bien, bueno ... estaba tratando de planear con anticipación. No estaba seguro de cómo una actualización posterior intentaría deshacerse de su, así que lo puse en un montón de lugares diferentes con diferentes nombres. Resulta que la actualización elimina el bit pegajoso, y no puedo ejecutar suid desde otros lugares que no sean el sistema. Ah bueno.
Michael

Respuestas:

6

La pista está en la identificación del propietario / grupo ...

$ ls -l /system/bin/su
-rwsr-xr-x root    app_101    26234 2012-07-09 15:00 su

Observe que la identificación del grupo está establecida en 'app_101', que debería ser 'raíz', pero nuevamente, necesita el busyboxbinario (que es parte del binario SuperUser.apk, cuando está instalado, copia dicho binario relevante /system/xbinen orden) para poderlo chown.

t0mm13b
fuente
Sí, esto sería un problema. En última instancia, busybox no es necesario ya que chown de Android puede cambiar el grupo también, usando chown user.group filename (al menos desde Froyo-ICS)
Chris Stratton
1

Intenta agregar la -copción. p.ej

su -c sh

o

 su -c 'echo bogus'

(para más argumentos)

d14b0ll0s
fuente
0

Un poco más de excavación y creo que he encontrado la respuesta. La razón por la que no funciona es porque la aplicación Terminal no solicita permiso de superusuario en su manifiesto, por ejemplo:

<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>

Esta capa adicional de seguridad parece deberse a que la aplicación de terminal es una aplicación de Java, aunque hace un buen trabajo al ocultarla. El Superusuario parece calzar las cosas de alguna manera para que las aplicaciones Java puedan obtener este permiso, incluso si no sabían que lo necesitaban cuando se crearon.

Miguel
fuente
2
ACCESS_SUPERUSERel permiso no está relacionado con su problema
enero