Zum Inhalt springen

Docker/Userns-remap: Unterschied zwischen den Versionen

Aus Foxwiki
 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
== Beschreibung ==
== Beschreibung ==
; [[Linux-Namespaces]]
; [[Linux-Namespaces]]
* bieten Isolation für laufende Prozesse und
Isolation laufender Prozesse
* beschränken deren Zugriff auf Systemressourcen
* Systemressourcen beschränken
* ohne dass der laufende Prozess diese Beschränkungen wahrnimmt
* ohne dass Prozesse die wahrnehmen


; Rechteausweitung verhindern
; Rechteausweitung verhindern
Der beste Weg, um Angriffe zur Rechteausweitung aus einem Container heraus zu verhindern
Anwendungen von Containern mit nicht privilegierten Benutzern ausführen
* besteht darin, die
* Anwendungen Ihres Containers so zu konfigurieren
* dass sie als nicht privilegierte Benutzer ausgeführt werden


; Root-Benutzer innerhalb des Containers
; Root-Benutzer innerhalb des Containers
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.
Können einem Benutzer mit weniger Privilegien auf dem Docker-Host zugeordnet werden


; Bereich von UIDs
; Bereich von UIDs
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.
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 ==  
Zeile 43: Zeile 69:


=== Migration zu neuen Namespaces ===
=== Migration zu neuen Namespaces ===
Alle erforderlichen Daten werden in den Ordner /var/lib/docker/<uid.guid> verschoben
=== 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.
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 53: Zeile 80:


== Installation ==
== Installation ==
1.&nbsp;Um den Modus ''userns-remap'' zu aktivieren, müssen Sie die Datei '''''/etc/docker/daemon.js''''' mit folgendem Inhalt erstellen:
=== userns-remap aktivieren ===
; /etc/docker/daemon.js
<syntaxhighlight lang="json" highlight="" line copy>
<syntaxhighlight lang="json" highlight="" line copy>
{
{
Zeile 68: Zeile 96:
Sie können den Namen, die UID oder user:group angeben
Sie können den Namen, die UID oder user:group angeben


2.&nbsp;Nach dem Speichern der Datei den Dienst neu starten:
=== Dienst neu starten ===
Nach dem Speichern der Datei den Dienst neu starten:
<syntaxhighlight lang="bash" highlight="1" copy>
<syntaxhighlight lang="bash" highlight="1" copy>
sudo systemctl restart docker
sudo systemctl restart docker
</syntaxhighlight>
</syntaxhighlight>


3.&nbsp;Überprüfung
=== Überprüfung ===
<syntaxhighlight lang="bash" highlight="1" copy>
<syntaxhighlight lang="bash" highlight="1" copy>
docker info | grep -i userns
docker info | grep -i userns
Zeile 102: Zeile 131:
==== Projekt ====
==== Projekt ====
==== Weblinks ====
==== Weblinks ====
<!--
<!--
{{DEFAULTSORT:new}}
{{DEFAULTSORT:new}}
{{DISPLAYTITLE:new}}
{{DISPLAYTITLE:new}}
-->
-->
[[Kategorie:Docker/Sicherheit]]
[[Kategorie:Docker/Sicherheit]]


</noinclude>
</noinclude>

Aktuelle Version vom 11. Januar 2026, 14:53 Uhr

Docker/Userns-remap - 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
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