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?
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:
dmesg | grep "audit"
allow ...
qui autorise l'opération bloquée. Elles sont similaires (identiques?) Aux règles "autoriser" dans les fichiers SELinux * .te.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.
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.
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
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();
}
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.