2015-06-23 15 views
9

Voglio impostare la modalità SELinux (Security Enhanced Linux) su Permissive o (0) su Android 4.4.4 (e sopra se possibile). Io uso il seguente comando: setenforce 0, setenforce permissive e setenforce Permissive sotto root (il mio dispositivo è rootato). Ma l'output di getenforce è sempre Enforcing. Ora sono sfinito da questo problema.Come impostare SELinux su 0 o sulla modalità permissiva in Android 4.4.4 e versioni successive?

Qualcuno può darmi una soluzione? Grazie in anticipo.

risposta

6

Apparently Google ha rimosso la bandiera CONFIG_SECURITY_SELINUX_DEVELOP kernel da molti dei loro Stock kernel. Quindi il trucco standard menzionato da William (sotto) probabilmente non funziona. Un esempio di questi dispositivi è il Samsung Note 4 (SM-N910F) con AOS 4.4.4.

Il link sopra afferma:

CONFIG_SECURITY_SELINUX_DEVELOP alias modalità permissiva globale, è utile per quando si sono prima sviluppare la politica specifica del dispositivo per una scheda (aggiungere 'androidboot.selinux = permissive' a BOARD_KERNEL_CMDLINE). E 'anche permessi transitori setenforce 0 in -userdebug o -it costruisce, che può essere utile per gli sviluppatori.

Se il bootloader è bloccato, allora non si può modificare il kernel cmdline

"Inoltre, il codice del programma init per l'elaborazione l'opzione androidboot.selinux= viene compilato solo in -userdebug e -eng costruisce, così anche a parte il blocco del bootloader, non è possibile utilizzare androidboot.selinux=permissive su una build -user ".

Il modo per controllare quali costruire il tipo che hai è:

$ getprop ro.build.type 
user 
13

A seconda di come il dispositivo è stato rootato e quale Android ROM è in esecuzione determinerà come disattivarlo. La prima cosa da provare è:

adb shell su 0 setenforce 0 

Questo non è lo stesso di:

adb shell setenforce 0 

L'esecuzione su su provoca una transizione di dominio da shell (che non può setenforce) nel dominio su (che può chiama setenforce). Ad esempio, eseguire:

$ adb shell id -Z 
context=u:r:shell:s0 

rispetto a:

$ adb shell su 0 id -Z 
context=u:r:su:s0 

Questo può fallire per tre ragioni:

  1. non avete la do eseguibile
  2. il Su eseguibile ha il etichetta errata
  3. Le regole del dominio su non sono state compilate nell'immagine boot

Per correggere problema 2, è possibile (assumendo ADB è root):

adb remount 
adb shell chcon /system/xbin/su u:object_r:su_exec:s0 

Questo potrebbe fallire, che probabilmente indicano problema 3. Per risolvere problema 3, è necessario ricompilare uno stivale. img che contiene i file della politica su. Se stai compilando AOSP, prepara una variante userdebug o eng del tuo dispositivo.

Un altro approccio, sarebbe quello di rimuovere la funzionalità da init.c, e come il problema 3, richiede una ricompilazione di boot.img. Andare in system/core/init/init.c (o .cpp) e rimuovere tutte le chiamate a security_setenforce().

Inoltre, XDA ha un'applicazione che può aiutare ad automatizzare questo processo e rendere più facile, però, non posso parlare per la qualità della domanda: http://www.xda-developers.com/easily-change-your-android-selinux-mode/

2

deve essere radicato! Non sono sicuro se questo funziona su KitKat (dovrebbe) ma io uso questo sul mio Nexus 6. Eseguire segue nel terminale o 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 

e controllarlo dopo il riavvio da questo:

su 
/system/bin/getenforce 
+0

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