Android ioctl — root-права и использование

Я работаю над некоторыми функциями маршрутизации в приложении для Android, и мне нужен доступ к ioctl. Поскольку для запуска приложений, использующих ioctl, требуется разрешение root, единственный способ, которым я смог их вызвать, — это связать отдельный исполняемый файл и вызвать его из Java с помощью Runtime.getRuntime().exec().

Есть ли способ получить доступ к root-правам из JNI в Android без создания отдельного исполняемого файла? Является ли создание исполняемого файла лучшим подходом для доступа к ioctl?


person derekerdmann    schedule 08.08.2011    source источник


Ответы (2)


Процесс без полномочий root не может стать корневым (помимо эксплойтов), так что да, вам нужен отдельный процесс.

Это унаследовано без изменений от linux - разница в том, что нет прямого способа запустить процесс приложения Android от имени пользователя root из средства запуска, поскольку это отправляет намерение zygote, который разветвляется и снижает привилегии дочернего элемента, который специализируется на процессе приложения. (Может существовать обходной метод для ручного создания процесса приложения, но для этого вам потребуется процесс приложения, так что по определению это будет вторичный процесс. И это будет неэффективно, поскольку приложение, которое не является дочерний элемент zygote не унаследует общее отображение системных библиотек, поэтому ему придется загружать в память собственные уникальные копии)

ioctl() - это просто еще один системный вызов, и для него требуется только root, если права доступа к этому fd (из его файла устройства) есть. Очевидно, что это относится к тем, которые вы хотите использовать, но другие не имеют привилегий. Например, большая часть IPC платформы Android в конечном итоге реализуется с помощью ioctl Binder, и они обычно используются для управления сетевым сокетом.

person Chris Stratton    schedule 08.08.2011

Вызовы ioctl() не требуют явного разрешения root (или любого другого разрешения) для использования. Как сказал Крис Стрэттон, вам потребуется разрешение на доступ к конкретному рассматриваемому устройству. Если у вас нет указанного разрешения, вы не получите его, кроме эксплойтов.

Чего вы в конечном итоге пытаетесь достичь?

person NuSkooler    schedule 08.08.2011
comment
Эксплойт был бы единственным способом для существующего процесса получить разрешение, но многие устройства были настроены (либо с помощью удобного для конечного пользователя дизайна, либо путем использования эксплойта ранее) для использования инструмента типа suid 'su', который можно использовать для запуска вспомогательного процесса, работающего от имени пользователя root. По крайней мере, это означает, что в данный момент эксплойт не нужен, и если устройство поставляется с возможностью прошивки альтернативной прошивки, скорее всего, эксплойт никогда не понадобится. - person Chris Stratton; 08.08.2011