Android ioctl – права доступа и использование root

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

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

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

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

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

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

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