Buenas noticias: el nuevo docker (versión 19.03 (actualmente experimental)) podrá ejecutarse sin root negando los problemas que pueden ocurrir al usar un usuario root. No más juegos con permisos elevados, root y cualquier cosa que pueda abrir su máquina cuando no lo desee.
Video sobre esto del [DockerCon 2019] Hardening Docker daemon con modo Rootless
Algunas advertencias para el modo Docker sin raíz
Los ingenieros de Docker dicen que el modo sin raíz no puede considerarse un reemplazo para el conjunto completo de características del motor Docker. Algunas limitaciones al modo sin raíz incluyen:
- Los controles de recursos de cgroups, los perfiles de seguridad de apparmor, los puntos de control / restauración, las redes superpuestas, etc., no funcionan en modo sin raíz.
- La exposición de los puertos de los contenedores actualmente requiere un proceso auxiliar de socat manual.
- Solo las distribuciones basadas en Ubuntu admiten sistemas de archivos superpuestos en modo sin raíz.
- Actualmente, el modo sin raíz solo se proporciona para compilaciones nocturnas que pueden no ser tan estables como solía hacerlo.
A partir de Docker 19.3 esto es obsoleto (y más peligroso de lo necesario):
El manual del acoplador tiene esto que decir al respecto:
Dar acceso no root
El Docker Daemon siempre se ejecuta como usuario root, y desde Docker versión 0.5.2, el Docker Daemon se une a un socket Unix en lugar de a un puerto TCP. De forma predeterminada, el socket de Unix es propiedad del usuario root, por lo que, de manera predeterminada, puede acceder a él con sudo.
A partir de la versión 0.5.3, si usted (o su instalador Docker) crea un grupo Unix llamado docker y le agrega usuarios, entonces el demonio docker hará que la propiedad del socket Unix sea leída / editable por el grupo docker cuando se inicie el demonio . El Docker Daemon siempre debe ejecutarse como usuario root, pero si ejecuta el cliente Docker como un usuario en el grupo Docker, entonces no necesita agregar sudo a todos los comandos del cliente. A partir de 0.9.0, puede especificar que un grupo que no sea Docker sea el propietario del socket Unix con la opción -G.
Advertencia: el grupo acoplable (o el grupo especificado con -G) es equivalente a la raíz; vea los detalles de Docker Daemon Attack Surface y esta publicación de blog sobre Por qué no permitimos que los usuarios no root ejecuten Docker en CentOS, Fedora o RHEL (gracias michael-n).
En la versión reciente del modo experimental sin raíz en GitHub , los ingenieros mencionan que el modo sin raíz permite ejecutar dockerd como un usuario sin privilegios, utilizando user_namespaces (7), mount_namespaces (7), network_namespaces (7).
Los usuarios deben ejecutar dockerd-rootless.sh en lugar de dockerd.
$ dockerd-rootless.sh --experimental
Como el modo sin raíz es experimental, los usuarios siempre deben ejecutar dockerd-rootless.sh con –experimental.
Importante leer: pasos posteriores a la instalación para Linux (también se vincula a los detalles de Docker Daemon Attack Surface ).
Administrar Docker como usuario no root
El demonio docker se une a un socket Unix en lugar de a un puerto TCP. Por defecto, el socket Unix es propiedad del usuario root y otros usuarios solo pueden acceder a él usando sudo. El docker daemon siempre se ejecuta como usuario root.
Si no desea usar sudo cuando usa el comando docker, cree un grupo Unix llamado docker y agréguele usuarios. Cuando se inicia el dacker de Docker, el grupo de Docker hace que la propiedad del socket Unix sea leída / editable.
Agregue el grupo acoplable si aún no existe:
sudo groupadd docker
Agregue el usuario conectado "$ USER" al grupo acoplable. Cambie el nombre de usuario para que coincida con su usuario preferido si no desea utilizar su usuario actual:
sudo gpasswd -a $USER docker
Realice una newgrp docker
o cierre sesión / inicie sesión para activar los cambios en los grupos.
Puedes usar
docker run hello-world
para verificar si puedes ejecutar docker sin sudo.