Есть ли способ запустить оболочку Adb от имени пользователя root без ввода 'su'?


45

Есть ли способ запустить оболочку Adb от имени пользователя root без ввода su? Я хочу иметь возможность иметь root-доступ, не заходя в оболочку.

Ответы:


40

Если я правильно понимаю ваш вопрос, вы спрашиваете, как автоматически получить root-доступ при запуске adb shell, чтобы вам не приходилось заходить в оболочку и вводить suкоманду от имени root на вашем телефоне.

Это контролируется флагом в вашем загрузочном разделе, который большинство пользовательских ПЗУ изменили, чтобы разрешить права root по умолчанию. Если $при использовании adb shellвы перешли на a , то у вас есть два постоянных варианта и один временный (временный, что означает, что он не будет зависать при перезагрузке):

  1. Прошить ROM, который включает в себя модификацию
  2. Создайте собственный boot.img и прошейте его на свой телефон
  3. Перезапустите adbdна своем устройстве с правами root

Номер 2 на самом деле не так уж и сложен, но он может быть несколько опасным, если вы небрежны. Существует вики статья здесь , которая объясняет этот процесс и включает в себя несколько сценариев Perl , чтобы помочь вам. Эти инструкции предполагают среду Linux / Unix. Я лично использовал эти инструкции для Fedora Linux и могу сказать вам, что они работают, но я не знаю о других * nix средах, таких как Mac. Я также не знаю каких-либо аналогичных инструкций для Windows, но я мог бы попытаться отследить их, если вы используете Windows. Точные команды будут отличаться от телефона к телефону, поскольку разные устройства используют разные таблицы разделов.

Тем не менее, в общем, вам нужно вытащить ваш текущий boot.img из телефона, распаковать его, извлечь виртуальный диск и найти файл default.prop . Это обычный текстовый файл, который необходимо открыть в текстовом редакторе, а затем найти строку, содержащую значение ro.secure. Если строка говорит, ro.secure=1то вам нужно изменить его на ro.secure=0. После этого вы можете перепаковать ramdisk и boot.img, а затем прошить его на свой телефон. Как только вы перезагрузите компьютер, вы получите #приглашение при выполнении adb shellбез необходимости запуска su.

В качестве альтернативы, если вы используете пользовательское ПЗУ, но оно не имеет этой модификации, вы можете просто разархивировать ПЗУ и изменить файл boot.img, который входит в него, используя описанные выше шаги. Затем вы можете заархивировать ПЗУ с помощью недавно модифицированного boot.img и прошить zip-файл, как обычно.

Это, вероятно, само собой разумеется, но будьте осторожны при этом. Перепутывание вашего загрузочного раздела может довольно легко испортить ваш телефон и заставить вас восстановиться через HBoot. Я настоятельно рекомендую протестировать Fastboot, чтобы убедиться, что вы можете использовать расширенные команды Fastboot и выполнить восстановление. Это зависит от вашей модели, но большинство телефонов имеют программное обеспечение для настольных компьютеров, которое также можно запускать для перепрошивки телефона.


Третий вариант заключается в том, что во многих случаях возможно перезагрузить adbdустройство с правами root. Одной из возможностей является выполнение adb rootс терминала ПК, хотя это не будет работать на всех конфигурациях ПЗУ (ПЗУ должно быть построено как пользовательская отладка). Вы также можете попробовать небезопасное приложение adbd в Chainfire . Это не будет сохраняться после перезагрузки, поэтому вам нужно будет использовать приложение или adb rootснова каждый раз, когда вы перезагружаете свой телефон.


Телефон тоже загружается с рут правами? Может быть проблема безопасности.
Мэтью Прочитал

1
@ Matthew: AFAIK, adbdпо умолчанию разрешено иметь только права root на телефоне. Есть сообщение от члена команды Android, которое подразумевает это, но не говорит об этом явно. Эта фиксация AOSP также подразумевает, что это просто флаг, который adbdпроверяет запуск (я не вижу его в другом месте в источнике). Как я уже упоминал, на большинстве пользовательских ПЗУ, которые я видел (включая CM), он установлен на 0.
eldarerathis

Я скажу, что я не на 100% выше, хотя. Я не могу найти никакой официальной документации, связанной с файлом default.prop, хотя, возможно, мое Google-фу сегодня просто слабое ...
eldarerathis

Только что обнаружил adb rootкоманду для перезапуска adbd в режиме auto-su, видимо она на это опирается. Я действительно думаю, что вы были правы, что это просто флаг.
Мэтью Читал

1
@MatthewRead: Исходный код в коммите, с которым я связан, на самом деле имеет комментарий на этот счет :) // ... except we allow running as root in userdebug builds if the service.adb.root property has been set by the "adb root" command". Кстати, именно так работала первая версия BurritoRoot для Kindle Fire, IIRC.
21

15

Хорошо, если ваш телефон рутирован, вы можете запускать команды с помощью команды "su -c".

Вот пример команды cat в файле build.prop для получения информации о продукте для телефона.

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

Это вызывает разрешение root и запускает команду внутри ''

Обратите внимание на 5 конечных кавычек, которые необходимы для закрытия ВСЕХ ваших конечных кавычек, иначе вы получите ошибку.

Для пояснения формат таков.

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

Убедитесь, что вы вводите команду ТОЧНО, как обычно при запуске в оболочке.

Попробуйте, надеюсь, это поможет.



1

Что вы пытаетесь запустить как root? Вы говорите, что хотите запустить оболочку ADB с правами root, но не хотите использовать оболочку ADB? Вы можете уточнить?

Если приложение запрашивает root-доступ, то приложение SuperUser на вашем телефоне должно обрабатывать, давать ему разрешение или нет. Процесс, в котором вы рутировали свой телефон, должен был включать приложение SuperUser.


Я хочу запустить adb shell gdbserver из моего терминала вместо того, чтобы заходить в shell для запуска
Хэнк

2
@Hank: терминал почти всегда должен быть подключен к оболочке для выполнения любой полезной работы; возможно, вам следует уточнить ваше определение терминалов и оболочек, поскольку у вас, похоже, иное представление о том, какими они были, чем в стандартном языке Linux / Android
Lie Ryan

так что вы можете сделать adb shell psили adb shellзатем, psчтобы получить список запущенных процессов. Так что некоторые вещи требуют root-доступа, я хочу быть в состоянии сделать первое.
Хэнк

1
Причиной «почему» (особенно в том, что касается gdbserver) является возможность использования этой возможности в сценарии, выполняемом на компьютере разработчика. Тем не менее, сценарий может передавать команды в то, что adb воспринимает как интерактивную оболочку, поэтому по умолчанию использование adb по умолчанию для root не является обязательным.
Крис Страттон

1

В качестве альтернативы, вы можете написать свой скрипт на телефоне и просто заставить его выполнить adb, например:

adb shell sh /sdcard/myscript.sh

Сценарий может поднять себя без вашего вмешательства (при условии, что SuperUser настроен на запоминание утверждения), например:

su
pm setInstallLocation 1

Я только что сделал это на своем телефоне с успехом, единственная проблема в том, что я не совсем понял, как правильно завершить сеанс оболочки adb. Мне нужно нажать Ctrl-C в моей оболочке Windows, чтобы вернуться в командную строку Windows - в противном случае adb просто сидит в командной #строке и не принимает ввод.


0

я использую для ремонта неисправность кнопки домой


устройства adb

adb shell su -c commands

или же

Корневая оболочка adb

adb kill-server


-1

Вы также можете установить бит suid на свой 'sh'. Я использую BusyBox, поэтому инструкции могут не соответствовать вашим настройкам:

  1. adb shell
  2. су
  3. mount -o remount, rw / system (или: 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 корневая оболочка 157520 2012-11-10 09:54 mksh (обратите внимание, что бит suid установлен)
  7. ^ D
  8. adb shell

и у вас должно быть приглашение root


3
-1 от меня. Это небезопасно и открывает огромную дыру. Любое приложение может стать рутом и нанести ущерб.
ce4

6
Абсолютно не делайте этого, это катастрофическая дыра в безопасности . (Отказ от ответственности: я mkshсопровождающий.)
mirabilos
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.