Временное отключение или изменение SELinux на Android

Я разработчик на root -app для Android.

К сожалению, теперь на некоторых устройствах /ROM существует SELinux в режиме принудительного исполнения и предотвращает некоторые действия моего приложения.

Поскольку это корневое приложение, пользователи предоставляют мне root-доступ!

Теперь SELinux блокирует некоторые из моих действий, и мне нужно найти решение для этого.

Я попытался временно отключить SELinux с помощью

setenforce permissive -> no failure, but getenforce still returns "Enforcing"
cat 0 > /sys/fs/selinux/enforce -> no failure, but getenforce still returns "Enforcing"

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

У кого есть еще несколько советов или ресурсов для меня?

Ответы

Ответ 1

Вы можете использовать supolicy из приложения SuperSU, см. ссылку для подробного описания, когда и как это можно назвать.

Короче:

  • Узнайте, почему что-то блокируется SELinux, проверяя сообщения аудита, например. dmesg | grep "audit"
  • Создайте правило allow ..., которое позволяет заблокировать операцию. Они аналогичны (идентичны?), Чтобы "разрешать" правила в файлах SELinux *.te.
  • Запустите supolicy --live "allow ..." в корневой оболочке и проверьте, завершена ли операция. Если нет, расширьте правило разрешения. Вы можете указать несколько правил "allow" в одном вызове supolicy.

Обратите внимание, что supolicy является дорогостоящей операцией, поэтому обязательно вызывайте ее только один раз.

Если вы не хотите зависеть от Chainfire SuperSU, вы можете попробовать sepolicy-inject. Я сам этого не испытывал.

Ответ 2

Я пытаюсь отключить SELinux на Android 4.3 некоторое время, и это то, к чему я пришел.

В Samsung S4 Android 4.3, setenforce 0 изменится на Permissive.

В Samsung Note 3 Android 4.3, setenforce 0 НЕ изменяет статус SELinux.

Я пробовал Nexus 4 Android 4.3, но по умолчанию это Permissive mode

Ответ 3

Измените build.prop файл в системной папке в самом первом каталоге, используя поиск текстового редактора "selinux"
Если вы видите что-то вроде enable_selinux = 1, измените его на 0, если это нужно отключить, наоборот, изменения будут применены после перезагрузки или загрузки.

В моем случае они уже отключили его, но он был в строке комментария

# ro.boot.selinux = отключить

Строка начинается С# - это комментарий, который ничего не изменит. Аналогичным образом вы можете включить/выключить учетную запись нескольких пользователей, обновления системы.

Мой производитель устройств отключил обновления системы.

Ответ 4

Если у вас есть root-доступ, запустите su 0 setenforce 0, чтобы перейти в режим Permissive:

// Set SELinux to permissive
private static final String COMMAND = "su 0 setenforce 0"; 
try {
  Runtime.getRuntime().exec(COMMAND);
} catch (IOException e) {
  e.printStackTrace();
}

Ответ 5

Вы можете загрузить имя приложения selinux mod changer. Это не в игровом магазине, поэтому вы можете загрузить его из хрома или любого другого браузера по вашему выбору. Приложение просто нуждается в корневом разрешении, поэтому попробуйте его.