Les fonctionnalités permettent aux processus Linux de supprimer la plupart des privilèges de type root tout en conservant le sous-ensemble de privilèges dont ils ont besoin pour exécuter leur fonction. L'implémentation originale des capacités empêchait les processus fork+exec d'hériter des capacités à moins que les fichiers en cours d'exécution n'aient des capacités de fichier configurées. Les capacités de fichier, à leur tour, présentent un risque de sécurité puisque tout processus exécutant un fichier avec des capacités de fichier pourra acquérir ces capacités.
Les capacités ambiantes permettent aux services système lancés par init de configurer les capacités dans leurs fichiers .rc
, en réunissant la configuration dans un seul fichier au lieu de scinder la configuration dans le fichier fs_config.c
. Cela signifie que pour tout service lancé par init, vous pouvez utiliser le fichier .rc
associé au service pour configurer les fonctionnalités de ce service.
Les capacités ambiantes sont le mécanisme préféré pour définir les capacités des services lancés par init (cette méthode conserve tous les aspects de la configuration du service dans un seul fichier .rc
). Nous vous recommandons d'utiliser les capacités ambiantes au lieu de configurer les capacités du système de fichiers à l'aide de la section caps dans les fichiers config.fs
.
Lors de la définition des capacités des services non lancés par init , continuez à configurer les capacités du système de fichiers à l'aide de fs_config.c
.
Activation des capacités ambiantes
Pour activer les fonctionnalités ambiantes pour un service donné, utilisez le mot- capabilities
dans init. Pour plus de détails sur le langage d'initialisation actuel, reportez-vous au fichier init README.md .
Par exemple, pour activer les capacités ambiantes pour le service AOSP wificond
, le fichier .rc du service wificond
configure l'utilisateur et les groupes appropriés et donne au service les capabilities
spécifiées à l'aide du mot-cléabilities :
service wificond /system/bin/wificond class main user wifi group wifi net_raw net_admin capabilities NET_RAW NET_ADMIN
Implémentation de référence
L'implémentation de référence est le noyau commun Android https://android.googlesource.com/kernel/common/
Correctifs requis
Les correctifs requis ont été rétroportés sur toutes les branches communes du noyau Android pertinentes.
Le correctif principal des capacités ambiantes https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 a été rétroporté dans :
- Android-3.18 :
- Android-4.1 :
Un petit correctif de sécurité https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 a été rétroporté dans :
- Android-3.18 :
- Android-4.1 :
Validation
Les tests unitaires bioniques incluent des tests unitaires pour les capacités ambiantes. Au-delà de cela, l'utilisation du mot clé "capacities" dans Android init pour un service, puis la vérification que le service obtient les capacités attendues permettraient de tester l'exécution de cette fonctionnalité.