Fonctionnalités ambiantes

Les capacités permettent aux processus Linux d’abandonner la plupart des privilèges de type racine tout en en conservant le sous-ensemble de privilèges dont ils ont besoin pour exécuter leur fonction. L'implémentation initiale des capacités rendait impossible la migration fork+exec'd permet aux processus d'hériter des capacités, sauf si les fichiers en cours d'exécution contiennent configurées. Les fonctionnalités des fichiers présentent à leur tour un risque pour la sécurité puisque tout processus exécutant un fichier avec des capacités de fichier peut gagner ces capacités.

Les fonctionnalités ambiantes permettent aux services système lancés par init de configurer dans leurs fichiers .rc, ce qui permet d'intégrer un seul fichier au lieu de scinder la configuration fs_config.c. Cela signifie que pour tout service lancé par init, vous pouvez utiliser le fichier .rc associé au service pour et configurer des fonctionnalités pour ce service.

Les fonctionnalités ambiantes sont le mécanisme privilégié pour définir des fonctionnalités pour les services lancés par init (cette méthode conserve tous les aspects du service dans un seul fichier .rc). Nous vous recommandons d'utiliser le mode Veille des fonctionnalités au lieu de configuration de fichiers des fonctionnalités système à l'aide de la section des majuscules dans les fichiers config.fs.

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

Activer les fonctionnalités ambiantes

Pour activer les fonctionnalités ambiantes pour un service donné, utilisez la classe Mot clé capabilities dans init. Pour le langage init actuel consultez le init README.md.

Par exemple, pour activer les fonctionnalités ambiantes pour le service AOSP, wificond, le fichier.rc pour le service wificond configure les un utilisateur et des groupes, et donne au service les fonctionnalités spécifiées à l'aide de 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 tous les noyaux communs Android pertinents branches.

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é pour:

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é pour:

Validation

Bionique les tests unitaires incluent des tests unitaires pour les fonctionnalités ambiantes. En outre, l'utilisation de les "fonctionnalités" un mot clé dans Android init pour un service, puis en vérifiant le service obtient les fonctionnalités attendues, qui permettraient de tester l'exécution cette fonctionnalité.