Question Comment utiliser docker sans sudo?


Sur les pages de documentation de Docker, tous les exemples de commandes sont affichés sans sudo, comme celui-ci:

docker ps

Sur Ubuntu, le binaire s'appelle docker.io. Cela ne fonctionne pas non plus sans sudo:

sudo docker.io ps

Comment puis-je configurer Docker pour ne pas avoir à préfixer chaque commande Docker avec sudo?


636
2018-06-06 08:17


origine


N'oubliez pas d'activer ufw;) - Rinzwind
Sur Ubuntu 14.04 il y a également binaire 'docker'. - anatoly techtonik
@anatolytechtonik J'ai aussi utilisé 'docker' au lieu de 'docker.io' dans Ubuntu 14.04 LTS - Nabin
L'installation recommandée est ne pas  le docker dans les dépôts ubuntu par défaut; au lieu de cela, les instructions ici ( docs.docker.com/engine/installation/linux/ubuntulinux ), recommande d'utiliser le repock docker. Supprimez tous les éléments d'ancrage existants et vérifiez que vous obtenez celui de la bonne source: apt-cache policy docker-engine (l'URL d'apt devrait être de dockerproject.org) - michael
Que diriez-vous d'un alias :? De cette façon, vous utilisez toujours sudo, avec une protection par mot de passe. alias docker = "sudo docker" - Andrej Panjkov


Réponses:


le docker manuel a ceci à dire à 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 à une socket Unix au lieu d'un port TCP. Par défaut, le socket Unix appartient à l'utilisateur root et, par défaut, vous pouvez y accéder avec sudo.

A 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 par le groupe docker au démarrage du démon. . 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 client. A partir de 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 Docker Daemon Attack Surface Détails et ce blog sur Pourquoi ne pas laisser les utilisateurs non root exécuter Docker dans CentOS, Fedora ou RHEL  (merci michael-n).


Important à lire: étapes post-installation pour Linux (il est également lié à Docker Daemon Attack Surface Détails).

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, le socket Unix appartient à l'utilisateur root et les autres utilisateurs ne peuvent y accéder qu'à l'aide de 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, le groupe docker devient propriétaire du socket Unix en lecture / écriture.


  • Ajoutez le groupe de menus fixes s'il n'existe pas déjà:

    sudo groupadd docker
    
  • Ajoutez l'utilisateur connecté "$ USER" au groupe de menus fixes. 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
    
  • Soit faire 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.


952
2018-06-06 08:24



N'est-ce pas l'architecture la plus précaire pour la production? J'ai dû louper quelque chose - matt
Oui, mais chaque processus privilégié ouvre des possibilités d’exploitation. Docker est-il en train de connecter ce système au système d'exploitation pour imposer ce niveau de privilèges? - matt
newgrp docker n'a pas fonctionné pour moi, j'ai dû me déconnecter. - lolmaus - Andrey Mikhaylov
Il convient de souligner que cela donne à cet utilisateur accès root sans restriction, sans mot de passe. Voir les détails de la vulnérabilité ici - Chris Foster
vous n'avez pas besoin de redémarrer le démon docker pour que cette modification ait lieu! il suffit que l'utilisateur que vous venez d'ajouter se déconnecte puis se reconnecte - Tommy


Pour exécuter la commande docker sans sudo, vous devez ajouter votre utilisateur (qui a les privilèges root) au groupe de menus fixes. Pour cette exécution, 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é.


152
2018-02-27 19:57



après avoir ajouté l'utilisateur au groupe, exécutez cette commande: sg nom_groupe -c "bash" - madjardi
n'a pas vraiment besoin de redémarrer le système d'exploitation. Déconnectez-vous et reconnectez-vous. - binW
il n'est pas nécessaire de redémarrer le système d'exploitation pour que cette modification ait lieu! Cela bombardera tous les conteneurs en cours d'exécution! Il suffit que l'utilisateur que vous venez d'ajouter se déconnecte alors. - Tommy
En quoi cette commande est-elle différente de "sudo gpasswd -a $ {USER} docker" dans une autre réponse? Si du tout ... - Ashley Aitken
Pourriez-vous s'il vous plaît ajouter l'avertissement donné par les documents: "Le groupe de dockers [...] est équivalent à la racine", de sorte que les gens ont la possibilité d'y réfléchir - Murmel


Le mécanisme par lequel ajouter un utilisateur au groupe docker accorde l'autorisation d'exécuter docker est d'avoir accès à la socket de docker à /var/run/docker.sock. Si le système de fichiers qui contient /var/run a été monté avec les listes de contrôle d'accès activées, cela peut également être réalisé via les listes de contrôle d'accès.

sudo setfacl -m user:username:rw /var/run/docker.sock

Je n'inclus que cela pour la 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 examinant uniquement l'appartenance à un groupe. Analyser le système de fichiers pour rechercher les entrées ACL afin de comprendre les privilèges du système représente une charge supplémentaire pour les audits de sécurité.


23
2017-12-01 16:08



Cela a fonctionné le 16.04 - edib
C'est ce dont j'avais besoin, d'autres réponses, obligent l'utilisateur à avoir la permission root. Merci beaucoup! - Mrinal Saurabh
Beaucoup mieux façon imo. Le menu fixe du groupe est équivalent à la racine et cela est toujours un signe de danger. Et je ne vois aucun inconvénient à prendre possession de ce fichier. - Xerus
Pourriez-vous décrire les commandes à exécuter pour "avoir accès à la socket de docker à /var/run/docker.sock"? - Yuval Atzmon
@Xerus si je comprends bien, quiconque peut écrire sur cette socket peut aussi obtenir des privilèges équivalents à la racine. Ainsi, donner à quelqu'un l'accès à ce socket via ACL a le même effet de sécurité que l'ajout de cette personne au groupe docker. - Paŭlo Ebermann