Docker capabilities
| Fiche express | |
|---|---|
| Type | Capacités noyau Linux (POSIX capabilities) accordées à un conteneur |
| Mécanisme lié | seccomp (filtrage des appels système) |
| Par défaut | 14 capabilities accordées, ensemble restreint par rapport à un accès root complet |
| Options CLI | --cap-add · --cap-drop · --security-opt seccomp=...
|
| Voir aussi | Docker namespaces · Docker containers |
Un conteneur Docker ne tourne pas, par défaut, avec l'ensemble des privilèges root du noyau : deux mécanismes distincts et complémentaires restreignent ce qu'il peut faire. Les capabilities Linux découpent les privilèges historiquement associés à root en unités granulaires (modifier la propriété d'un fichier, se lier à un port privilégié, changer d'UID...), activables et désactivables indépendamment. seccomp (secure computing mode), de son côté, filtre les appels système eux-mêmes, indépendamment des capabilities accordées. Docker combine les deux : un jeu de capabilities par défaut, et un profil seccomp par défaut qui bloque les appels système jugés dangereux ou inutiles pour un conteneur applicatif standard.
Capabilities accordées par défaut
Docker accorde par défaut les 14 capabilities suivantes :
| Capability | Rôle (résumé) |
|---|---|
CHOWN |
Modifier le propriétaire/groupe d'un fichier |
DAC_OVERRIDE |
Contourner les vérifications de permissions de lecture/écriture/exécution |
FOWNER |
Contourner les vérifications de propriétaire sur certaines opérations fichier |
FSETID |
Conserver les bits setuid/setgid lors de modifications de fichiers |
KILL |
Envoyer des signaux à des processus appartenant à d'autres UID |
SETGID |
Changer le GID d'un processus |
SETUID |
Changer l'UID d'un processus |
SETPCAP |
Transmettre ou limiter les capabilities d'autres processus |
NET_BIND_SERVICE |
Se lier à un port réseau privilégié (< 1024) |
NET_RAW |
Utiliser des sockets bruts (ex. ping en ICMP direct)
|
SYS_CHROOT |
Utiliser chroot()
|
MKNOD |
Créer des fichiers spéciaux (périphériques) avec mknod()
|
AUDIT_WRITE |
Écrire dans le journal d'audit du noyau |
SETFCAP |
Attribuer des capabilities à un fichier |
Capabilities non accordées par défaut
Deux capabilities notables restent hors du jeu par défaut, en raison de leur portée large et du risque associé :
SYS_ADMIN— capability « fourre-tout » qui couvre un grand nombre d'opérations d'administration système ; son ajout revient quasiment à redonner un accès root étendu, à n'accorder qu'en dernier recours.NET_ADMIN— configuration réseau avancée (interfaces, routes, règles de pare-feu) ; nécessaire par exemple pour manipuler des règles réseau depuis l'intérieur du conteneur.
Usage
docker container run --cap-add=NET_ADMIN --rm -it --security-opt seccomp=custom-profile.json alpine sh
Les ressources officielles sur seccomp et les profils par défaut/personnalisés : docs.docker.com — Seccomp security profiles.
Bonnes pratiques
Le principe de moindre privilège s'applique directement ici : partir de --cap-drop=ALL puis ne réintroduire que les capabilities strictement nécessaires à l'application avec --cap-add, plutôt que de partir du jeu par défaut et d'en ajouter d'autres au besoin.