Docker capabilities

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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.

Voir aussi