web-dev-qa-db-fra.com

Désactiver ou modifier temporairement SELinux sur Android

Je suis le développeur sur une application root - pour Android.

Malheureusement, sur certains appareils/ROM, il existe SELinux in enforce -mode et empêche certaines actions de mon application.

Comme il s'agit d'une application racine, les utilisateurs m'accordent un accès root!

À présent, SELinux bloque certaines de mes actions et je dois trouver une solution à cela.

J'ai essayé de désactiver temporairement SELinux en

setenforce permissive -> no failure, but getenforce still returns "Enforcing"
cat 0 > /sys/fs/selinux/enforce -> no failure, but getenforce still returns "Enforcing"

Je joue avec l'idée de modifier le fichier sepolicy - au moment de l'exécution pour autoriser les commandes bloquées et déclencher un rechargement de celui-ci, mais je ne suis pas sûr si et comment cela pourrait fonctionner, ni une bonne idée .

Qui a d'autres astuces ou ressources pour moi?

16
Martin L.

Vous pouvez utiliser supolicy à partir de l'application SuperSU, voir le lien pour une description détaillée du moment et de la manière dont elle peut être appelée.

En bref:

  • Découvrez pourquoi quelque chose est bloqué par SELinux en vérifiant les messages d’audit, par exemple. dmesg | grep "audit"
  • Créez une règle allow ... qui autorise l'opération bloquée. Elles sont similaires (identiques?) Aux règles "autoriser" dans les fichiers SELinux * .te.
  • Exécutez supolicy --live "allow ..." dans un shell racine et vérifiez si l'opération réussit maintenant. Sinon, étendez votre ou vos règles d’autorisation. Vous pouvez spécifier plusieurs règles "autoriser" dans un seul appel supolicy.

Notez que supolicy est une opération coûteuse, assurez-vous de ne l'appeler qu'une seule fois. 

Si vous ne voulez pas dépendre du SuperSU de Chainfire, vous pouvez essayer sepolicy-inject . Je n'ai pas testé cela moi-même.

8
Martin Gerczuk

Editez le fichier build.prop dans le dossier système du tout premier répertoire, en utilisant un éditeur de texte, recherchez "selinux" 
Si vous voyez quelque chose comme enable_selinux = 1 , remplacez-le par 0, si vous souhaitez le désactiver, les modifications seront appliquées après un redémarrage ou un démarrage.

Dans mon cas, ils l'ont déjà désactivé, mais c'était dans une ligne de commentaire 

# ro.boot.selinux = désactiver

La ligne commençant par # est un commentaire qui ne changera rien. De même, vous pouvez activer/désactiver le compte multi-utilisateurs, les mises à jour du système. 

Le fabricant de mes appareils a désactivé les mises à jour système.

2
Rahul

J'essaie de désactiver SELinux sur Android 4.3 depuis un moment maintenant et c’est ce que j’ai trouvé. 

Sur le Samsung S4 Android 4.3, setenforce 0 passera en mode Permissive.

Sur Samsung Note 3 Android 4.3, setenforce 0 ne modifiera PAS le statut SELinux.

J'ai essayé Nexus 4 Android 4.3, mais par défaut, il s'agit du mode Permissive 

2
user1546570

Si vous avez un accès root, exécutez su 0 setenforce 0 pour passer en mode 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

Vous pouvez télécharger le nom de l'application selinux mode changer. Ce n'est pas sur Play Store, vous devez donc le télécharger à partir de chrome ou de tout autre navigateur de votre choix. App besoin juste de la permission root alors essayez-le.

0
Herik