Cómo configurar los conjuntos de límites de capacidades (capability bounding sets) en Docker

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Docker se ha convertido en una opción popular para contenerizar aplicaciones, pero gestionar la seguridad y el control de estos contenedores es crucial. Este tutorial lo guiará a través del proceso de comprender y configurar los conjuntos de límites de capacidades (capability bounding sets) en Docker, lo que le permitirá mejorar la seguridad y el control de sus aplicaciones basadas en Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") docker/SystemManagementGroup -.-> docker/login("Log into Docker Registry") docker/SystemManagementGroup -.-> docker/logout("Log out from Docker Registry") docker/SystemManagementGroup -.-> docker/system("Manage Docker") subgraph Lab Skills docker/info -.-> lab-411602{{"Cómo configurar los conjuntos de límites de capacidades (capability bounding sets) en Docker"}} docker/version -.-> lab-411602{{"Cómo configurar los conjuntos de límites de capacidades (capability bounding sets) en Docker"}} docker/login -.-> lab-411602{{"Cómo configurar los conjuntos de límites de capacidades (capability bounding sets) en Docker"}} docker/logout -.-> lab-411602{{"Cómo configurar los conjuntos de límites de capacidades (capability bounding sets) en Docker"}} docker/system -.-> lab-411602{{"Cómo configurar los conjuntos de límites de capacidades (capability bounding sets) en Docker"}} end

Comprender las capacidades (capabilities) de Docker

Las capacidades (capabilities) de Docker son una característica de seguridad que le permite otorgar o restringir privilegios específicos a un contenedor. Las capacidades son una característica del kernel de Linux que brindan un control más detallado sobre los permisos otorgados a un proceso, en lugar del enfoque tradicional de todo o nada del usuario root.

En el kernel de Linux, hay más de 30 capacidades diferentes que se pueden otorgar o restringir. Algunos ejemplos incluyen:

  • CAP_NET_ADMIN: Permite al contenedor realizar operaciones relacionadas con la red, como configurar interfaces de red, configurar firewalls y gestionar tablas de enrutamiento.
  • CAP_SYS_ADMIN: Otorga una amplia gama de privilegios de administración del sistema, incluyendo montar sistemas de archivos, cargar módulos del kernel y realizar otras operaciones de bajo nivel del sistema.
  • CAP_CHOWN: Permite al contenedor cambiar la propiedad de archivos y directorios.

Por defecto, los contenedores de Docker se les otorga un conjunto limitado de capacidades, lo que ayuda a reducir la superficie de ataque y los posibles riesgos de seguridad. Sin embargo, en algunos casos, es posible que deba otorgar capacidades adicionales a su contenedor para habilitar ciertas funcionalidades.

graph TD A[Linux Kernel] --> B[Capabilities] B --> C[CAP_NET_ADMIN] B --> D[CAP_SYS_ADMIN] B --> E[CAP_CHOWN] B --> F[Other Capabilities] C --> G[Network Management] D --> H[System Administration] E --> I[Ownership Changes]

Tabla 1: Capacidades comunes de Docker

Capacidad (Capability) Descripción
CAP_NET_ADMIN Permite al contenedor realizar operaciones relacionadas con la red.
CAP_SYS_ADMIN Otorga una amplia gama de privilegios de administración del sistema.
CAP_CHOWN Permite al contenedor cambiar la propiedad de archivos y directorios.

Comprender las capacidades (capabilities) de Docker es crucial para proteger sus contenedores y garantizar que tengan el nivel adecuado de acceso a los recursos del sistema.

Configurar los conjuntos de límites de capacidades (capability bounding sets)

Para configurar el conjunto de límites de capacidades (capability bounding set) de un contenedor de Docker, puede utilizar las opciones --cap-add y --cap-drop al iniciar el contenedor.

La opción --cap-add le permite agregar una o más capacidades (capabilities) al conjunto de límites del contenedor, mientras que la opción --cap-drop le permite eliminar una o más capacidades del conjunto de límites del contenedor.

A continuación, se muestra un ejemplo de cómo iniciar un contenedor con la capacidad CAP_NET_ADMIN agregada y la capacidad CAP_SYS_ADMIN eliminada:

docker run --cap-add=NET_ADMIN --cap-drop=SYS_ADMIN -it ubuntu:22.04 /bin/bash

En este ejemplo, el contenedor tendrá la capacidad CAP_NET_ADMIN, que le permite realizar operaciones relacionadas con la red, pero se eliminará la capacidad CAP_SYS_ADMIN, que otorga una amplia gama de privilegios de administración del sistema.

También puede ver el conjunto de límites de capacidades actual de un contenedor en ejecución utilizando el comando docker inspect:

docker inspect <container_id> | grep "CapBnd"

Esto mostrará el conjunto de límites de capacidades actual para el contenedor especificado.

graph TD A[Docker Container] --> B[Capability Bounding Set] B --> C[--cap-add=NET_ADMIN] B --> D[--cap-drop=SYS_ADMIN] C --> E[CAP_NET_ADMIN] D --> F[CAP_SYS_ADMIN]

Tabla 1: Opciones comunes de conjuntos de límites de capacidades (capability bounding sets) de Docker

Opción Descripción
--cap-add=<capability> Agrega la capacidad especificada al conjunto de límites del contenedor.
--cap-drop=<capability> Elimina la capacidad especificada del conjunto de límites del contenedor.

Configurar el conjunto de límites de capacidades para sus contenedores de Docker es un paso importante para proteger sus aplicaciones y reducir la superficie de ataque.

Aplicaciones prácticas de los límites de capacidades (capability bounding)

Los conjuntos de límites de capacidades (capability bounding sets) en Docker se pueden utilizar en una variedad de escenarios prácticos para mejorar la seguridad y el aislamiento de sus contenedores.

Ejecutar aplicaciones no confiables

Al ejecutar aplicaciones no confiables o potencialmente maliciosas en un contenedor, puede utilizar los conjuntos de límites de capacidades para limitar los privilegios otorgados al contenedor. Por ejemplo, puede eliminar la capacidad CAP_SYS_ADMIN para evitar que el contenedor realice tareas sensibles de administración del sistema.

docker run --cap-drop=SYS_ADMIN -it untrusted-app /bin/bash

Proteger servicios sensibles

Si su contenedor está ejecutando un servicio sensible, como una base de datos o un servidor web, puede utilizar los conjuntos de límites de capacidades para restringir el acceso del contenedor solo a los recursos del sistema necesarios. Esto ayuda a reducir la superficie de ataque y minimizar el impacto potencial de una violación de seguridad.

docker run --cap-drop=CHOWN --cap-drop=SETUID --cap-drop=SETGID -it secure-service /bin/bash

Cumplimiento de requisitos normativos

En algunas industrias, como la salud o las finanzas, puede haber requisitos específicos de cumplimiento normativo en cuanto a los privilegios otorgados a las aplicaciones. Los conjuntos de límites de capacidades se pueden utilizar para garantizar que sus contenedores de Docker cumplan con estos requisitos y se adhieran a los estándares de seguridad necesarios.

graph TD A[Docker Container] --> B[Capability Bounding Set] B --> C[Untrusted Applications] B --> D[Sensitive Services] B --> E[Compliance Requirements] C --> F[Limit Privileges] D --> G[Restrict Access] E --> H[Meet Security Standards]

Tabla 1: Ejemplos de configuraciones de conjuntos de límites de capacidades

Caso de uso Capacidades a eliminar
Aplicaciones no confiables CAP_SYS_ADMIN, CAP_SETUID, CAP_SETGID
Servicios sensibles CAP_CHOWN, CAP_SETUID, CAP_SETGID
Requisitos de cumplimiento normativo CAP_SYS_ADMIN, CAP_MKNOD, CAP_AUDIT_WRITE

Al comprender y configurar los conjuntos de límites de capacidades para sus contenedores de Docker, puede mejorar la seguridad y el aislamiento de sus aplicaciones, cumplir con los requisitos de cumplimiento normativo y reducir la superficie de ataque potencial.

Resumen

Al final de este tutorial, tendrá una comprensión integral de las capacidades (capabilities) de Docker y cómo configurar los conjuntos de límites de capacidades (capability bounding sets). Aprenderá aplicaciones prácticas para gestionar estas capacidades, lo que le permitirá mejorar la seguridad y el control de sus aplicaciones basadas en Docker.