2015-06-23 8 views
9

Chcę ustawić tryb SELinux (Security Enhanced Linux) na Permissive lub (0) na Androidzie 4.4.4 (i powyżej, jeśli to możliwe). Używam następującego polecenia: setenforce 0, setenforce permissive i setenforce Permissive w katalogu głównym (moje urządzenie jest zrootowane). Ale wyjście getenforce jest zawsze Enforcing. Teraz jestem wyczerpany tym problemem.Jak ustawić SELinux na 0 lub tryb permissive w Android 4.4.4 i nowszych?

Czy ktoś może mi pomóc? Z góry dziękuję.

Odpowiedz

6

Apparently Google usunęła flagi jądra CONFIG_SECURITY_SELINUX_DEVELOP od wielu ich Zapasów. Dlatego standardowa sztuczka wspomniana przez Williama (poniżej) prawdopodobnie nie działa. Przykładem tych urządzeń jest Samsung Note 4 (SM-N910F) z systemem AOS 4.4.4.

Link powyżej stanów:

CONFIG_SECURITY_SELINUX_DEVELOP aka globalny tryb liberalne jest przydatna dla gdy dopiero rozwija politykę urządzenia specyficzne dla zarządu (dodaj „androidboot.selinux = przyzwolenie” na BOARD_KERNEL_CMDLINE). To również pozwolenia przemijające setenforce 0 w -userdebug lub -pl buduje, które mogą być pomocne dla programistów.

Jeśli bootloader jest zablokowany, to nie można modyfikować CMDLINE jądra

„Ponadto, kod do programu inicjującego do przetwarzania opcję androidboot.selinux= jest kompilowany tylko w -userdebug i -eng buduje, tak nawet poza blokowaniem bootloadera, nie można używać androidboot.selinux=permissive w kompilacji -user. "

Sposób, by sprawdzić, co masz zbudować typ to:

$ getprop ro.build.type 
user 
13

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:

  1. Nie mają su wykonywalny
  2. SU wykonywalny ma niewłaściwa etykieta
  3. 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/

2

MUSI być zakorzenione! Nie wiem, czy to działa na KitKat (powinno), ale używam tego na moim Nexus 6. Uruchom w Terminalu lub ADB Shell:

su 
mount -o remount,rw /system 
mkdir /system/su.d 
echo "#!/system/bin/sh" > /system/su.d/permissive.sh 
echo "echo 0 > /sys/fs/selinux/enforce" >> /system/su.d/permissive.sh 
chmod 755 /system/su.d/permissive.sh 

i sprawdź to po restarcie przez to:

su 
/system/bin/getenforce 
+0

' chmod 755/system/su.d/permissive.sh' –

Powiązane problemy