J'ai un utilisateur restricted
, et l'utilisateur ne peut accéder qu'à ses propres fichiers. Il s'agit d'un utilisateur non root et ne peut donc pas utiliser Docker (faire docker run foo
=> docker: Got permission denied while trying to connect to the Docker daemon socket...
).
Je souhaite autoriser cet utilisateur à créer ses propres images Docker uniquement à partir de son espace fichier et à ne pouvoir supprimer/rmi que ses propres images. De plus, ils ne pourront exécuter que leurs propres images et arrêter leurs propres conteneurs d'images.
D'après les questions que j'ai lues, le seul moyen pour que cela se produise est d'ajouter un utilisateur root à un groupe dans lequel l'utilisateur non root est, ce qui présente un énorme risque de vulnérabilité.
Par Documentation Docker officielle ,
L'exécution de conteneurs (et d'applications) avec Docker implique l'exécution du démon Docker. Ce démon nécessite des privilèges root sauf si vous vous inscrivez en mode Rootless (expérimental) ...
Les instructions pour ce mode peuvent être trouvées sur GitHub:
https://github.com/docker/engine/blob/v19.03.0-rc3/docs/rootless.md
Je souhaite autoriser cet utilisateur à créer ses propres images Docker uniquement à partir de son espace fichier et à ne pouvoir supprimer/rmi que ses propres images.
Si vous cherchez uniquement à construire des conteneurs, vous pouvez essayer d'utiliser img
,
Dockerfile autonome, sans démon, Dockerfile sans privilège et générateur d'image de conteneur compatible OCI.
Cet outil peut être utilisé pour créer des conteneurs et s'exécute sans autorisations par défaut .
De plus, ils ne pourront exécuter que leurs propres images et arrêter leurs propres conteneurs d'images.
Malheureusement, comme indiqué précédemment, img
ne peut pas exécuter de conteneurs, il suffit de les construire.
Voir aussi: https://rootlesscontaine.rs
De l'excellente réponse trouvée ici:
Bonne nouvelle: le nouveau docker (version 19.03 (actuellement expérimental)) pourra fonctionner sans root, annulant les problèmes qui peuvent survenir avec un utilisateur root. Plus besoin de jouer avec des autorisations élevées, root et tout ce qui pourrait ouvrir votre machine lorsque vous ne le souhaitez pas.
Vidéo à ce sujet de [DockerCon 2019] Durcissement du démon Docker avec le mode Rootless
Quelques mises en garde pour le mode Docker sans racine
Les ingénieurs de Docker affirment que le mode sans racine ne peut pas être considéré comme un remplacement de la suite complète des fonctionnalités du moteur Docker. Certaines limitations du mode sans racine incluent:
- les contrôles de ressources cgroups, les profils de sécurité de l'apparmeur, les points de contrôle/restauration, les réseaux de superposition, etc. ne fonctionnent pas en mode sans racine.
- L'exposition des ports à partir des conteneurs nécessite actuellement un processus d'aide manuel de 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 versions nocturnes qui peuvent ne pas être aussi stables que vous en avez l'habitude.
Depuis Docker 19.3, cela est obsolète (et plus dangereux que nécessaire):
Le manuel du docker 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 à un socket Unix au lieu d'un port TCP. Par défaut, ce socket Unix appartient au root utilisateur, 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 lisible/inscriptible 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 dans le groupe docker, vous n'avez pas besoin d'ajouter Sudo à toutes les commandes 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 root; voir Docker Daemon Attack Surface details et ce blog sur Pourquoi nous ne permettons pas aux utilisateurs non root d'exécuter Docker dans CentOS, Fedora ou RHEL (merci michael-n).
Dans la récente version de mode rootless expérimental sur GitHub , les ingénieurs mentionnent que le mode rootless 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 du démon 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 s'exécute toujours comme l'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é du socket Unix lisible/inscriptible par le groupe docker.
Ajoutez le groupe de dockers s'il n'existe pas déjà:
Sudo groupadd docker
Ajoutez l'utilisateur connecté "$ USER" au groupe de dockers. 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 un newgrp docker
ou déconnectez-vous pour activer les modifications des groupes.
Vous pouvez utiliser
docker run hello-world
pour vérifier si vous pouvez exécuter docker sans Sudo.
docker run foo => docker: Got permission denied while trying to connect to the Docker daemon socket...
On dirait que lorsque vous créez le socket sans l'autorisation suffisante pour le groupe docker
. L'erreur recommence encore et encore et réexécute la commande à chaque fois. Ce trou de sécurité ouvert vraiment dur de chmod
après chaque redémarrage.
Le problème provient de SystemD car le socket sera créé uniquement avec root:root
. Vous pouvez le vérifier avec ceci:
ls -l /lib/systemd/system/docker.socket
Si c'est bon, vous devriez voir ceci root:docker
ne pas root:root
.
La solution de ce problème . Vous pouvez essayer de faire ce travail:
$Sudo chgrp docker /lib/systemd/system/docker.socket
$Sudo chmod g+w /lib/systemd/system/docker.socket
$Sudo chmod 666 /var/run/docker.sock
Cela devrait fonctionner si vous êtes dans un environnement graphique et probablement le seul utilisateur de votre ordinateur. Ce cas a besoin d'un redémarrage.
J'espère que cela t'aides.
Gérer Docker en tant qu'utilisateur non root 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.