Skip to content
BotServBotServ
DockerRootlessSeguridadContainerPermisos

Ejecutar Docker sin privilegios root

Docker sin permisos root. Ventajas, instalación, limitaciones y GPU-Passthrough en modo Rootless.

S

schutzgeist

4 min read
Ejecutar Docker sin privilegios root

Ejecutar Docker sin privilegios de root

Qué cubre este artículo sobre Docker sin privilegios

  • Qué es Docker sin privilegios de root.
  • Por qué reduce los riesgos de seguridad.
  • Cómo instalarlo y configurarlo.
  • Limitaciones y compatibilidad.
  • Paso de GPU y errores típicos.

Introducción: Ejecutar Docker sin privilegios de root

Por defecto, el daemon de Docker se ejecuta como root. Si un contenedor logra escapar o se explota una vulnerabilidad, un atacante puede obtener acceso root en el host. Docker sin privilegios de root traslada el daemon al contexto del usuario. Un ataque exitoso entonces solo tendría los permisos del usuario no privilegiado, reduciendo significativamente la superficie de ataque.

Este artículo explica cómo funciona Docker sin privilegios, cómo configurarlo y cuándo tiene sentido usarlo.

Conceptos clave

  • Rootless: Ejecutándose sin permisos de root.
  • User Namespace: Aislamiento de identificadores de usuario en contenedores.
  • Rootlesskit: Herramienta que habilita funcionalidades sin privilegios.
  • Daemon: Proceso de fondo que gestiona contenedores.
  • OverlayFS: Sistema de archivos compatible con modo sin privilegios.
  • Cgroups: Gestión de recursos en Linux.
  • Puertos privilegiados: Puertos por debajo del 1024 que históricamente requieren root.
  • Docker Context: Configuración de entorno para Docker.

Ventajas de Docker sin privilegios

  • Un escape de contenedor no otorga permisos de root.
  • El daemon se ejecuta en el contexto del usuario.
  • Menor superficie de ataque en el host.
  • Mejor separación entre procesos de usuario y procesos del sistema.
  • Más seguro en entornos multiusuario.

Requisitos previos

  • Linux con soporte de kernel para User Namespaces.
  • newuidmap y newgidmap instalados.
  • Paquete Docker con soporte para modo sin privilegios.
  • Overlay2 o sistema de archivos compatible.

Instalación

sudo apt-get update
sudo apt-get install -y uidmap

dockerd-rootless-setuptool.sh install

Después, presta atención a la advertencia sobre la variable de entorno:

export DOCKER_HOST=unix:///run/user/$UID/docker.sock

O agrégalo a .bashrc o .zshrc.

Iniciar Docker sin privilegios

systemctl --user start docker
systemctl --user enable docker

Verifica el estado:

docker info
docker context ls

Diferencias respecto a Docker normal

  • Los comandos docker se ejecutan en el contexto del usuario.
  • Los contenedores son visibles solo para ese usuario, no a nivel del sistema.
  • Los puertos estándar por debajo de 1024 requieren configuración adicional.
  • Los servicios de systemd se ejecutan bajo --user.
  • Los volúmenes se almacenan en el directorio home del usuario.

Puertos privilegiados

Los puertos por debajo de 1024 requieren permisos root normales. Docker sin privilegios no puede vincularlos directamente. Opciones:

  • Utiliza un puerto por encima de 1024, por ejemplo 8080 en lugar de 80.
  • Configura sysctl net.ipv4.ip_unprivileged_port_start=0 para permitir que el usuario acceda a todos los puertos.
  • Coloca un proxy inverso con permisos root frente a él.

Paso de GPU en modo sin privilegios

El paso de GPU es más complicado porque los archivos de dispositivo de GPU requieren permisos especiales:

  • El usuario debe pertenecer al grupo video o render.
  • Las reglas udev deben hacer que los dispositivos sean accesibles.
  • NVIDIA Container Toolkit no funciona fácilmente con modo sin privilegios.

Para cargas de trabajo con GPU, Docker sin privilegios a menudo no es la primera opción. Docker con privilegios o soluciones alternativas suelen ser más simples.

Compose con modo sin privilegios

Compose funciona en modo sin privilegios siempre que el entorno esté configurado correctamente:

docker compose up -d

Los volúmenes se ubicarán en ~/.local/share/docker/volumes/.

Logs y depuración

journalctl --user -u docker
docker logs containername

Los permisos insuficientes o contextos incorrectos son fuentes comunes de errores.

Seguridad

  • Docker sin privilegios reduce, pero no elimina todos los riesgos.
  • El ID de usuario dentro del contenedor no debe ser root.
  • Sigue restringiendo capacidades.
  • No montes directorios sensibles en contenedores.
  • Mantén secretos fuera del directorio home.

Cuándo vale la pena usar modo sin privilegios

  • Sistemas multiusuario.
  • Alojamiento compartido.
  • Entornos de desarrollo.
  • Servidores sensibles sin dependencia de GPU.
  • Entornos donde se debe minimizar root.

Para cargas de trabajo de IA con GPU, el modo sin privilegios suele ser más difícil porque los controladores y el acceso a dispositivos son más complejos.

Errores comunes

  • DOCKER_HOST no configurado: Los comandos docker fallan.
  • uidmap faltante: La instalación se interrumpe.
  • Systemd no activado como usuario: El daemon no se inicia automáticamente.
  • Puerto 80 no disponible: El mapeo de puertos falla.
  • GPU no accesible: Faltan permisos o el toolkit.
  • Volúmenes en la ubicación incorrecta: Los datos parecen desaparecer.
  • Imágenes no visibles: Docker sin privilegios y Docker del sistema están separados.

Enlaces e información adicional

FAQ: Docker sin privilegios de root

¿Docker sin privilegios es más lento? Apenas. OverlayFS y la red pueden funcionar de manera ligeramente diferente.

¿Puedo usar Rootless con Compose? Sí, Compose funciona en modo sin privilegios.

¿Por qué mi daemon no se inicia? A menudo falta configurar DOCKER_HOST o el servicio de usuario no está activado.

¿Puedo usar puertos por debajo de 1024? Solo con configuración adicional o un proxy inverso.

¿Es Docker sin privilegios adecuado para servidores? Sí, siempre que no se requieran integraciones de hardware complejas.

Fuentes y lecturas adicionales

Resumen: Ejecutar Docker sin privilegios de root

Docker sin privilegios de root aumenta la seguridad al ejecutar el daemon en el contexto del usuario. Esto reduce significativamente el impacto de un escape de contenedor. La instalación y operación son perfectamente viables en sistemas Linux modernos, aunque traen limitaciones con puertos inferiores a 1024, integración con systemd y paso de GPU. Para entornos multiusuario, computadoras de desarrollo y configuraciones críticas de seguridad, el modo sin privilegios es una opción sensata, mientras que las cargas de trabajo de IA basadas en GPU suelen funcionar más fácilmente en modo clásico.

Volver al blog
Share:

Entradas relacionadas