Как вызвать «su» из терминала?


7

Я могу получить приглашение root в терминале, запустив один из описанных в другом месте эксплойтов. (например, здесь: http://wiki.cyanogenmod.com/wiki/Motorola_Droid_2_Global:_Full_Update_Guide )

На этом этапе я могу установить двоичный файл «su» и дать ему разрешения 4755. Это должно позволить любому исполнить его, а поскольку владельцем двоичного файла является «root», а бит закрепления установлен, я должен стать пользователем root. Но у меня, видимо, нет способа не стать рутом с терминала, за исключением перезагрузки. Но после перезагрузки я не могу получить права root с помощью su.

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

Хорошо, разрешения выглядят нормально, если я должен иметь возможность запустить его, чтобы стать пользователем root, но только в этом конкретном вызове терминала.

$ /system/bin/su
Permission denied

Это также терпит неудачу, если я указываю команду для запуска от имени пользователя root или с любыми другими аргументами:

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

Почему? Есть ли какой-то другой механизм на работе? Я не хочу устанавливать Superuser.apk, потому что я просто хочу, чтобы я мог временно получить корневую оболочку, если необходимо, например, удалить ненужные файлы вручную. Кроме того, Superuser.apk в любом случае полагается на двоичный файл su, поэтому у него должен быть какой-то способ его вызова, так почему я не могу воспроизвести его в терминале?

Изменить: у меня была другая мысль, поэтому я попытался скопировать / bin / sh в другое расположение и сделал его suid root. Но хотя я могу выполнить новый бинарный файл, он не дает мне root. Android делает что-то хитрое / другое с suid, чего не делает обычный Linux?


1
Наличие незащищенного «su» на устройстве довольно рискованно, так как все, что пытается его использовать, получит его без какого-либо подтверждения от пользователя, что такие вещи, как приложение superuser, пытаются добавить в качестве шлюза.
Крис Страттон

Хорошо, хорошо ... Я пытался планировать заранее. Я не был уверен, как последующее обновление попытается избавиться от su, поэтому я поместил его в кучу разных мест с разными именами. Оказывается, обновление удаляет липкий бит, и я не могу запустить suid из других мест, кроме системы. Ах хорошо.
Майкл

Ответы:


6

Подсказка в идентификаторе владельца / группы ...

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

Обратите внимание, что для идентификатора группы установлено значение «app_101», которое должно быть «root», но, опять же, вам нужен busyboxдвоичный файл (который является частью двоичного файла SuperUser.apk, при установке он копирует соответствующий упомянутый двоичный файл /system/xbinв порядок) чтобы быть в состоянии к chownэтому.


Да, это было бы проблемой. В конечном счете busybox не нужен, так как стандартный android chown может также изменить группу, используя имя файла chown user.group (по крайней мере, из Froyo-ICS)
Крис Страттон,

1

Попробуйте добавить -cопцию. например

su -c sh

или

 su -c 'echo bogus'

(для большего количества аргументов)


0

Немного больше копания, и я думаю, что нашел ответ. Причина, по которой он не работает, заключается в том, что приложение Terminal не запрашивает разрешения суперпользователя в своем манифесте, например:

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

Этот дополнительный уровень безопасности, по-видимому, связан с тем, что терминальное приложение является Java-приложением, хотя оно хорошо скрывает его. Суперпользователь, кажется, каким-то образом подбрасывает вещи, так что Java-приложения могут получить это разрешение, даже если они не знали, что оно им было нужно при создании.


2
ACCESS_SUPERUSERразрешение не связано с вашей проблемой
Janot
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.