Bonne nouvelle : le nouveau docker (version 19.03 (actuellement expérimentale)) sera capable de fonctionner sans root, annulant les problèmes qui peuvent survenir en utilisant un utilisateur root. Plus besoin de jouer avec les permissions élevées, l'utilisateur root et tout ce qui peut ouvrir votre machine quand vous ne le souhaitez pas.
Vidéo sur ce site [DockerCon 2019] Durcissement du démon Docker avec le mode Rootless
Quelques mises en garde concernant le mode Docker sans racine
Les ingénieurs de Docker précisent que le mode sans racine ne peut pas être considéré comme un remplacement de l'ensemble des fonctionnalités du moteur Docker. Voici quelques limitations du mode sans racine :
- Les contrôles de ressources cgroups, les profils de sécurité apparmor, les points de contrôle/restauration, les réseaux superposés, etc. ne fonctionnent pas en mode sans racine.
- L'exposition des ports à partir de conteneurs nécessite actuellement un processus manuel d'aide socat.
- Seules les distributions basées sur Ubuntu prennent en charge les systèmes de fichiers superposés en mode sans racine.
- Le mode sans racine n'est actuellement fourni que pour les nightly builds qui peuvent ne pas être aussi stables que vous en avez l'habitude.
Depuis la version 19.3 de Docker, cette méthode est obsolète (et plus dangereuse que nécessaire) :
Les manuel docker s'exprime à ce sujet :
Donner un accès non root
Le démon docker s'exécute toujours en tant qu'utilisateur root, et depuis la version 0.5.2 de Docker, le démon docker se lie à un socket Unix au lieu d'un port TCP. Par défaut, ce socket Unix appartient à l'utilisateur root, et donc, par défaut, vous pouvez y accéder avec sudo.
À partir de la version 0.5.3, si vous (ou votre installateur Docker) créez un groupe Unix appelé docker et y ajoutez des utilisateurs, le démon docker rendra la propriété du socket Unix accessible en lecture/écriture au groupe docker lorsque le démon démarrera. Le démon docker doit toujours s'exécuter en tant qu'utilisateur root, mais si vous exécutez le client docker en tant qu'utilisateur du groupe docker, vous n'avez pas besoin d'ajouter sudo à toutes les commandes du client. Depuis la version 0.9.0, vous pouvez spécifier qu'un groupe autre que docker doit posséder le socket Unix avec l'option -G.
Avertissement : Le groupe docker (ou le groupe spécifié avec -G) est équivalent à la racine ; voir Détails de la surface d'attaque de Docker Daemon et ce billet de blog sur Pourquoi nous ne laissons pas les utilisateurs non root exécuter Docker sous CentOS, Fedora ou RHEL ? (merci michael-n).
Dans la récente publication de la mode expérimental sans racine sur GitHub Les ingénieurs mentionnent que le mode sans racine permet d'exécuter dockerd en tant qu'utilisateur non privilégié, en utilisant user_namespaces(7), mount_namespaces(7), network_namespaces(7).
Les utilisateurs doivent exécuter dockerd-rootless.sh au lieu de dockerd.
$ dockerd-rootless.sh --experimental
Le mode Rootless étant expérimental, les utilisateurs doivent toujours exécuter dockerd-rootless.sh avec -experimental.
Important à lire : étapes de post-installation pour Linux (il renvoie également à Détails de la surface d'attaque de Docker Daemon ).
Gérer Docker en tant qu'utilisateur non root
Le démon docker se lie à un socket Unix au lieu d'un port TCP. Par défaut, ce socket Unix appartient à l'utilisateur root et les autres utilisateurs ne peuvent y accéder qu'en utilisant sudo. Le démon docker s'exécute toujours en tant qu'utilisateur root.
Si vous ne souhaitez pas utiliser sudo lorsque vous utilisez la commande docker, créez un groupe Unix appelé docker et ajoutez-y des utilisateurs. Lorsque le démon docker démarre, il rend la propriété de la socket Unix accessible en lecture/écriture au groupe docker.
-
Ajouter le groupe docker s'il n'existe pas encore :
sudo groupadd docker
-
Ajouter l'utilisateur connecté "$USER" au groupe docker. Changez le nom de l'utilisateur pour qu'il corresponde à votre utilisateur préféré si vous ne voulez pas utiliser votre utilisateur actuel :
sudo gpasswd -a $USER docker
-
Soit faire un newgrp docker
ou se déconnecter/se connecter pour activer les changements dans les groupes.
-
Vous pouvez utiliser
docker run hello-world
pour vérifier si vous pouvez exécuter docker sans sudo.