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:
- android-3.18: <ph type="x-smartling-placeholder">
- android-4.1: <ph type="x-smartling-placeholder">
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:
- android-3.18: <ph type="x-smartling-placeholder">
- android-4.1: <ph type="x-smartling-placeholder">
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é.