Docker als root Sicherheit, Empfehlung und Rat
Hallo Zusammen,
ich bin neu bei der Dockerszene und beschäftigte mich seit letztens mit Docker und hab vor OpenVPN als Docker laufen zu lassen. Hab daher paar einfache Fragen an Sicherheitsexperten und Dockerexperten:
1.) Die Docker-Engine läuft per default als root, und die Container laufen als non-root user. Bei einer Kompromitierung der Container ist der Docker-Engine per default gut
geschützt ?
2) ist der Sicherheitgewinn hoch wenn ich auch die Docker-Engine als non-root laufen lassen würde ? Bei postfix lass ich ein smtp server laufen, der läuft zwar auch als root aber chroot.
Vielen Dank und Viele Grüße
decehakan
ich bin neu bei der Dockerszene und beschäftigte mich seit letztens mit Docker und hab vor OpenVPN als Docker laufen zu lassen. Hab daher paar einfache Fragen an Sicherheitsexperten und Dockerexperten:
1.) Die Docker-Engine läuft per default als root, und die Container laufen als non-root user. Bei einer Kompromitierung der Container ist der Docker-Engine per default gut
geschützt ?
2) ist der Sicherheitgewinn hoch wenn ich auch die Docker-Engine als non-root laufen lassen würde ? Bei postfix lass ich ein smtp server laufen, der läuft zwar auch als root aber chroot.
Vielen Dank und Viele Grüße
decehakan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1168824896
Url: https://administrator.de/contentid/1168824896
Ausgedruckt am: 24.11.2024 um 16:11 Uhr
1 Kommentar
Normalerweise läuft der Docker Daemon selbst als Root-User. Man kann ihn aber auch im "Rootless mode" unter einem anderen User laufen lassen. Siehe dazu https://docs.docker.com/engine/security/rootless/
Dieser Mode kam recht spät mit Version v20.10. Docker selbst sagt: "Im Rootless-Modus können der Docker-Daemon und die Container als Nicht-Root-Benutzer ausgeführt werden, um potenzielle Schwachstellen im Daemon und in der Container-Laufzeitumgebung zu verringern."
Nicht wirklich. Im Standardfall wird auch der Docker-Prozess im Container von root gestartet (hängt ein wenig davon ab, wie das jeweiligen OS innerhalb des Containers konfiguriert ist). Manche Docker Images laufen mit dem jeweiligen User, garantiert ist das aber nicht. Das sollte man immer vorher prüfen: z.B. mit
Generell sollte der Prozess aber mit so wenig Rechten wie nötig ausgestattet sein. Du kannst z.B. per Dockerfile einen neuen Benutzer und eine Gruppe anlegen und diese anschließend nutzen. Hier mal ein Beispiel Dockerfile.
OS: "alpine linux", Daemon: "lighttpd Webserver":
Generell sicher nicht falsch. Der Sicherheitsgewinn ist aber höher, wenn du innerhalb des Docker-Images einen entsprechenden User und nicht den root User benutzt. Das ist die Ebene, die von außen sichtbar ist. Normale VMs laufen in der Regel auch als Root (KVM, etc.). An diese Schicht sollte der User von Außen niemals dran kommen. Der Rootless-Modus ist eher ein Schutz von Schwachstellen im Daemon und in der Docker-Laufzeitumgebung und weniger der Software innerhalb das Containers.
Gruß
Frank
Dieser Mode kam recht spät mit Version v20.10. Docker selbst sagt: "Im Rootless-Modus können der Docker-Daemon und die Container als Nicht-Root-Benutzer ausgeführt werden, um potenzielle Schwachstellen im Daemon und in der Container-Laufzeitumgebung zu verringern."
... und die Container laufen als non-root user.
Nicht wirklich. Im Standardfall wird auch der Docker-Prozess im Container von root gestartet (hängt ein wenig davon ab, wie das jeweiligen OS innerhalb des Containers konfiguriert ist). Manche Docker Images laufen mit dem jeweiligen User, garantiert ist das aber nicht. Das sollte man immer vorher prüfen: z.B. mit
docker exec -it lighttpd ps -ef
# Ausgabe:
UID PID PPID C STIME TTY TIME CMD
root 1 0 1 14:39 ? 00:00:05 /usr/local/lighttpd
Generell sollte der Prozess aber mit so wenig Rechten wie nötig ausgestattet sein. Du kannst z.B. per Dockerfile einen neuen Benutzer und eine Gruppe anlegen und diese anschließend nutzen. Hier mal ein Beispiel Dockerfile.
OS: "alpine linux", Daemon: "lighttpd Webserver":
FROM alpine
ENV LIGHTTPD_VERSION=1.4.55-r1
RUN apk add --update --no-cache \
lighttpd=${LIGHTTPD_VERSION} \
lighttpd-mod_auth \
&& rm -rf /var/cache/apk/*
COPY etc/lighttpd/* /etc/lighttpd/
COPY start.sh /usr/local/bin/
EXPOSE 80
RUN groupadd -r www-data && \
useradd -r -s /bin/false -g www-data www-data && \
chown -R www-data:www-data /var/www/localhost
USER www-data
COPY --chown=www-data:www-data <<WWW_PATH_AUF_DEM_HOST>> /var/www/localhost
etc.
ist der Sicherheitgewinn hoch wenn ich auch die Docker-Engine als non-root laufen lassen würde ?
Generell sicher nicht falsch. Der Sicherheitsgewinn ist aber höher, wenn du innerhalb des Docker-Images einen entsprechenden User und nicht den root User benutzt. Das ist die Ebene, die von außen sichtbar ist. Normale VMs laufen in der Regel auch als Root (KVM, etc.). An diese Schicht sollte der User von Außen niemals dran kommen. Der Rootless-Modus ist eher ein Schutz von Schwachstellen im Daemon und in der Docker-Laufzeitumgebung und weniger der Software innerhalb das Containers.
Gruß
Frank