Временное отключение или изменение 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. Это не в игровом магазине, поэтому вы можете загрузить его из хрома или любого другого браузера по вашему выбору. Приложение просто нуждается в корневом разрешении, поэтому попробуйте его.