Почему я не могу использовать su для запуска с разрешениями другого приложения?

Общеизвестно, что каждое приложение для Android — это отдельный пользователь. У меня установлен эмулятор терминала Android от имени пользователя u0_a5 .

u0_a5@android:/ $ whoami
u0_a5
u0_a5@android:/ $ группы
u0_a5 sdcard_rw sdcard_r инет all_a5

В adb любая попытка использовать команду su для входа в качестве эмулятора терминала Android удается лишь частично. Как показано в следующем сеансе adb, группы разрешений, к которым принадлежит эмулятор терминала Android, не наследуются, за исключением группы пользователей по умолчанию u0_a5 .

root@android:/ # su - u0_a5
Неизвестный идентификатор: u0_a5
1|root@android:/ # су - 10005
app_5@android:/ $ whoami
u0_a5
app_5@android:/ $ группы
u0_a5

Как пользователь 10005 я могу удалять файлы, принадлежащие пользователю u0_a5 . Но я не могу выполнять команды, для которых требуются специальные разрешения Android, такие как «busybox wget protocol://some.uri», для которого требуется, чтобы приложение принадлежало к группе inet .

Итак, есть ли способ выдать себя за приложение и запустить его в своей конкретной среде разрешений? Или это мой единственный (не)выбор?

Ответы (1)

Да, использование root - единственный выход.

Все другие группы или имена пользователей заблокированы в пользовательской среде Android с помощью метода, известного как песочница . Это функция безопасности, реализованная в ядре, поэтому вам нужно будет переработать Android, если вы все еще хотите добиться успеха.

Эта «песочница» не позволяет одному приложению получать доступ к данным другого приложения и т. Д., Это правда. Но как только пользователь становится root, это уже не имеет значения (root может войти в любую песочницу). Итак, действительно интересный вопрос: почему root не может войти в песочницу, а затем «отказаться» от всех дополнительных разрешений, кроме тех, которые принадлежат этой песочнице? Это было бы тем, на что нацелен ОП.