W zależności od tego, w jaki sposób urządzenie zostało zrootowane i na jakim dysku Android zostanie uruchomiony, zostanie ustalone, w jaki sposób można go wyłączyć. Pierwszą rzeczą, aby spróbować to:
adb shell su 0 setenforce 0
To nie jest takie samo jak:
adb shell setenforce 0
wykonać na su powoduje przejście domeny z muszli (która nie może setenforce) do domeny su (co może zadzwoń setenforce). Na przykład, uruchom:
$ adb shell id -Z
context=u:r:shell:s0
porównaniu do:
$ adb shell su 0 id -Z
context=u:r:su:s0
Może to nie z trzech powodów:
- Nie mają su wykonywalny
- SU wykonywalny ma niewłaściwa etykieta
- Reguły domeny su nie zostały wkompilowane w bootimage
Aby rozwiązać problem 2, można (zakładając adb root):
adb remount
adb shell chcon /system/xbin/su u:object_r:su_exec:s0
To może zakończyć się niepowodzeniem, co będzie prawdopodobnie oznaczać problem 3. Aby rozwiązać problem, 3, trzeba przekompilować butem. img zawierający pliki strategii su. Jeśli kompilujesz AOSP, po prostu lunch userdebug lub eng wariant urządzenia.
Innym podejściem byłoby usunięcie funkcji z init.c, a podobnie jak w przypadku wydania 3, konieczna jest rekompilacja boot.img. Przejdź do systemu/core/init/init.c (lub .cpp) i usuń wszystkie wywołania funkcji security_setenforce().
Dodatkowo XDA ma aplikacji, która może pomóc zautomatyzować ten proces i uczynić go łatwiejszym, jednak nie mogę mówić do jakości aplikacji: http://www.xda-developers.com/easily-change-your-android-selinux-mode/
' chmod 755/system/su.d/permissive.sh' –