SELinux est un mécanisme de sécurité qui empêche l'accès non autorisé de processus à d'autres processus, actions et systèmes de fichiers (le "fichier" d'UNIX comprend tous les fichiers ordinaires, les répertoires, les périphériques de blocs, les périphériques de caractères, les sockets, etc.) Chaque processus, fichier, répertoire et action est étiqueté avec un contexte SELinux, puis une politique est définie ce qu'un contexte peut faire à un autre contexte. La politique est chargée par le noyau ou par init
à chaque démarrage, et tout ce qui n'est pas défini dans la politique est refusé par le noyau. Pour plus de détails, voir cette réponse .
Les contextes de système de fichiers sont également générés avec la politique. Sur Android, les deux sepolicy
y file_contexts
sont sauvegardés dans rootfs /
o /{system,vendor,odm}/etc/selinux/
les répertoires. Les contextes du système de fichiers peuvent être modifiés manuellement en utilisant chcon
ou de file_contexts
en utilisant restorecon
. Le processus peut être exécuté avec un contexte donné en utilisant runcon
. init
démarre également tous les processus avec une valeur prédéfinie seclabel
in *.rc
fichiers. Certains les contextes de système de fichiers sont également définis à chaque démarrage en utilisant restorecon
comando in *.rc
des fichiers.
Fixer les contextes dans TWRP corrige les étiquettes de contexte de système de fichiers à partir d'une sauvegarde /file_contexts
fichier. Mais si ce fichier est destiné à un autre appareil ou contient des contextes erronés, périmés ou incomplets, l'appareil peut se retrouver en boucle de démarrage. Il vaut mieux éviter d'utiliser "Fix Contexts", et utiliser plutôt chcon
o restorecon
manuellement si nécessaire. Ou remplacez file_contexts
en voie de guérison ramdisk
avec un fichier mis à jour de votre ROM actuel.
EXEMPLE :
J'ai environ 40000 règles de politique sur mon appareil, dont une :
~# sesearch --allow -s init -t system_data_file -c dir /sys/fs/selinux/policy
Found 1 semantic av rules:
allow init system_data_file : dir { search read open ioctl write create getattr setattr relabelfrom relabelto mounton add_name remove_name rmdir } ;
Sur plus de 2000 contextes de systèmes de fichiers, un seul l'est :
~# grep system_data_file /system/etc/selinux/*contexts
/data(/.*)? u:object_r:system_data_file:s0
Contexte SELinux de init
processus :
~# ps -p 1 -o pid,cmd,label
PID CMD LABEL
1 /init u:r:init:s0
Contexte SELinux du répertoire contenant les paramètres du système :
~# ls -dZ /data/system
u:object_r:system_data_file:s0 /data/system
Donc si /data/system
est étiqueté avec un mauvais contexte, init
ne sera pas en mesure d'exécuter search
, read
y open
les opérations sur le répertoire et le périphérique peuvent faire une boucle de démarrage.
DAC vs MAC :
SELinux est une mise en œuvre du contrôle d'accès obligatoire (MAC). Le contrôle d'accès discrétionnaire (DAC) atteint le même objectif d'une manière moins agressive en assignant des UIDs/GIDs aux processus et aux fichiers :
~# ls -ld /data /data/system
drwxrwx--x 41 system system 4096 Oct 21 17:40 /data
drwxrwxr-x 21 system system 3488 Nov 9 13:36 /data/system
Le mode de permission et la propriété expliquent que seuls les processus s'exécutant avec UID ou GID 1000
( system
) pourront lire et écrire dans le répertoire et les applications normales (avec des UIDs/GIDs dans la gamme 10000
a 19999
) ne sont pas autorisés à lire les paramètres du système.
L'inconvénient du DAC est qu'il est autorisé par défaut et qu'il a une capacité d'absorption de l'énergie. Super utilisateur (Utilisateur racine avec UID 0
est autorisé à faire n'importe quoi). Alors que le MAC est refusé par défaut et qu'il n'y a pas de Super Contexte Il est donc moins susceptible d'être exploité. Les pouvoirs de l'utilisateur root sont également divisés en capacités pour suivre le le principe du moindre privilège . Combinés ensemble, DAC et MAC fournissent une isolation, une protection et un sandboxing plus robustes.