7 votes

Comment invoquer "su" à partir d'une invite de terminal ?

Je peux obtenir une invite Root dans le terminal en exécutant un exploit documenté ailleurs. (par exemple, ici : http://wiki.cyanogenmod.com/wiki/Motorola_Droid_2_Global:_Full_Update_Guide )

A ce stade, je peux installer le binaire "su" et lui donner les permissions 4755. Cela devrait permettre à quiconque de l'exécuter, et puisque le propriétaire du binaire est "Root" et que le sticky bit est activé, je devrais devenir Root. Mais je n'ai apparemment aucun moyen de ne pas devenir Root à partir du terminal sans redémarrer. Mais, après avoir redémarré, je ne peux pas devenir Root en utilisant 'su'.

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

Ok, les permissions semblent correctes, je devrais être capable de l'exécuter pour devenir Root, mais seulement dans cette invocation particulière du terminal.

$ /system/bin/su
Permission denied

Il échoue également si je spécifie la commande à exécuter en tant que Root, ou avec tout autre argument :

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

Pourquoi ? Y a-t-il un autre mécanisme à l'œuvre ? Je ne veux pas installer Superuser.apk, car je veux juste un moyen d'obtenir temporairement un shell Root si nécessaire, par exemple pour supprimer manuellement des fichiers indésirables. De plus, Superuser.apk s'appuie sur le binaire su de toute façon, il doit donc avoir un moyen de l'appeler, alors pourquoi ne puis-je pas reproduire cela dans le terminal ?

Modifier : J'ai eu une autre idée, alors j'ai essayé de copier /bin/sh à un autre endroit et de le rendre suid Root. Mais alors que je peux exécuter le nouveau binaire, il ne me donne pas Root. Est-ce qu'Android fait quelque chose de délicat/différent avec suid que Linux ordinaire ne fait pas ?

1 votes

Avoir un "su" non protégé sur l'appareil est assez risqué, car tout ce qui tente de l'utiliser l'obtiendra sans aucune confirmation de l'utilisateur que des choses comme l'application superuser essaient d'ajouter comme passerelle.

0 votes

Bon, eh bien... J'essayais d'anticiper. Je n'étais pas sûr de la façon dont une mise à jour ultérieure essaierait de se débarrasser de su, alors je l'ai mis dans un tas d'endroits différents avec des noms différents. Il s'avère que la mise à jour supprime le sticky bit, et je ne peux pas lancer suid à partir d'autres endroits que le système. Ah bon.

6voto

Nick Pierpoint Points 7976

L'indice est dans l'identifiant du propriétaire/groupe...

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

Remarquez que l'identifiant du groupe est fixé à "app_101", alors qu'il devrait s'agir de "Root", mais là encore, vous avez besoin de l'identifiant de groupe. busybox (qui fait partie du binaire SuperUser.apk, lorsqu'il est installé, il copie le binaire en question dans le dossier de l'utilisateur. /system/xbin ) afin de pouvoir chown il.

0 votes

Oui, ce serait un problème. En fin de compte, busybox n'est pas nécessaire car le chown d'Android stock peut changer le groupe également, en utilisant chown user.group filename (au moins depuis Froyo-ICS).

1voto

d14b0ll0s Points 11

Essayez d'ajouter le -c option, par exemple

su -c sh

o

 su -c 'echo bogus'

(pour plus d'arguments)

0voto

Michael Points 1314

En creusant un peu plus, je pense avoir trouvé la réponse. La raison pour laquelle cela ne fonctionne pas est que l'application Terminal ne demande pas la permission de super-utilisateur dans son manifeste, par exemple :

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

Cette couche de sécurité supplémentaire semble être due au fait que l'application du terminal est une application Java, bien qu'elle parvienne à le cacher. Le super-utilisateur semble faire en sorte que les applications Java puissent obtenir cette permission, même si elles ne savaient pas qu'elles en avaient besoin lorsqu'elles ont été créées.

2 votes

ACCESS_SUPERUSER l'autorisation n'est pas en rapport avec votre problème

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X