Introducción
Docker privilegiado es una de las muchas características útiles de esta poderosa plataforma de virtualización. Antes de comenzar a trabajar en modo privilegiado, asegúrese de comprender cómo funciona.
En este tutorial, aprenderá qué son los contenedores Docker privilegiados, cuándo usarlos y si es una buena opción para usted.
¿Qué es el modo privilegiado de Docker?
El modo privilegiado de Docker otorga capacidades raíz de contenedor de Docker a todos los dispositivos en el sistema host. Ejecutar un contenedor en modo privilegiado le otorga las capacidades de su máquina host. Por ejemplo, le permite modificar las configuraciones de App Arm y SELinux.
Con las funciones del kernel del host y el acceso al dispositivo, incluso puede instalar una nueva instancia de la plataforma Docker dentro del contenedor privilegiado. Esencialmente, este modo permite ejecutar Docker dentro de Docker.
¿Cómo comprobar si un contenedor tiene privilegios?
Para verificar si está ejecutando un contenedor en modo privilegiado, use el comando:
docker inspect --format='{{.HostConfig.Privileged}}' [container_id]
Si el contenedor tiene privilegios, la salida responde con true
, como en la imagen de abajo.
Por otro lado, si el contenedor no tiene privilegios, la salida muestra el mensaje false
.
¿Cómo ejecutar el modo privilegiado de Docker?
Indique a Docker que ejecute un contenedor en modo privilegiado agregando --privileged
opción al comando ejecutar:
sudo docker run --privileged [image_name]
Ejemplo con privilegios de Docker
Para ejecutar un contenedor de Ubuntu (interactivamente) en modo privilegiado, usaría:
sudo docker run -it --privileged ubuntu
Para probar si el contenedor tiene acceso al host, puede intentar crear un sistema de archivos temporal (tmpfs ) y montarlo en /mnt :
mount -t tmpfs none /mnt
Ahora, enumere las estadísticas de espacio en disco (en formato legible por humanos formato) con el comando:
df -h
El sistema de archivos recién creado debería aparecer en la lista, como en la imagen a continuación.
¿Por qué ejecutar contenedores privilegiados no es seguro?
Al igual que Ubuntu desaconseja el uso del sistema como root, Docker también lo hace. Exponer el kernel y los recursos de hardware del host a cualquier ciberataque externo siempre es una amenaza potencial para el sistema.
Por este motivo, no se recomienda utilizar contenedores privilegiados en un entorno de producción.
Posibles infracciones a través de contenedores privilegiados
Tener contenedores privilegiados es un riesgo de seguridad para cualquier organización. Crea oportunidades para que los usuarios maliciosos tomen el control del sistema.
Permitir que un contenedor tenga acceso raíz a todo lo que hay en el sistema abre una ventana de oportunidad para los ataques cibernéticos. Un atacante cibernético podría conectarse al host desde el contenedor y poner en peligro la infraestructura y la configuración establecidas.
El escenario más común es cuando un usuario legítimo abusa del privilegio otorgado para realizar actividades maliciosas.
¿Cómo minimizar la escalada de privilegios del contenedor Docker?
La mejor manera de evitar la escalada de privilegios del contenedor Docker es no usar contenedores privilegiados en absoluto.
Sin embargo, si está ejecutando una aplicación que requiere ejecutarse con el usuario root, hay una manera de minimizar las posibilidades de actividad maliciosa. Esto se hace mediante reasignación del espacio de nombres de usuario , reasignando el usuario de ese contenedor específico a un usuario con menos privilegios en el host de Docker. Esencialmente, el contenedor ve al usuario como raíz, mientras que el host no.
La reasignación incluye la asignación de un rango de UID que funcionan dentro del contenedor (espacio de nombres) como UID normales de 0 a 65536 pero que no tienen privilegios en el host. Dos archivos administran la configuración del usuario:uno para el rango de ID de usuario (/etc/subuid ) y el otro para el rango de ID de grupo (/etc/subgid ).
Por defecto, Docker usa el dockremap usuario y grupo para hacer la reasignación.