web-dev-qa-db-fra.com

Comment régler SELinux sur 0 ou le mode permissif en Android 4.4.4 et supérieur?

Je souhaite définir le mode SELinux (Security Enhanced Linux) sur Permissive ou (0) sur Android 4.4.4 (et plus si possible). J'utilise la commande suivante: setenforce 0, setenforce permissive et setenforce Permissive sous root (mon appareil est rooté). Mais la sortie de getenforce est toujours Enforcing. Maintenant, je suis épuisé par ce problème.

Quelqu'un peut-il me donner une solution? Merci d'avance.

11
Vu Tran

Apparemment Google a supprimé le drapeau du noyau CONFIG_SECURITY_SELINUX_DEVELOP De plusieurs de leurs noyaux Stock. Ainsi, l'astuce standard mentionnée par William (ci-dessous) ne fonctionne probablement pas. Un exemple de ces appareils est le Samsung Note 4 (SM-N910F) exécutant AOS 4.4.4.

Le lien ci-dessus indique:

CONFIG_SECURITY_SELINUX_DEVELOP aka mode global permissif, est utile lorsque vous développez pour la première fois une politique spécifique à l'appareil pour une carte (ajoutez 'androidboot.selinux = permissive' à BOARD_KERNEL_CMDLINE). Il permet également le transitoire setenforce 0 in - userdebug ou - eng builds, ce qui peut être utile pour les développeurs.

Si le chargeur de démarrage est verrouillé, vous ne pouvez pas modifier la ligne de commande du noyau

"De plus, le code du programme init pour le traitement de l'option androidboot.selinux= Est uniquement compilé dans les versions -userdebug Et -eng, Donc même en dehors du verrouillage du chargeur de démarrage, vous ne pouvez pas utiliser androidboot.selinux=permissive Sur une version -user. "

La façon de vérifier le type de build que vous avez est la suivante:

$ getprop ro.build.type
user
9
not2qubit

Selon la façon dont votre appareil a été enraciné et ce que Android ROM votre fonctionnement déterminera comment vous pouvez le désactiver. La première chose à essayer est:

adb Shell su 0 setenforce 0

Ce n'est PAS la même chose que:

adb Shell setenforce 0

L'exécution sur su entraîne une transition de domaine de Shell (qui ne peut pas définir setforce) vers le domaine su (qui peut appeler setenforce). Par exemple, exécutez:

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

par rapport à:

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

Cela peut échouer pour trois raisons:

  1. Vous n'avez pas le su exécutable
  2. L'exécutable su a la mauvaise étiquette
  3. Les règles de domaine su n'ont pas été compilées dans l'image de démarrage

Pour corriger le problème 2, vous pouvez (en supposant que adb est root):

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

Cela peut échouer, ce qui indiquera probablement le problème 3. Pour résoudre le problème 3, vous devez recompiler un fichier boot.img qui contient les fichiers de stratégie su. Si vous compilez AOSP, il vous suffit de lancer une variante userdebug ou eng de votre appareil.

Une autre approche serait de supprimer la fonctionnalité de init.c et, comme le problème 3, nécessite une recompilation du fichier boot.img. Accédez à system/core/init/init.c (ou .cpp) et supprimez tous les appels à security_setenforce ().

De plus, XDA a une application qui peut aider à automatiser ce processus et à le rendre plus facile, cependant, je ne peux pas parler de la qualité de l'application: http://www.xda-developers.com/easily-change-your -Android-selinux-mode /

16
William Roberts

DOIT ÊTRE ENRACINÉ! Je ne sais pas si cela fonctionne sur KitKat (il devrait), mais j'utilise cela sur mon Nexus 6. Exécutez la commande suivante dans le terminal ou le shell ADB:

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

Et vérifiez-le après le redémarrage par ceci:

su
/system/bin/getenforce
3
Kristopher