Zum Inhalt springen

Docker/Userns-remap: Unterschied zwischen den Versionen

Aus Foxwiki
DanielZorin (Diskussion | Beiträge)
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


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


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.
; 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 ==  
* После включения userns-remap Docker создаёт подкаталог вида:
Nach dem Aktivieren von userns-remap erstellt Docker einen Unterordner wie folgt:
: ''/var/lib/docker/<uid>.<gid>/''
<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.
* 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 ===
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 46: Zeile 80:


== Installation ==
== Installation ==
 
=== userns-remap aktivieren ===
 
; /etc/docker/daemon.js
 
 
1.&nbsp;Um den Modus ''userns-remap'' zu aktivieren, müssen Sie die Datei '''''/etc/docker/daemon.js''''' mit folgendem Inhalt erstellen:
<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:
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


* 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>
2.&nbsp;Nach dem Speichern der Datei den Dienst neu starten:
 
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo systemctl restart docker
sudo systemctl restart docker
</syntaxhighlight>
</syntaxhighlight>


3.&nbsp;Überprüfung
=== Überprüfung ===
<syntaxhighlight lang="bash" highlight="1" line copy>
<syntaxhighlight lang="bash" highlight="1" copy>
docker info | grep -i userns
docker info | grep -i userns
</syntaxhighlight>
</syntaxhighlight>
: Ausgabe:
<syntaxhighlight lang="console" highlight="">
<syntaxhighlight lang="console" highlight="">
Userns mode: private
Userns mode: private
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang="bash" highlight="1" line copy>
< /syntaxhighlight>


<noinclude>
<noinclude>
Zeile 129: Zeile 137:
-->
-->


[[Kategorie:new]]
[[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