Docker/Userns-remap: Unterschied zwischen den Versionen
K Dirkwagner verschob die Seite Userns-remap nach Docker/Userns-remap |
|||
| (6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 2: | Zeile 2: | ||
== Beschreibung == | == Beschreibung == | ||
Linux-Namespaces bieten Isolation für laufende Prozesse und beschränken deren Zugriff auf Systemressourcen, ohne dass der laufende Prozess diese Beschränkungen wahrnimmt. | |||
* Weitere Informationen zu Linux-Namespaces finden Sie unter Linux-Namespaces. | |||
Der beste Weg, um Angriffe zur Rechteausweitung aus einem Container heraus zu verhindern, besteht darin, die Anwendungen Ihres Containers so zu konfigurieren, dass sie als nicht privilegierte Benutzer ausgeführt werden. | |||
* Bei Containern, deren Prozesse als Root-Benutzer innerhalb des Containers ausgeführt werden müssen, können Sie diesen Benutzer einem Benutzer mit weniger Privilegien auf dem Docker-Host zuordnen. | |||
* Dem zugeordneten Benutzer wird ein Bereich von UIDs zugewiesen, die innerhalb des Namespace wie normale UIDs von 0 bis 65536 funktionieren, aber keine Privilegien auf dem Host-Rechner selbst haben. | |||
Der beste Weg, um Angriffe zur Rechteausweitung aus einem Container heraus zu verhindern, besteht darin, die Anwendungen Ihres Containers so zu konfigurieren, dass sie als nicht privilegierte Benutzer ausgeführt werden. Bei Containern, deren Prozesse als Root-Benutzer innerhalb des Containers ausgeführt werden müssen, können Sie diesen Benutzer einem Benutzer mit weniger Privilegien auf dem Docker-Host zuordnen. Dem zugeordneten Benutzer wird ein Bereich von UIDs zugewiesen, die innerhalb des Namespace wie normale UIDs von 0 bis 65536 funktionieren, aber keine Privilegien auf dem Host-Rechner selbst haben. | |||
== Vorbereitung == | == Vorbereitung == | ||
Nach dem Aktivieren von userns-remap erstellt Docker einen Unterordner wie folgt: | |||
<syntaxhighlight lang="bash" highlight=""> | |||
/var/lib/docker/<uid>.<gid>/ | |||
</syntaxhighlight> | |||
* Neue Entitäten (Bilder, Container, Volumes, Overlay-Ebenen) werden nun dort gespeichert. | * Neue Entitäten (Bilder, Container, Volumes, Overlay-Ebenen) werden nun dort gespeichert. | ||
| Zeile 22: | Zeile 24: | ||
=== Für neue Installationen === | === Für neue Installationen === | ||
Images und Container lassen sich einfacher und schneller neu laden als migrieren. | |||
; Bei aktiviertem userns-remap: | ; Bei aktiviertem userns-remap: | ||
| Zeile 32: | Zeile 31: | ||
:* ''--privileged'' ohne ''--userns=host'' funktioniert nicht mehr wie zuvor, einige Funktionen sind eingeschränkt. | :* ''--privileged'' ohne ''--userns=host'' funktioniert nicht mehr wie zuvor, einige Funktionen sind eingeschränkt. | ||
:* Es ist besser, ''userns-remap'' bei einer sauberen Docker-Installation zu aktivieren: Alte Image-Layer und Container werden ausgeblendet, da Docker einen separaten Ordner für den neuen Namespace in ''/var/lib/docker/'' erstellt. | :* Es ist besser, ''userns-remap'' bei einer sauberen Docker-Installation zu aktivieren: Alte Image-Layer und Container werden ausgeblendet, da Docker einen separaten Ordner für den neuen Namespace in ''/var/lib/docker/'' erstellt. | ||
=== Migration zu neuen Namespaces === | === Migration zu neuen Namespaces === | ||
=== Bereinigung === | === Bereinigung === | ||
Da alle erforderlichen Daten in den Ordner /var/lib/docker/<uid.guid> verschoben werden, müssen nach der Migration alle nicht mehr benötigten Dateien gelöscht werden. | Da alle erforderlichen Daten in den Ordner /var/lib/docker/<uid.guid> verschoben werden, müssen nach der Migration alle nicht mehr benötigten Dateien gelöscht werden. | ||
| Zeile 53: | Zeile 50: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Oder Sie können den Benutzer manuell eingeben: | |||
<syntaxhighlight lang="json" highlight="" line copy> | <syntaxhighlight lang="json" highlight="" line copy> | ||
{ | { | ||
| Zeile 60: | Zeile 56: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Sie können den Namen, die UID oder user:group angeben | |||
2. Nach dem Speichern der Datei den Dienst neu starten: | 2. Nach dem Speichern der Datei den Dienst neu starten: | ||
<syntaxhighlight lang="bash" highlight="1" copy> | |||
<syntaxhighlight lang="bash" highlight="1" | |||
sudo systemctl restart docker | sudo systemctl restart docker | ||
</syntaxhighlight> | </syntaxhighlight> | ||
3. Überprüfung | 3. Überprüfung | ||
<syntaxhighlight lang="bash" highlight="1" | <syntaxhighlight lang="bash" highlight="1" copy> | ||
docker info | grep -i userns | docker info | grep -i userns | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<syntaxhighlight lang="console" highlight=""> | <syntaxhighlight lang="console" highlight=""> | ||
Userns mode: private | Userns mode: private | ||
| Zeile 100: | Zeile 92: | ||
==== Projekt ==== | ==== Projekt ==== | ||
==== Weblinks ==== | ==== Weblinks ==== | ||
<!-- | <!-- | ||
{{DEFAULTSORT:new}} | {{DEFAULTSORT:new}} | ||
{{DISPLAYTITLE:new}} | {{DISPLAYTITLE:new}} | ||
--> | --> | ||
[[Kategorie:Docker/Sicherheit]] | |||
[[Kategorie: | |||
</noinclude> | </noinclude> | ||
Aktuelle Version vom 13. November 2025, 21:00 Uhr
Docker/Userns-remap - Beschreibung
Beschreibung
Linux-Namespaces bieten Isolation für laufende Prozesse und beschränken deren Zugriff auf Systemressourcen, ohne dass der laufende Prozess diese Beschränkungen wahrnimmt.
- Weitere Informationen zu Linux-Namespaces finden Sie unter Linux-Namespaces.
Der beste Weg, um Angriffe zur Rechteausweitung aus einem Container heraus zu verhindern, besteht darin, die Anwendungen Ihres Containers so zu konfigurieren, dass sie als nicht privilegierte Benutzer ausgeführt werden.
- Bei Containern, deren Prozesse als Root-Benutzer innerhalb des Containers ausgeführt werden müssen, können Sie diesen Benutzer einem Benutzer mit weniger Privilegien auf dem Docker-Host zuordnen.
- Dem zugeordneten Benutzer wird ein Bereich von UIDs zugewiesen, die innerhalb des Namespace wie normale UIDs von 0 bis 65536 funktionieren, aber keine Privilegien auf dem Host-Rechner selbst haben.
Vorbereitung
Nach dem Aktivieren von userns-remap erstellt Docker einen Unterordner wie folgt:
/var/lib/docker/<uid>.<gid>/
- Neue Entitäten (Bilder, Container, Volumes, Overlay-Ebenen) werden nun dort gespeichert.
- Kataloge mit alten Entitäten werden nicht mehr verwendet.
- docker ps, docker images, docker volume ls funktionieren nur mit dem aktuellen namepace
- Der Eigentümer der Dateien in overlay2 und volumes ist nun nicht mehr root, sondern der remapped-Benutzer
Für neue Installationen
Images und Container lassen sich einfacher und schneller neu laden als migrieren.
- Bei aktiviertem userns-remap
-
- --pid=host und --network=host können nicht verwendet werden.
- Einige externe Volume-/Speichertreiber verstehen möglicherweise remap nicht und funktionieren nicht mehr.
- --privileged ohne --userns=host funktioniert nicht mehr wie zuvor, einige Funktionen sind eingeschränkt.
- Es ist besser, userns-remap bei einer sauberen Docker-Installation zu aktivieren: Alte Image-Layer und Container werden ausgeblendet, da Docker einen separaten Ordner für den neuen Namespace in /var/lib/docker/ erstellt.
Migration zu neuen Namespaces
Bereinigung
Da alle erforderlichen Daten in den Ordner /var/lib/docker/<uid.guid> verschoben werden, müssen nach der Migration alle nicht mehr benötigten Dateien gelöscht werden.
systemctl stop docker
cd /var/lib/docker
rm -rf containers image network plugins swarm tmp trust volumes
Installation
1. Um den Modus userns-remap zu aktivieren, müssen Sie die Datei /etc/docker/daemon.js mit folgendem Inhalt erstellen:
{
"userns-remap": "default"
}
Oder Sie können den Benutzer manuell eingeben:
{
"userns-remap": "testuser"
}
Sie können den Namen, die UID oder user:group angeben
2. Nach dem Speichern der Datei den Dienst neu starten:
sudo systemctl restart docker
3. Überprüfung
docker info | grep -i userns
Userns mode: private
Anhang
Siehe auch
Dokumentation
Links
Projekt
Weblinks