decehakan
Goto Top

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

Content-Key: 1168824896

Url: https://administrator.de/contentid/1168824896

Printed on: June 13, 2024 at 00:06 o'clock

Member: Frank
Solution Frank Aug 18, 2021 updated at 13:18:52 (UTC)
Goto Top
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."

... 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