Die Docker-Container werden standardmäßig mit Root-Rechten ausgeführt, ebenso wie die Anwendung, die im Container ausgeführt wird. Dies ist aus Sicherheitssicht ein weiteres großes Problem, da Hacker Root-Zugriff auf den Docker-Host erhalten können, indem sie die Anwendung hacken, die im Container ausgeführt wird.
Methode 1 – Benutzer zur Docker-Gruppe hinzufügen
1. Um Docker als Nicht-Root-Benutzer auszuführen, müssen Sie Ihren Benutzer zur Docker-Gruppe hinzufügen.
2. Erstellen Sie eine Docker-Gruppe, falls noch keine vorhanden ist:
$ sudo groupadd docker
3. Fügen Sie Ihren Benutzer zur Docker-Gruppe hinzu:
$ sudo usermod -aG docker [non-root user]
4. Melden Sie sich ab und wieder an, damit Ihre Gruppenmitgliedschaft neu bewertet wird.
Methode 2 – Verwenden von Dockerfile (USER-Anweisung)
Docker bietet eine einfache, aber leistungsstarke Lösung, um das Privileg des Containers auf einen Nicht-Root-Benutzer zu ändern und so böswilligen Root-Zugriff auf den Docker-Host zu verhindern. Diese Änderung für den Nicht-Root-Benutzer kann mit -u durchgeführt werden oder –Benutzer Option des Unterbefehls docker run oder USER Anweisung in der Dockerfile.
1. Bearbeiten Sie die Docker-Datei, die einen Benutzer ohne Root-Rechte erstellt, und ändern Sie den Standard-Root-Benutzer in den neu erstellten Benutzer ohne Root-Rechte, wie hier gezeigt:
########################################## # Dockerfile to change from root to # non-root privilege ########################################### # Base image is CentOS 7 FROM Centos:7 # Add a new user "john" with user id 8877 RUN useradd -u 8877 john # Change to non-root privilege USER john
2. Fahren Sie fort, das Docker-Image mit dem Unterbefehl „docker build“ zu erstellen, wie hier dargestellt:
$ sudo docker build -t nonrootimage .
3. Lassen Sie uns abschließend den aktuellen Benutzer unseres Containers mit dem id-Befehl in einem Docker-Run-Unterbefehl überprüfen:
$ sudo docker run --rm nonrootimage id uid=8877(john) gid=8877(john) groups=8877(john)
Offensichtlich werden der Benutzer, die Gruppe und die Gruppen des Containers jetzt in einen Nicht-Root-Benutzer geändert.