Capacités ambiantes

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 d'hériter des capacités à moins que les fichiers en cours d'exécution n'aient configuré des capacités de fichier. Les capacités de fichiers, à leur tour, présentent un risque de sécurité puisque tout processus exécutant un fichier avec des capacités de fichiers 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 regroupant la configuration dans un seul fichier au lieu de diviser 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 fonctionnalités des services non lancés par init , continuez à configurer les fonctionnalités du système de fichiers à l'aide de fs_config.c .

Activation des fonctionnalités ambiantes

Pour activer les fonctionnalités ambiantes pour un service donné, utilisez le mot-clé capabilities dans init. Pour plus de détails sur la langue d'initialisation actuelle, reportez-vous au init README.md .

Par exemple, pour activer les fonctionnalité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 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 communes du noyau Android pertinentes.

Le principal correctif 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 bioniques incluent des tests unitaires pour les capacités ambiantes. Au-delà de cela, utiliser le mot-clé "capabilities" dans l'initialisation d'Android pour un service, puis vérifier que le service obtient les fonctionnalités attendues permettrait de tester l'exécution de cette fonctionnalité.