Ich habe einen Docker-Container (LXC), auf dem MySQL ausgeführt wird. Da die Idee hinter Docker im Allgemeinen "ein laufender Prozess pro Container" ist, werden sie durchgesetzt, wenn ich AppArmor-Profile definiere, die auf die MySQL-Binärdatei abzielen? Gibt es eine Möglichkeit für mich, dies zu testen?
11
cgroups
, aber nicht so sehr . Es ist besser, auf Nummer sicher zu gehen, als es zu entschuldigen. Ich würde MySQL lieber sperren lassen, als dass ein MySQL-Zero-Day einen Weg findet, aus einer cgroup auszubrechen.Antworten:
Erstens werden cgroups nicht verwendet, um eine Anwendung von anderen auf einem System zu isolieren. Sie werden zum Verwalten der Ressourcennutzung und des Gerätezugriffs verwendet. Es sind die verschiedenen Namespaces (PID, UTS, Mount, User ...), die eine gewisse (begrenzte) Isolation bieten.
Darüber hinaus kann ein Prozess, der in einem Docker-Container gestartet wird, das AppArmor-Profil, unter dem er ausgeführt wird, wahrscheinlich nicht verwalten. Derzeit wird ein bestimmtes AppArmor-Profil eingerichtet, bevor der Container gestartet wird.
Es sieht so aus, als ob der libcontainer-Ausführungstreiber in Docker das Festlegen von AppArmor-Profilen für Container unterstützt , aber ich kann kein Beispiel oder keine Referenz im Dokument finden.
Anscheinend wird AppArmor auch mit LXC in Ubuntu unterstützt .
Sie sollten ein AppArmor-Profil für Ihre Anwendung schreiben und sicherstellen, dass LXC / libcontainer / Docker / ... es lädt, bevor Sie die Prozesse im Container starten.
Auf diese Weise verwendete Profile sollten erzwungen werden. Um sie zu testen, sollten Sie einen illegalen Zugriff versuchen und sicherstellen, dass er fehlschlägt.
In diesem Fall besteht keine Verbindung zwischen dem binären und dem tatsächlich erzwungenen Profil. Sie müssen Docker / LXC ausdrücklich anweisen, dieses Profil für Ihren Container zu verwenden. Wenn Sie ein Profil für die MySQL-Binärdatei schreiben, wird es nur auf dem Host und nicht im Container erzwungen.
quelle
Die Antwort ist sehr wahrscheinlich: nein.
Das Ubuntu Server-Leitfadenthema LXC behandelt ziemlich genau Ihre Frage und gibt die folgende Aussage ab:
Eine bessere Option, um Exploits mit unerwünschten Effekten zu vermeiden, besteht darin, den Benutzer, der den Container ausführt, einzuschränken und LXC-Container im Benutzerbereich zu verwenden, die die Benutzerfunktion des Kernels nutzen. Doch
docker
zur Zeit - meines Wissens - nicht unterstütztuserns
.In einem solchen Fall würde MySQL - aus Sicht des Hosts - als nicht privilegierter Benutzer ausgeführt, während es im Container als ausgeführt werden könnte
root
. Sie können danniptables
MySQL bei Bedarf an einen externen Port des Hosts binden.quelle