Les fonctionnalités permettent aux processus Linux de supprimer la plupart des droits d'accès racine tout en conservant le sous-ensemble de droits dont ils ont besoin pour accomplir leur fonction. L'implémentation d'origine des fonctionnalités empêchait les processus fork+exec d'hériter des fonctionnalités, sauf si les fichiers exécutés avaient des fonctionnalités de fichier configurées. Les fonctionnalités de fichier présentent à leur tour un risque de sécurité, car tout processus exécutant un fichier avec des fonctionnalités de fichier peut en bénéficier.
Les fonctionnalités d'ambiance permettent aux services système lancés par init de configurer les fonctionnalités dans leurs fichiers .rc
, ce qui permet d'intégrer la configuration dans un seul fichier au lieu de la diviser 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 fonctionnalités d'ambiance sont le mécanisme privilégié pour définir les fonctionnalité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 d'environnement plutôt que 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 fonctionnalités pour des services non lancés par init, continuez à configurer les fonctionnalités du système de fichiers à l'aide de fs_config.c
.
Activer les fonctionnalités d'ambiance
Pour activer les fonctionnalités d'ambiance pour un service donné, utilisez le mot clé capabilities
lors de l'initialisation. Pour en savoir plus sur la langue d'initialisation actuelle, consultez le fichier init README.md.
Par exemple, pour activer les fonctionnalités d'ambiance pour le service AOSP wificond
, le fichier .rc du service wificond
configure l'utilisateur et les groupes appropriés, puis 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 kernel commun Android https://android.googlesource.com/kernel/common/.
Correctifs obligatoires
Les correctifs requis ont été rétroportés vers toutes les branches du kernel Android commun pertinentes.
Le correctif principal des fonctionnalités d'ambiance 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 Bionic incluent des tests unitaires pour les fonctionnalités d'ambiance. En outre, l'utilisation du mot clé "capabilities" dans l'initialisation Android pour un service, puis la vérification que le service obtient les fonctionnalités attendues, permet de tester cette fonctionnalité au moment de l'exécution.