Dans les pages de documentation de Docker, tous les exemples de commandes sont affichés sans Sudo
, comme celui-ci:
docker ps
Sur Ubuntu, le fichier binaire s'appelle docker.io
. Cela aussi ne fonctionne pas sans Sudo:
Sudo docker.io ps
Comment puis-je configurer Docker pour qu'il ne soit pas nécessaire de préfixer chaque commande Docker avec sudo?
Le manuel de docker a ceci à dire:
Donner un accès non root
Le démon docker est toujours exécuté en tant qu'utilisateur root et, depuis la version 0.5.2 de Docker, il se lie à un socket Unix au lieu d'un port TCP. Par défaut, ce socket Unix appartient à l'utilisateur root. Vous pouvez donc y accéder par défaut 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é de la socket Unix en lecture/écriture par le groupe docker au démarrage du démon. . Le démon docker doit toujours être exécuté en tant qu'utilisateur root, mais si vous exécutez le client docker en tant qu'utilisateur du groupe de menus, vous n'avez pas besoin d'ajouter Sudo à toutes les commandes du client. À partir de la version 0.9.0, vous pouvez spécifier qu'un groupe autre que le menu fixe doit posséder le socket Unix avec l'option -G.
Avertissement: le groupe de menus fixe (ou le groupe spécifié avec -G) correspond à la racine; voir Détails de la surface d'attaque du démon Docker et cet article de blog sur Pourquoi ne permettons-nous pas aux utilisateurs non root d'exécuter Docker dans CentOS, Fedora ou RHEL (merci michael-n).
Important à lire: étapes post-installation pour Linux (il contient également un lien vers détails de la surface d'attaque du démon de Docker ).
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'à l'aide de Sudo. Le démon docker est toujours exécuté 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-lui des utilisateurs. Lorsque le démon docker démarre, il rend la propriété de la socket Unix accessible en lecture/écriture au groupe de docker.
Ajoutez le groupe de dockers s'il n'existe pas déjà:
Sudo groupadd docker
Ajoutez l'utilisateur connecté "$ USER" au groupe de menus. Modifiez le nom d'utilisateur pour qu'il corresponde à votre utilisateur préféré si vous ne souhaitez pas utiliser votre utilisateur actuel:
Sudo gpasswd -a $USER docker
Effectuez un newgrp docker
ou déconnectez-vous pour activer les modifications apportées aux groupes.
Vous pouvez utiliser
docker run hello-world
pour vérifier si vous pouvez exécuter docker sans Sudo.
Pour exécuter la commande docker sans Sudo
, vous devez ajouter votre utilisateur (qui dispose des privilèges root) au groupe docker. Pour cette commande, exécutez la commande suivante:
Sudo usermod -aG docker $USER
Maintenant, demandez à l'utilisateur de se déconnecter, puis reconnectez-vous. Cette solution est bien expliquée ici avec le processus d’installation approprié.
Le mécanisme par lequel l’ajout d’un utilisateur au groupe docker
donne l’autorisation d’exécuter docker consiste à accéder au socket de docker à /var/run/docker.sock
. Si le système de fichiers contenant /var/run
a été monté avec les ACL activées, vous pouvez également le faire via des ACL.
Sudo setfacl -m user:username:rw /var/run/docker.sock
Je ne fais que l'inclure par souci de complétude.
En général, je recommande d'éviter les listes de contrôle d'accès chaque fois qu'une bonne alternative basée sur des groupes est disponible: il est préférable que les privilèges d'un système puissent être compris en ne regardant que les appartenances à un groupe. Le fait d'analyser le système de fichiers à la recherche d'entrées dans la liste de contrôle d'accès afin de comprendre les privilèges du système est une charge supplémentaire pour les audits de sécurité.
Avertissement 1: Ceci a la même équivalence root
que l’ajout de username
au groupe docker
name__. Vous pouvez toujours démarrer un conteneur de manière à avoir root
accès au système de fichiers de l'hôte.
Avertissement 2: Les listes de contrôle d'accès sont beaucoup plus difficiles pour les audits de sécurité que la sécurité par groupe. Évitez probablement les ACL si possible lorsque vous pouvez utiliser des groupes, au moins dans des environnements pertinents pour l'audit.