Docker/Userns-remap: Unterschied zwischen den Versionen
Erscheinungsbild
Keine Bearbeitungszusammenfassung |
|||
| (21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 2: | Zeile 2: | ||
== Beschreibung == | == Beschreibung == | ||
; [[Linux-Namespaces]] | |||
Isolation laufender Prozesse | |||
* Systemressourcen beschränken | |||
* ohne dass Prozesse die wahrnehmen | |||
; Rechteausweitung verhindern | |||
Anwendungen von Containern mit nicht privilegierten Benutzern ausführen | |||
; Root-Benutzer innerhalb des Containers | |||
Können einem Benutzer mit weniger Privilegien auf dem Docker-Host zugeordnet werden | |||
; Bereich von UIDs | |||
Dem 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. | |||
== userns-remap == | |||
* Wenn Docker mit aktiviertem userns-remap betrieben wird, muss der Eigentümer der OpenProject-Volume-Verzeichnisse manuell gesetzt werden. | |||
* Andernfalls starten die OpenProject-Dienste nicht. | |||
; Ermittlung des UID/GID-Bereichs des dockremap-Benutzers | |||
<syntaxhighlight lang="bash" highlight="1" line> | |||
grep dockremap /etc/subuid /etc/subgid | |||
</syntaxhighlight> | |||
Ausgabe: | |||
<syntaxhighlight lang="bash" highlight="" line> | |||
dockremap:241074:65536 | |||
</syntaxhighlight> | |||
* OpenProject verwendet innerhalb des Containers die UID 1000. | |||
* Zur Berechnung der Ziel-UID muss lediglich 1000 zur dockremap-UID addiert werden. | |||
* Daraus ergibt sich eine Ziel-UID von '''242074'''. | |||
<syntaxhighlight lang="bash" highlight="1" copy line> | |||
sudo chown -R 242074:242074 /var/lib/openproject | |||
</syntaxhighlight> | |||
* Die Rechte sind nun korrekt festgelegt. | |||
== 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 60: | ||
=== 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 67: | ||
:* ''--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 === | ||
Alle erforderlichen Daten werden in den Ordner /var/lib/docker/<uid.guid> verschoben | |||
=== Bereinigung === | === Bereinigung === | ||
Nach der Migration nicht mehr benötigte Dateien löschen | |||
<syntaxhighlight lang="bash" highlight="" copy line> | <syntaxhighlight lang="bash" highlight="" copy line> | ||
systemctl stop docker | systemctl stop docker | ||
| Zeile 46: | Zeile 80: | ||
== Installation == | == Installation == | ||
=== userns-remap aktivieren === | |||
; /etc/docker/daemon.js | |||
<syntaxhighlight lang="json" highlight="" line copy> | <syntaxhighlight lang="json" highlight="" line copy> | ||
{ | { | ||
| Zeile 57: | Zeile 88: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Oder Sie können den Benutzer manuell eingeben: | |||
<syntaxhighlight lang="json" highlight="" line copy> | <syntaxhighlight lang="json" highlight="" line copy> | ||
{ | { | ||
| Zeile 64: | Zeile 94: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Sie können den Namen, die UID oder user:group angeben | |||
=== Dienst neu starten === | |||
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> | ||
=== Ü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 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<noinclude> | <noinclude> | ||
| Zeile 129: | Zeile 137: | ||
--> | --> | ||
[[Kategorie: | [[Kategorie:Docker/Sicherheit]] | ||
</noinclude> | </noinclude> | ||
Aktuelle Version vom 11. Januar 2026, 14:53 Uhr
Docker/Userns-remap - Beschreibung
Beschreibung
Isolation laufender Prozesse
- Systemressourcen beschränken
- ohne dass Prozesse die wahrnehmen
- Rechteausweitung verhindern
Anwendungen von Containern mit nicht privilegierten Benutzern ausführen
- Root-Benutzer innerhalb des Containers
Können einem Benutzer mit weniger Privilegien auf dem Docker-Host zugeordnet werden
- Bereich von UIDs
Dem 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.
userns-remap
- Wenn Docker mit aktiviertem userns-remap betrieben wird, muss der Eigentümer der OpenProject-Volume-Verzeichnisse manuell gesetzt werden.
- Andernfalls starten die OpenProject-Dienste nicht.
- Ermittlung des UID/GID-Bereichs des dockremap-Benutzers
grep dockremap /etc/subuid /etc/subgid
Ausgabe:
dockremap:241074:65536
- OpenProject verwendet innerhalb des Containers die UID 1000.
- Zur Berechnung der Ziel-UID muss lediglich 1000 zur dockremap-UID addiert werden.
- Daraus ergibt sich eine Ziel-UID von 242074.
sudo chown -R 242074:242074 /var/lib/openproject
- Die Rechte sind nun korrekt festgelegt.
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
Alle erforderlichen Daten werden in den Ordner /var/lib/docker/<uid.guid> verschoben
Bereinigung
Nach der Migration nicht mehr benötigte Dateien löschen
systemctl stop docker
cd /var/lib/docker
rm -rf containers image network plugins swarm tmp trust volumes
Installation
userns-remap aktivieren
- /etc/docker/daemon.js
{
"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
Dienst neu starten
Nach dem Speichern der Datei den Dienst neu starten:
sudo systemctl restart docker
Überprüfung
docker info | grep -i userns
Userns mode: private
Anhang
Siehe auch
Dokumentation
Links
Projekt
Weblinks