Tengo un contenedor Docker (LXC) que ejecuta MySQL. Dado que la idea detrás de Docker es generalmente "un proceso en ejecución por contenedor", si defino los perfiles de AppArmor dirigidos al binario MySQL, ¿se aplicarán? ¿Hay alguna forma de probar esto?
11
cgroups
, pero no tanto . Es mejor prevenir que curar, prefiero tener MySQL bloqueado que tener un día cero de MySQL para encontrar la manera de salir de un cgroup.Respuestas:
Primero, los cgroups no se usan para aislar una aplicación de otras en un sistema. Se utilizan para administrar el uso de recursos y el acceso a dispositivos. Son los diversos espacios de nombres (PID, UTS, montaje, usuario ...) los que proporcionan cierto aislamiento (limitado).
Además, un proceso lanzado dentro de un contenedor Docker probablemente no podrá administrar el perfil de AppArmor con el que se está ejecutando. El enfoque actualmente adoptado es configurar un perfil específico de AppArmor antes de iniciar el contenedor.
Parece que el controlador de ejecución libcontainer en Docker admite la configuración de perfiles de AppArmor para contenedores , pero no puedo encontrar ningún ejemplo o referencia en el documento.
Aparentemente, AppArmor también es compatible con LXC en Ubuntu .
Debe escribir un perfil de AppArmor para su aplicación y asegurarse de que LXC / libcontainer / Docker / ... lo cargue antes de iniciar los procesos dentro del contenedor.
Los perfiles utilizados de esta manera deben aplicarse, y para probarlo debe probar un acceso ilegal y asegurarse de que falla.
No hay ningún vínculo entre el binario y el perfil realmente aplicado en este caso. Debe decirle explícitamente a Docker / LXC que use este perfil para su contenedor. Escribir un perfil para el binario MySQL solo lo impondrá en el host, no en el contenedor.
fuente
La respuesta es muy probable: no.
El tema de la guía de Ubuntu Server LXC discute más o menos tu pregunta exacta y hace la siguiente declaración:
Una mejor opción para exploits evitar tener efectos no deseados es la de limitar el usuario que ejecuta los contenedores de espacio de usuario LXC de contenedores y el uso que aprovechan la userns característica del kernel. Sin embargo,
docker
actualmente, que yo sepa, no es compatibleuserns
.En tal caso, MySQL podría, desde la perspectiva de los hosts, ejecutarse como usuario sin privilegios, mientras que dentro del contenedor podría ejecutarse como
root
. Luego puede usariptables
para vincular MySQL a un puerto externo del host, si es necesario.fuente