Fonctionnalités de veille

Les capacités permettent aux processus Linux de supprimer la plupart des privilèges de type racine tout en conservant le sous-ensemble de privilèges dont ils ont besoin pour effectuer leur fonction. L'implémentation d'origine des capacités empêchait les processus fork+exec d'hériter des capacités, sauf si les fichiers exécutés avaient des capacités de fichier configurées. Les capacités de fichier, quant à elles, présentent un risque de sécurité, car tout processus exécutant un fichier avec des capacités de fichier peut acquérir ces capacités.

Les fonctionnalités ambiantes permettent aux services système lancés par init de configurer des fonctionnalités dans leurs fichiers .rc, ce qui permet de regrouper la configuration dans un seul fichier au lieu de la répartir 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 capacités de ce service.

Les capacités ambiantes sont le mécanisme privilégié 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 fonctionnalités ambiantes au lieu de configurer les fonctionnalités du système de fichiers à l'aide de la section "caps" dans les fichiers config.fs.

Lorsque vous définissez des capacités pour des services non lancés par init, continuez à configurer les capacités du système de fichiers à l'aide de fs_config.c.

Activer les fonctionnalités ambiantes

Pour activer les fonctionnalités ambiantes pour un service donné, utilisez le mot clé capabilities dans init. Pour en savoir plus sur la langue d'initialisation actuelle, consultez le fichier init README.md.

Par exemple, pour activer les fonctionnalités ambiantes pour le service AOSP wificond, le fichier.rc pour le service wificond configure l'utilisateur et les groupes appropriés, et attribue au service les fonctionnalités spécifiées à l'aide du mot clé capabilities :

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 vers toutes les branches pertinentes du noyau commun Android.

Le correctif principal des fonctionnalités ambiantes https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 a été rétroporté dans :

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 :

Validation

Les tests unitaires Bionic incluent des tests unitaires pour les fonctionnalités ambiantes. En outre, l'utilisation du mot clé "capabilities" dans init Android pour un service, puis la vérification que le service obtient les capacités attendues permettraient de tester cette fonctionnalité au moment de l'exécution.