Pour celleux qui s’intéressent à la conteneurisation, le sujet de la sécurité est un point important lorsqu’on utilise Docker.Une configuration ou information intéressante, c’est qu’il est possible de l’utiliser en mode “rootless” (sans être administrateur de la machine). Voici quelques notes à propose de l’outil de configuration de ce mode.

La doc officielle, pour utiliser un tel usage n’est pas très bavarde concernant les rouages de docker en mode rootless. Voici quelques informations glanées sur internet, mais aussi en lisant le script que Docker Inc recommande d’utiliser.

Mappage d’utilisateurices

Le script pour activer Docker en mode rootless va, dans un premier temps vérifier la présence de newuidmap/newgidmap, ainsi que la capacité du noyau à créer des namespaces.

Le script vérifie également que l’utilisateur dispose d’une plage d’UID et de GID supplémentaires dans /etc/subuid et /etc/subgid.

Par exemple :

alice:100000:65536

Ce mappage est ensuite utilisé par Docker pour réaliser le mapping entre les utilisateurs dans les conteneurs et celles de l’hôte.

XDG_RUNTIME_DIR et socket

Docker en mode Rootless utilise XDG_RUNTIME_DIR pour placer son socket ($XDG_RUNTIME_DIR/docker.sock).

En mode systemd, le script attend que ce répertoire soit correctement fourni par la session utilisateur.

Le daemon Docker en mode rootless ne communique pas avec le socket Docker qu’on retrouve classiquement (/var/run/docker.sock),mais avec un socket spécifique à l’utilisateurice.

Configurer systemd en mode utilisateur

Lorsque systemd --user est disponible, le script crée une unité spécifique à l’utilisateurice : ~/.config/systemd/user/docker.service

Cette unité lance dockerd-rootless.sh pour initier le daemon de l’utilisateurice (et non directement dockerd).

C’est ce qui va permettre, entre autre de mettre en place les namespaces nécessaires au fonctionnement en mode rootless.

L’unité est également définie avec la paramètre Delegate=yes. Cette option permet à Docker de gérer les ressources et cgroups de ses propres processus.

Et finalement, pour permettre à notre service de s’exécuter, même lorsque utilisateurice est déconnecté, le script de configuration va activer le mode lingering : sudo loginctl enable-linger alice

Cette config permet à systemd --user de fonctionner indépendamment d’une session interactive.

Client Docker

Enfin, le script crée un contexte Docker appelé rootless qui pointe vers la socket de l’utilisatueirce : unix://$XDG_RUNTIME_DIR/docker.sock, et l’active.

Ainsi, la commande docker communique par défaut avec le daemon de l’utilisateurice, et ce sans sudo ou sans qu’iel appartienne à un groupe spécifique (exemple: docker).