In DockerLos contenedores se pueden ejecutar en dos modos principales: privilegiado además no privilegiadoEsta elección determina el nivel de acceso que tendrá el contenedor a los recursos del host y a las funciones del sistema. Comprender las diferencias entre estos modos es fundamental, ya que afecta tanto a la seguridad del sistema como a la funcionalidad de las aplicaciones dentro de los contenedores. El modo sin privilegios es adecuado para la mayoría de las tareas diarias, ya que proporciona aislamiento y protección al host, mientras que el modo privilegiado otorga al contenedor acceso total a los dispositivos del host, el kernel y las interfaces de red, lo cual solo es necesario en casos específicos, como las pruebas de controladores o la administración de hardware. Una elección consciente del modo de ejecución ayuda a equilibrar la funcionalidad y la seguridad.
Contenedores sin privilegios (predeterminado)
Qué es:
- Los contenedores se ejecutan en un entorno restringido.
- No tienen acceso directo al kernel del host ni a la mayoría de los recursos del sistema.
- No pueden realizar operaciones que requieran privilegios elevados (por ejemplo, modificar interfaces de red del host, administrar módulos del kernel).
Características:
- Seguridad:Mayor aislamiento del huésped.
- LimitacionesEs posible que algunas aplicaciones que requieren acceso de bajo nivel al host no funcionen.
Casos de uso reales:Servicios web, bases de datos, aplicaciones que no necesitan cambiar la configuración del sistema host.
Ejemplo de ejecución:
docker run -it ubuntu:22.04 bashEste contenedor se ejecuta en modo sin privilegios de forma predeterminada.
Contenedores privilegiados
Qué es:
- El contenedor obtiene acceso casi completo al host.
- Se permiten todas las capacidades del kernel y el acceso al dispositivo host.
El contenedor puede:
- Montar dispositivos host (/dev),
- Administrar módulos del kernel,
- Configurar interfaces de red,
- Realizar otras operaciones del sistema como root en el host.
Características:
- Funcionalidad:El acceso completo al host permite ejecutar contenedores para software del sistema, emulación o pruebas de controladores.
- SupervisiónMayor riesgo de seguridad. Si un atacante obtiene el control de dicho contenedor, en realidad obtiene el control del host.
Ejemplo de ejecución:
docker run --privileged -it ubuntu:22.04 bashCuándo usar:
- Para contenedores que necesitan acceso a dispositivos host (por ejemplo, USB, GPU).
- Para contenedores del sistema que emulan servicios de host.
- Para pruebas y depuración.
Diferencias de permisos
| Característica | No privilegiados | Privilegiado |
|---|---|---|
| Acceso al núcleo del host | No | Sí |
| Acceso a dispositivos /dev | Limitada | Pleno |
| Gestión de módulos del kernel | No | Sí |
| Modificación de las interfaces de red del host | No | Sí |
| Riesgo de seguridad | Bajo | Alto |
| Caso de uso | Aplicaciones y servicios regulares | Servicios del sistema, pruebas, acceso al dispositivo |
| Ejemplo de ejecución | docker run -it imagen bash | docker run --privileged -it imagen bash |
Recommendations
En la mayoría de los casos, es mejor ejecutar contenedores en no privilegiado modo — es seguro e ideal para aplicaciones y servicios regulares que no requieren acceso directo al host. El privilegiado El modo solo debe usarse cuando sea realmente necesario, por ejemplo, si la aplicación necesita administrar dispositivos, módulos del kernel o interfaces de red del host. Incluso en estos casos, considere la seguridad y no otorgue más permisos de los necesarios. Suele ser una buena alternativa al modo completo. --privilegiado está otorgando capacidades específicas a través de --cap-añadir o acceder a los dispositivos necesarios a través de --dispositivo, Por ejemplo:
docker run --cap-add=NET_ADMIN --device=/dev/sda1 -it ubuntu:22.04 bashDe esta manera, se mantiene el control, se mejora la seguridad y se permite que el contenedor realice las tareas necesarias sin riesgos innecesarios.
Hoja de trucos
| Característica | No privilegiados | Privilegiado |
|---|---|---|
| Acceso al núcleo del host | No | Sí |
| Acceso a dispositivos /dev | Limitada | Pleno |
| Gestión de módulos del kernel | No | Sí |
| Modificación de las interfaces de red del host | No | Sí |
| Riesgo de seguridad | Bajo | Alto |
| Caso de uso | Aplicaciones y servicios regulares | Servicios del sistema, pruebas, acceso al dispositivo |
| Ejemplo de ejecución | docker run -it imagen bash | docker run --privileged -it imagen bash |