Existe-t-il un moyen pour moi d'exécuter le shell Adb en tant que root sans taper 'su'?


45

Existe-t-il un moyen pour moi d’exécuter le shell Adb en tant que root sans taper su? Je veux pouvoir avoir un accès root sans entrer dans le shell.

Réponses:


40

Si je comprends bien votre question, vous demandez comment obtenir automatiquement un accès root lorsque vous l'exécutez adb shell, de sorte que vous n'ayez pas à entrer dans le shell et à taper supour exécuter une commande en tant qu'utilisateur root sur votre téléphone.

Ceci est contrôlé par un indicateur dans votre partition de démarrage, que la plupart des ROM personnalisées ont modifié pour autoriser les droits root par défaut. Si vous tombez sur a $lorsque vous utilisez, adb shellvous avez deux options permanentes et une temporaire (temporaire signifiant que cela ne colle pas si vous redémarrez):

  1. Flash une ROM qui inclut la modification
  2. Créez un fichier boot.img personnalisé et collez-le sur votre téléphone.
  3. Redémarrez adbdsur votre appareil avec les autorisations root

Le numéro 2 n'est en fait pas si difficile, mais il peut être dangereux si vous êtes négligent. Il y a un article wiki ici qui explique le processus et inclut quelques scripts Perl pour vous aider. Ces instructions supposent un environnement Linux / Unix. J'ai personnellement utilisé ces instructions sur Fedora Linux et je peux vous dire qu'elles fonctionnent, mais je ne connais pas les autres environnements * nix tels que les Mac. Je ne connais pas non plus d’instructions Windows similaires, mais je pourrais essayer d’en retracer certaines si vous utilisez Windows. Les commandes exactes varieront d’un téléphone à l’autre, car différents appareils utilisent différentes tables de partition.

En règle générale, cependant, vous devez extraire votre fichier boot.img actuel de votre téléphone, le décompresser, extraire le disque mémoire, puis rechercher le fichier default.prop . Il s'agit d'un fichier texte que vous devez ouvrir dans un éditeur de texte, puis rechercher la ligne contenant la valeur ro.secure. Si la ligne indique ro.secure=1alors vous devez le changer en ro.secure=0. Après cela, vous pouvez remballer le disque mémoire et le fichier boot.img, puis les envoyer à votre téléphone. Une fois que vous redémarrez, une #invite vous est adressée chaque fois que vous effectuez adb shellsans avoir à exécuter su.

Si vous utilisez une ROM personnalisée sans cette modification, vous pouvez également décompresser la ROM et modifier le fichier boot.img inclus à l'aide des étapes ci-dessus. Ensuite, vous pouvez compresser la ROM avec le fichier boot.img récemment modifié et flasher le fichier zip comme vous le feriez normalement.

Cela va probablement de soi, mais soyez prudent lorsque vous le faites. Jouer avec votre partition de démarrage peut très facilement détruire votre téléphone et vous forcer à récupérer via HBoot. Je recommande fortement de tester Fastboot pour vous assurer que vous pouvez utiliser des commandes Fastboot étendues et effectuer une récupération. Cela varie un peu en fonction de votre modèle, mais la plupart des téléphones disposent d’une sorte de logiciel de bureau qui peut également être utilisé pour afficher le flash.


La troisième option est que dans de nombreux cas, il peut être possible de redémarrer adbdsur votre appareil avec les privilèges root. Une possibilité consiste à exécuter à adb rootpartir d'un terminal PC, bien que cela ne fonctionne pas sur toutes les configurations de ROM (la ROM doit être construite sous la forme d'une "userdebug"). Vous pouvez également essayer l’application non sécurisée adbd de Chainfire . Cela ne persistera pas lors d'un redémarrage, vous devrez donc utiliser l'application ou à adb rootnouveau à chaque fois que vous redémarrez votre téléphone.


Le téléphone démarre-t-il également avec les autorisations root? Pourrait être un problème de sécurité.
Matthew Lu

1
@ Matthew: autant que je sache, il ne permet que adbdd'avoir l'autorisation root sur le téléphone par défaut. Il y a un message d'un membre de l'équipe Android qui implique cela, mais ne le dit pas explicitement. Cet engagement dans l'AOSP implique également qu'il s'agit simplement d'un indicateur qui adbdvérifie au démarrage (je ne le vois pas ailleurs dans la source). Comme je l'ai mentionné, la majorité des ROM personnalisées que j'ai vues (y compris les CM) l'ont définie sur 0.
eldarerathis

Je dirai que je ne suis pas à 100% sur ce qui précède, cependant. Je ne trouve aucune documentation officielle liée au fichier default.prop, bien que mon Google-fu soit peut-être faible ce soir ...
eldarerathis

Je viens de découvrir la adb rootcommande permettant de redémarrer adbd en mode auto-su, apparemment, elle repose sur cela. Je pense cependant que vous aviez raison de dire que ce n’est qu’un drapeau.
Matthew Lu

1
@MatthewRead: le code source dans la validation à laquelle j'ai lié a en fait un commentaire à cet effet :) // ... except we allow running as root in userdebug builds if the service.adb.root property has been set by the "adb root" command". C'est d'ailleurs ainsi que fonctionnait la première version de BurritoRoot pour le Kindle Fire, IIRC.
Eldarerathis

15

Eh bien, si votre téléphone est enraciné, vous pouvez exécuter des commandes avec la commande "su -c".

Voici un exemple de commande cat sur le fichier build.prop pour obtenir des informations sur un produit de téléphonie.

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

Ceci appelle la permission root et exécute la commande dans le ''

Remarquez les 5 guillemets, il est nécessaire de fermer TOUS vos guillemets ou vous obtiendrez une erreur.

Pour clarifier, le format est comme ça.

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

Assurez-vous que vous entrez EXACTEMENT la commande comme vous le feriez normalement lors de son exécution dans un shell.

Essayez, espérons que cela aide.



1

Qu'est-ce que vous essayez de lancer en tant que root? Vous dites que vous voulez exécuter le shell ADB avec root mais vous ne voulez pas utiliser le shell ADB? Pouvez-vous clarifier?

Si l'application demande un accès root, l'application SuperUser de votre téléphone doit également lui donner l'autorisation. Le processus dans lequel vous avez enraciné votre téléphone aurait dû inclure une application SuperUser.


Je veux lancer adb shell gdbserver depuis mon terminal au lieu d'aller dans shell pour l'exécuter
Hank

2
@Hank: un terminal doit presque toujours être connecté à un shell pour effectuer tout travail utile; Peut-être devriez-vous clarifier votre définition de "terminal" et de "shell" puisque vous semblez avoir une idée différente de ce qu'ils étaient par rapport au langage standard Linux / Android
Lie Ryan

afin que vous puissiez faire adb shell psou adb shellet ensuite pspour obtenir la liste de processus en cours. Donc, certaines choses nécessitent un accès root, je veux pouvoir faire le premier.
Hank

1
La raison "pourquoi" (en particulier en ce qui concerne gdbserver) serait de pouvoir utiliser cette fonctionnalité dans un script exécuté sur la machine de développement. Cependant, il est possible pour un script de diriger des commandes vers ce que Adb considère comme un shell interactif. Par conséquent, avoir adb default à root n'est pas vraiment nécessaire pour cette raison.
Chris Stratton

1

Alternativement, vous pouvez écrire votre script sur le téléphone et simplement le faire exécuter par adb, par exemple:

adb shell sh /sdcard/myscript.sh

Le script peut s’élever lui-même sans votre intervention (en supposant que SuperUser soit configuré pour mémoriser l’approbation), par exemple:

su
pm setInstallLocation 1

Je viens de le faire avec succès sur mon téléphone, le seul problème étant que je n’ai pas tout à fait compris comment mettre fin proprement à la session du shell publicitaire. Je dois Ctrl-C dans mon shell Windows pour revenir à l'invite de commande Windows - sinon, adb reste assis à l' #invite et n'accepte pas les entrées.


0

J'utilise pour échec de problème de bouton home de réparation


périphériques adb

adb shell su -c commands

ou

shell racine adb sqlite3 /data/data/com.android.providers.settings/databases/settings.db "INSERT INTO secure (nom, valeur) VALUES ('device_provisioned', '1');"

adb kill-server


-1

Vous pouvez également définir le bit suid sur votre "sh". J'utilise BusyBox pour que les instructions ne correspondent pas à votre configuration:

  1. coquille adb
  2. su
  3. mount -o remount, rw / system (ou: adb remount)
  4. ls -la / système / bin / sh lrwxr-xr-x shell racine 2012-11-10 15:20 sh -> mksh
  5. chmod 4755 / système / bin / sh
  6. ls -la / system / bin / mksh
    -rwsr-xr-x shell racine 157520 2012-11-10 09:54 mksh (notez que le bit suid est défini)
  7. ^ D
  8. coquille adb

et vous devriez avoir l'invite de la racine


3
-1 de moi. Ceci n'est pas sûr et ouvre un énorme trou. N'importe quelle application pourrait devenir racine et causer des ravages.
ce4

6
Ne faites absolument pas cela, c'est une faille de sécurité catastrophique . (Avertissement: je suis le mkshresponsable.)
mirabilos
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.