Seguridad en Docker: Creación de Usuarios con Privilegios Limitados

Clase 14 de 34Curso de Docker Avanzado

Resumen

¿Cómo asegurar tus imágenes de Docker creando usuarios no-root?

Cuando trabajamos con Docker, una de las revelaciones más impactantes para los desarrolladores es descubrir que las imágenes, por defecto, se crean bajo el usuario root. Esto puede representar un riesgo significativo si no se controla adecuadamente, ya que el acceso root otorga privilegios completos sobre los recursos. Este nivel de acceso puede no ser ideal si la seguridad es una de tus prioridades. La buena noticia es que hay una solución sencilla: crear un usuario con menos privilegios dentro de la imagen. Vamos a explorar cómo hacerlo para mejorar la seguridad de tus imágenes Docker.

¿Por qué es importante crear un usuario dentro de la imagen?

Crear usuarios específicos dentro de tus imágenes es una medida preventiva eficaz. Al seguir esta práctica, puedes:

  • Limitar el acceso: Los usuarios no-root tienen acceso restringido dentro de la imagen, lo que reduce la posibilidad de modificaciones no autorizadas o ejecución de comandos peligrosos.

  • Seguridad mejorada: Disminuye la superficie de ataque, ya que muchos exploits buscan explorar sectores con acceso root.

  • Facilidad de manejo: Al tener un grupo y usuario con el mismo nombre, es más fácil seguir sus actividades y efectivamente reducir errores administrativos.

¿Cómo creamos un Dockerfile seguro?

Para solidificar la seguridad en tus imágenes Docker, es esencial modificar tu Dockerfile adecuadamente.

  1. Usar una imagen base: Usualmente, empezamos con una imagen base como Nginx. Puedes hacer esto con el siguiente comando:

    FROM nginx

  2. Crear grupos y usuarios: Define un grupo y un usuario con el mismo nombre por conveniencia y claridad.

    RUN groupadd amin &&
    useradd -g amin amin

  3. Asignar permisos de acceso limitados: Especifica las carpetas a las que el nuevo usuario puede acceder.

    RUN chown -R amin:amin /var/www/html

  4. Cambiar al usuario no-root: Antes de ejecutar otras tareas, asegúrate de cambiar al nuevo usuario.

    USER amin

  5. Ajustar comandos según privilegios: Asegúrate de que cualquier comando que necesite derechos de root se ejecute antes de cambiar al usuario.

    Commands needing root access

    RUN apt-get update && apt-get install -y some-package

Luego puedes crear el usuario y cambiar a él como se mostró anteriormente.

¿Qué ocurre si un comando requiere privilegios de root?

Si un comando necesita ejecutarse con permisos elevados, debes asegurarte de que esos comandos se ejecuten antes de cambiar al usuario limitado. Por ejemplo, cuando uses comandos como apt-get update, hazlo al principio de tu Dockerfile mientras aún tienes acceso root.

¿Qué ventajas trae crear un usuario específico?

Implementando esta metodología, asegurarás que:

  • La ejecución de la imagen esté controlada: Sólo las acciones permitidas bajo el usuario limitado pueden ser realizadas.
  • Se reduce el riesgo de malware: Evita que algún acceso futuro tenga la capacidad de insertar código malicioso.

Al seguir estos pasos meticulosos y cuidadosos al crear tus Dockerfiles, estás fortaleciendo la seguridad de tus imágenes y protegiendo activamente tu entorno de desarrollo y producción. Implementa estas prácticas esenciales y continúa explorando maneras de optimizar tus habilidades y conocimientos en Docker para avanzar profesionalmente y mantener segura tu infraestructura.