2013-10-06 4 views
14

Я разработчик на корень -app для Android.Временно отключить или изменить SELinux на Android

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

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

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

+0

Я думал, что су демон обошел SELinux, а также nosuid, бегая в другом контексте целиком, нет? Какие действия в частности блокируются? – Delyan

+0

Я не знаю, как Chainfire сделал это с SU. Но в моем случае это, например. 'avc: denied {execstack} для pid = 10971' и, возможно, больше вещей после этого:/ –

+0

Вы отправляете' execstack' самостоятельно? Вы понимаете, что тот, кто настроил режим Enforcing, мог бы заблокировать демону 'su', пока он беспомощен в этом случае, не так ли? – Delyan

ответ

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 режим

+0

Вы на самом деле не отвечаете на вопрос ... –

+2

@ MatthiasUrlichs он этого не сделал? Он дал возможность активно менять исполнительные механизмы SELinux во время выполнения. ОП предположил, что его проблема напрямую связана с этим. Я могу подтвердить, что статус SELinux изменится, когда 'setenforce' будет запущен как root в CyanogenMod 11. –

0

Если у вас есть корневой доступ, запустите 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(); 
} 
+0

Привет, t1mz0r, спасибо за отзыв. Это то, что я уже сделал и упомянул в своем первоначальном запросе. user1546570 указал, что он иногда работает, а иногда нет. Тем временем я знаю, что он не работает на нескольких устройствах Samsung. Я рассмотрел эту проблему здесь, программно меняя политики во время выполнения и заставляя их перезагружать, вместо того, чтобы отключать весь SELinux через setenforce. Теперь, когда Android 5 находится на дорогах, это может вообще измениться - setenforce, по крайней мере, работает на устройствах Nexus. Приветствия и добрые пожелания –

0

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

7

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

Короче:

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

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

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

+1

Привет и добро пожаловать. Я бы рекомендовал вам расширить свой ответ, чтобы быть более полезным и привлечь больше голосов. – Wtower

+1

Спасибо за подсказку. Я добавил грубое описание того, как использовать 'supolicy'. –

+1

Я бы предпочел не доверять корню двоичным кодом с закрытым исходным кодом, поэтому у меня нет SuperSU. Мне очень хотелось бы узнать, какие API вызывает это приложение. Я попробую «setpolicy-inject». – Wyatt8740

1

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

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

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

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

Устройства, выпускающие устройства, не имеют системных обновлений.

Смежные вопросы