Чи є спосіб для мене запустити оболонку Adb як корінь, не вводячи "su"?


45

Чи є спосіб для мене запустити оболонку Adb як корінь, не вводячи текст su? Я хочу мати доступ до кореня, не заходячи в оболонку.

Відповіді:


40

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

Це контролюється прапором у вашому завантажувальному розділі, який більшість користувацьких ПЗМ модифікували, щоб дозволити кореневий дозвіл за замовчуванням. Якщо ви перебуваєте у випадку, $коли ви користуєтесь, adb shellтоді у вас є два постійні варіанти та один тимчасовий (тимчасовий, що він не прилипає при перезавантаженні):

  1. Прошийте ROM, що включає модифікацію
  2. Створіть власну boot.img і відправте її на телефон
  3. Перезавантажте adbdна своєму пристрої права доступу до root

Число 2 насправді не так складно, але воно може бути дещо небезпечним, якщо ви недбалі. Існує вікі стаття тут , яка пояснює цей процес і включає в себе кілька сценаріїв Perl , щоб допомогти вам. Ці інструкції передбачають середовище Linux / Unix. Я особисто використовував ці інструкції в Fedora Linux і можу сказати, що вони працюють, але я не знаю про інші * nix середовища, такі як Macs. Я також не знаю жодних подібних інструкцій для Windows, але я можу спробувати відстежити, чи є ви в Windows. Точні команди дещо відрізнятимуться від телефону до телефону, оскільки різні пристрої використовують різні таблиці розділів.

Взагалі кажучи, вам потрібно витягнути з телефону ваш поточний boot.img, розпакувати його, витягти ramdisk та знайти файл default.prop . Це файл простого тексту, який потрібно відкрити в текстовому редакторі, а потім знайти рядок, що містить значення ro.secure. Якщо рядок говорить, ro.secure=1то вам потрібно змінити його ro.secure=0. Після цього ви можете знову упакувати ramdisk і boot.img, а потім перенести його на телефон. Після перезавантаження ви будете зустрінуті #підказкою кожного разу, коли ви будете виконувати adb shellбез необхідності запуску su.

Крім того, якщо ви використовуєте користувальницький ROM, але він не має цієї модифікації, ви можете просто розпакувати ROM та змінити boot.img, що додається до нього, використовуючи вищезазначені кроки. Потім ви можете скопіювати ПЗУ за допомогою нещодавно зміненого boot.img і прошивати zip-файл, як зазвичай.

Це, мабуть, само собою зрозуміло, але будьте обережні, роблячи це. Возитися з завантажувальним розділом може досить легко зірвати ваш телефон і змусити вас відновитися через HBoot. Я настійно рекомендую протестувати Fastboot, щоб переконатися, що ви можете використовувати розширені команди Fastboot та виконати відновлення. Це залежно від вашої моделі, але більшість телефонів мають якесь програмне забезпечення для настільних ПК, яке можна запустити і для переформатування телефону.


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


Також телефон завантажується з дозволами 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.
eldarerathis

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

Для чого ви намагаєтеся запустити корінь? Ви говорите, що хочете запустити оболонку ADB з root, але не хочете використовувати оболонку ADB? Ви можете уточнити?

Якщо програма вимагає кореневого доступу, програма SuperUser на вашому телефоні має працювати з тим, надаючи їй дозвіл чи ні. Процес, в який ви вкоренили свій телефон, повинен включати додаток SuperUser.


Я хочу запустити adb shell gdbserver зі свого терміналу, а не переходити в shell, щоб запустити його
Хенк

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

тож ви можете зробити adb shell psабо, adb shellа потім psотримати список запущених процесів. Отже, щось вимагає кореневого доступу, я хочу мати можливість зробити перший.
Хенк

1
Причиною "чому" (особливо, коли йдеться про gdbserver), було б можливість використовувати можливості в сценарії, що працює на розроблювальній машині. Однак сценарій може передавати команди в інтерактивну оболонку, тому adb за замовчуванням для root дійсно не потрібна з цієї причини.
Кріс Страттон

1

Як альтернативу, ви можете написати свій скрипт на телефон і просто дозволити його виконувати, наприклад:

adb shell sh /sdcard/myscript.sh

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

su
pm setInstallLocation 1

Я щойно це зробив на своєму телефоні з успіхом, єдина проблема в тому, що я не зовсім зрозумів, як чисто закінчити сеанс оболонки adb. Мені доводиться Ctrl-C у своїй оболонці Windows, щоб повернутися до командного рядка Windows - інакше adb просто сидить за #запитом і не приймає введення.


0

я використовую для ремонту помилку видачі домашньої кнопки


пристрої adb

adb оболонка su -c commands

або

корінна оболонка adb sqlite3 /data/data/com.android.providers.settings/databases/settings.db "ВСТАВЛІТЬСЯ в безпечний (ім'я, значення) VALUES ('device_provisioned', '1');"

adb kill-сервер


-1

Ви також можете встановити біт suid на "ш". Я використовую BusyBox, тому інструкції можуть не відповідати вашим налаштуванням:

  1. оболонка adb
  2. су
  3. mount -o remount, rw / system (або: adb remount)
  4. ls -la / system / bin / sh lrwxr-xr-x коренева оболонка 2012-11-10 15:20 sh -> mksh
  5. chmod 4755 / система / бін / ш
  6. ls -la / system / bin / mksh
    -rwsr-xr-x root shell 157520 2012-11-10 09:54 mksh (зверніть увагу на встановлений біт suid)
  7. ^ D
  8. оболонка adb

і у вас повинен бути кореневий рядок


3
-1 від мене. Це небезпечно і відкриває величезну дірку. Будь-який APP може стати причиною руйнування та пошкодження.
ce4

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