¿Cómo puedo usar Docker sin sudo?

¿Cómo puedo usar Docker sin sudo?

En las páginas de documentación de Docker, todos los comandos de ejemplo se muestran sin sudo, como este:

docker ps

En Ubuntu, el binario se llama docker.io. Tampoco funciona sin sudo:

sudo docker.io ps

¿Cómo puedo configurar Docker para no tener que anteponer cada comando de Docker sudo?

Respuesta1

Buenas noticias: la nueva versión 19.03 de Docker (actualmente experimental) podrá ejecutarse sin raíz, eliminando los problemas que pueden ocurrir con un usuario root. No más problemas con permisos elevados, root y cualquier cosa que pueda abrir su máquina cuando no lo desee.

Vídeo sobre esto de[DockerCon 2019] Fortalecimiento del demonio Docker con modo Rootless

Algunas advertencias sobre el modo Docker sin raíz

Los ingenieros de Docker dicen que el modo sin raíz no puede considerarse un reemplazo del conjunto completo de funciones del motor Docker. Algunas limitaciones del 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 el modo sin raíz.
  • Actualmente, exponer puertos desde contenedores requiere un proceso manual de ayuda de socat.
  • Sólo las distribuciones basadas en Ubuntu admiten sistemas de archivos superpuestos en modo sin raíz.
  • Actualmente, el modo Rootless solo se proporciona para compilaciones nocturnas que pueden no ser tan estables como está acostumbrado.

A partir de Docker 19.3, esto es obsoleto (y más peligroso de lo necesario):

Elmanual de acopladortiene esto que decir al respecto:

Dar acceso no root

El demonio acoplable siempre se ejecuta como usuario root y, desde la versión 0.5.2 de Docker, el demonio acoplable se vincula a un socket Unix en lugar de a un puerto TCP. De forma predeterminada, ese socket Unix es propiedad del usuario root y, por lo tanto, puede acceder a él con sudo.

A partir de la versión 0.5.3, si usted (o su instalador de 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/escribible por el grupo Docker cuando se inicie el demonio. . El demonio de Docker siempre debe ejecutarse como usuario root, pero si ejecuta el cliente de Docker como usuario en el grupo de Docker, 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 debe poseer el socket Unix con la opción -G.

Advertencia: el grupo de la ventana acoplable (o el grupo especificado con -G) es equivalente a la raíz; verDetalles de la superficie de ataque de Docker Daemony esta entrada de blog enPor qué no permitimos que usuarios no root ejecuten Docker en CentOS, Fedora o RHEL(gracias michael-n).

En la reciente publicación delmodo experimental sin raíz en GitHub, los ingenieros mencionan que el modo sin raíz permite ejecutar dockerd como un usuario sin privilegios, usando 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 Rootless es experimental, los usuarios siempre deben ejecutar dockerd-rootless.sh con –experimental.


Importante leer:pasos posteriores a la instalación para Linux(también enlaza conDetalles de la superficie de ataque de Docker Daemon).

Administrar Docker como usuario no root

El demonio acoplable se vincula a un socket Unix en lugar de a un puerto TCP. De forma predeterminada, ese socket Unix es propiedad del usuario root y otros usuarios solo pueden acceder a él mediante sudo. El demonio acoplable siempre se ejecuta como usuario root.

Si no desea utilizar sudo cuando utilice el comando docker, cree un grupo Unix llamado docker y agréguele usuarios. Cuando se inicia el demonio de la ventana acoplable, el grupo de la ventana acoplable permite que el grupo de la ventana acoplable pueda leer/escribir la propiedad del socket Unix.


  • Agregue el dockergrupo si aún no existe:

     sudo groupadd docker
    
  • Agregue el usuario conectado "$USER" al dockergrupo. 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 newgrp dockero cierre sesión/inicie sesión para activar los cambios en los grupos.

  • Puedes usar

     docker run hello-world
    

    para comprobar si puede ejecutar Docker sin sudo.

Respuesta2

Para ejecutar el comando Docker sin sudo, debe agregar su usuario (que tiene privilegios de root) al grupo Docker. Para esto ejecute el siguiente comando:

 sudo usermod -aG docker $USER

Ahora, haga que el usuario cierre sesión y luego vuelva a iniciar sesión. Esta solución está bien explicada.aquícon el proceso de instalación adecuado.

Respuesta3

El mecanismo mediante el cual agregar un usuario al grupo dockerotorga permiso para ejecutar Docker es obtener acceso al socket de Docker en /var/run/docker.sock. Si el sistema de archivos que contiene /var/runse ha montado con las ACL habilitadas, esto también se puede lograr a través de las ACL.

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

Sólo incluyo esto para que esté completo.

En general, recomiendo evitar las ACL siempre que esté disponible una buena alternativa basada en grupos: es mejor si los privilegios de un sistema se pueden entender mirando únicamente las membresías de grupos. Tener que escanear el sistema de archivos en busca de entradas ACL para comprender los privilegios del sistema es una carga adicional para las auditorías de seguridad.

Advertencia 1: Esto tiene la misma rootequivalencia que agregar $USERal dockergrupo. Aún puede iniciar un contenedor de manera que tenga rootacceso al sistema de archivos del host.

Advertencia 2: Las ACL son significativamente más difíciles para las auditorías de seguridad que la seguridad basada en grupos. Probablemente evite las ACL si es posible cuando pueda usar grupos en su lugar, al menos en entornos relevantes para auditoría.

Respuesta4

Los contenedores Docker deben ser ejecutados por un superusuario. Puede agregarse al dockergrupo (por ejemplo, ejecutando sudo usermod -aG docker $USER), pero esto facilita que cualquier persona con acceso a la $USERcuenta obtenga acceso raíz a la máquina (por ejemplo, montando un volumen raíz en un contenedor privilegiado).

Una forma más consciente de la seguridad de ejecutar contenedores Docker como usuario no root sería usarPodman. Desde su sitio web:

Podman es un motor de contenedor sin demonio para desarrollar, administrar y ejecutar contenedores OCI en su sistema Linux. Los contenedores se pueden ejecutar como root o enmodo desarraigado. Simplemente pon: alias docker=podman.

Otra alternativa esSingularidad, que se implementa más comúnmente en entornos HPC.

información relacionada