Docker sin root: cómo funciona y qué compromisos de seguridad introduce

Fuentes: Rootless Docker and its hidden security trade-offs

Docker sin root es una variante del motor de contenedores que ejecuta el daemon como un usuario sin privilegios, en lugar de hacerlo como root del sistema. Para sortear la necesidad de CAP_SYS_ADMIN —la capacidad que permite crear namespaces de procesos, montajes y red—, recurre a un helper llamado RootlessKit, que crea un namespace de usuario (user namespace) y configura mappings de UID y GID mediante los binarios setuid newuidmap y newgidmap. Dentro de ese namespace, el daemon aparece como root, pero en el anfitrión se mapea a un UID no privilegiado. BuildKit opera del mismo modo cuando se usa en modo rootless. El resultado práctico es que un exploit del daemon o un escape de contenedor queda confinado a los permisos del usuario que lo lanzó, sin acceso a root del host ni a los datos de otros usuarios.

Esta arquitectura, sin embargo, no está exenta de limitaciones. El kernel debe permitir la creación de user namespaces por usuarios no privilegiados (algo que Kubernetes activó por defecto en abril de 2025 y que distribuciones como Ubuntu 24.04 restringen mediante AppArmor). El modo rootless no puede usar el driver bridge estándar de Docker, por lo que recurre a herramientas en userspace como slirp4netns o pasta; tampoco puede montar overlayfs nativo en la mayoría de los kernels y suele apoyarse en fuse-overlayfs. Además, los contenedores no pueden ejecutarse con --privileged.

El artículo también advierte de un riesgo menos visible: los user namespaces exponen interfaces internas del kernel —configuración de red, iptables, montajes— a procesos sin privilegios. Muchos de esos caminos de código se escribieron asumiendo que solo root los invocaría, por lo que vulnerabilidades latentes en la pila de red o en el manejo de montajes pasan a ser explotables por cualquier usuario local del sistema.