Sobes.tech
Middle

¿Por qué se considera una mala práctica ejecutar un contenedor como usuario root en Kubernetes?

sobes.tech AI

Respuesta de la IA

El inicio de contenedores como usuario root en Kubernetes presenta riesgos de seguridad elevados:

  • Nivel alto de privilegios: En caso de compromiso del contenedor, el atacante obtiene privilegios de root dentro del contenedor. Esto puede permitir escalar privilegios en el sistema host o acceder a otros recursos del clúster.
  • Acceso al sistema de archivos del host: Sin restricciones adecuadas, el proceso root dentro del contenedor puede acceder al sistema de archivos del nodo en el que se ejecuta, aumentando la probabilidad de cambios no autorizados o filtraciones de datos.
  • Vulnerabilidades del núcleo: El usuario root en el contenedor puede aprovechar vulnerabilidades del núcleo Linux para salir del contenedor y tomar control del host.
  • Dificultad en la auditoría: Rastrear las acciones del usuario root es más difícil, lo que complica la detección e investigación de incidentes de seguridad.
  • Herencia de privilegios: Si otros procesos se inician desde el usuario root, también tendrán un alto nivel de privilegios.

Se recomienda seguir el principio de privilegios mínimos, ejecutando los contenedores con un usuario no privilegiado. Esto se puede configurar en el manifiesto del pod usando securityContext:

securityContext:
  runAsUser: 1000  # Uso de un usuario no privilegiado con ID 1000
  runAsGroup: 3000 # Pertenencia a un grupo con ID 3000 (opcional)
  allowPrivilegeEscalation: false # Prohibir la escalada de privilegios
readOnlyRootFilesystem: true # Prohibir escritura en el sistema de archivos raíz del contenedor

Además, se puede usar:

  • Políticas de seguridad de pod / Pod Security Admission: Para aplicar políticas de seguridad a nivel de pod.
  • AppArmor / SELinux: Para una mayor aislamiento de los contenedores.
  • Uso de imágenes de contenedor con un usuario no privilegiado explícitamente especificado: En el Dockerfile usando la instrucción USER.
# Ejemplo de Dockerfile especificando un usuario
FROM ubuntu:latest
# Crear un usuario no privilegiado
RUN useradd -ms /bin/bash myuser
# Cambiar a ese usuario
USER myuser
CMD ["/bin/bash"]