J'ai un conteneur Docker (LXC) qui exécute MySQL. Étant donné que l'idée derrière Docker est généralement «un processus en cours d'exécution par conteneur», si je définis des profils AppArmor ciblant le binaire MySQL, seront-ils appliqués? Existe-t-il un moyen pour moi de tester cela?
11
cgroups
, mais pas tant que ça . Il vaut mieux être prudent que désolé, je préférerais que MySQL soit verrouillé plutôt qu'un jour zéro MySQL pour trouver un moyen de sortir d'un groupe de contrôle.Réponses:
Tout d'abord, les groupes de contrôle ne sont pas utilisés pour isoler une application des autres sur un système. Ils sont utilisés pour gérer l'utilisation des ressources et l'accès aux appareils. Ce sont les différents espaces de noms (PID, UTS, mount, user ...) qui fournissent une certaine isolation (limitée).
De plus, un processus lancé à l'intérieur d'un conteneur Docker ne sera probablement pas en mesure de gérer le profil AppArmor sous lequel il s'exécute. L'approche actuellement adoptée consiste à configurer un profil AppArmor spécifique avant de lancer le conteneur.
Il semble que le pilote d'exécution libcontainer dans Docker prend en charge la définition de profils AppArmor pour les conteneurs , mais je ne trouve aucun exemple ou référence dans le document.
Apparemment, AppArmor est également pris en charge avec LXC dans Ubuntu .
Vous devez écrire un profil AppArmor pour votre application et vous assurer que LXC / libcontainer / Docker / ... le charge avant de démarrer les processus à l'intérieur du conteneur.
Les profils utilisés de cette façon doivent être appliqués, et pour le tester, vous devez essayer un accès illégal et vous assurer qu'il échoue.
Il n'y a aucun lien entre le binaire et le profil réellement appliqué dans ce cas. Vous devez explicitement dire à Docker / LXC d'utiliser ce profil pour votre conteneur. L'écriture d'un profil pour le binaire MySQL ne l'imposera que sur l'hôte, pas dans le conteneur.
la source
La réponse est très probable: non.
Le sujet du guide Ubuntu Server LXC traite à peu près votre question exacte et fait la déclaration suivante:
Une meilleure option pour éviter les exploits ayant des effets indésirables consiste à confiner l'utilisateur exécutant le conteneur et à utiliser des conteneurs LXC de l'espace utilisateur qui exploitent la fonctionnalité userns du noyau. Cependant,
docker
actuellement - à ma connaissance - ne prend pas en chargeuserns
.Dans un tel cas, MySQL s'exécuterait - du point de vue des hôtes - en tant qu'utilisateur non privilégié, tandis qu'à l'intérieur du conteneur, il pourrait être exécuté en tant que
root
. Vous pouvez ensuite utiliseriptables
pour lier MySQL à un port externe de l'hôte, si nécessaire.la source