Verständnisfragen zu Rechte bei Docker

Frank73

Benutzer
Mitglied seit
29. Jan 2018
Beiträge
149
Punkte für Reaktionen
5
Punkte
18
Hallo,

ich nutze schon länger Docker / Container Manager und aktuell 3 Container (Vaultwarden, acme.sh und ecoDMS).
Aktuell lese ich mich etwas in die Materie der Anwendung paperless-ngx ein. Dabei bin erstmals darüber gestolpert, dass dafür ein eigener User/Gruppe auf der Syno angelegt werden sollte/muss, welche über die Environments /PUID und GUID an den Host übergeben werden.

Hier ist häufig die Rede, einen eigenen User und Gruppe für Docker einzurichten (bei Linux scheint dies automatisch beim Installationsskript schon zu passieren) und diese dann bei den Enviroments beim jeweiligen Container mitzugeben. Allerdings muss es dann auch vom Image unterstützt werden, was nicht überall der Fall ist.
Dann wird noch beschrieben, dass man den "docker.sock" von "root root" auf "root docker" anpassen soll.

Bei weiteren Recherchen im Internet bin ich jetzt etwas verunsichert, ob ich auf meiner Syno und der Nutzung von Docker alles richtig gemacht habe.
Im Moment sehe ich den Wald vor lauter Bäumen nicht mehr (bin jetzt auch nicht so der Docker-Spezialist, eher der (interessierte) Anwender.

Wie richte ich denn jetzt Docker und die Conatiner so ein, dass es von den Rechten her passt und die Rechte nicht zu großzügig vergeben werden (auch im Hinblick ob Docker als root gestartet werden soll)?

Danke für eure Hilfe.
 

Jim_OS

Benutzer
Sehr erfahren
Mitglied seit
05. Nov 2015
Beiträge
4.447
Punkte für Reaktionen
1.743
Punkte
214
Darauf gibt es leider keine pauschale Antwort, sondern das ist u.a. auch von der jeweiligen Docker-Anwendung abhängig.

Nur mal ganz allgemein: Docker nutzen immer das Betriebssystem des Host (hier DSM) mit und müssen somit auch Zugriff darauf haben. Dadurch ergeben sich natürlich gewisse Risiken, die man dadurch versucht zu verringern das es für eine Docker-Anwendung halt extra User/User-Gruppen gibt, deren Zugriffsrechte dann wieder entsprechend beschränkt sind. Das kann von Docker zu Docker-Anwendung aber unterschiedlich sein und ganz unterschiedlich gehandhabt werden und wenn man da mal nicht aufpasst und/oder es z.B. ggf. einen Bug gibt, dann kann es passieren das man über die Docker-Anwendung plötzlich einen Admin-Zugriff auf DSM bekommt, bzw. bekommen kann. Was dann natürlich zu bösen Folgen führen kann. Z.B. ioBroker User konnten vor 1 - 2 Jahren dazu mal ein Lied singen, als ihre Daten auf dem NAS dann plötzlich alle von "Hackern" verschlüsselt wurden und waren.

Wie gesagt eine Standard-Aussage oder pauschale Vorgehensweise gibt es da eigentlich nicht, sondern man muss sich damit befassen was eine Docker-Anwendung tatsächlich an Rechten hat und man sollte z.B. Docker m.M.n. nur in absoluten Ausnahmefällen im privilegierten Modus ausführen. Aber auch dazu gibt es wieder unterschiedliche Ansichten, was aber nichts an meiner Ansicht dazu ändert. :LOL:

Hier noch ein etwas älterer Artikel zu dem Thema, der aber eigentlich auch immer noch Bestand hat: Docker: Einfallstore erkennen und schließen

VG Jim
 

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.050
Punkte für Reaktionen
900
Punkte
204
Ich habe Paperless-ngx einfach mit meinem Normalbenutzer eingerichtet, also dessen PUID/PGID im Container eingegeben.
 
  • Like
Reaktionen: Frank73

Frank73

Benutzer
Mitglied seit
29. Jan 2018
Beiträge
149
Punkte für Reaktionen
5
Punkte
18
@Jim_OS
Vielen Dank für deine ausführliche Beschreibung. Ich habe jetzt mal Portainer installiert. Hier hat man ja die Möglichkeit über die Inspect-Funktion nachzusehen, ob die Host-Config "privelegiert" ist oder nicht. Bei meinen 3 Containern steht hier ausnahmslos "false". Das ist ja schon mal beruhigend.

Eine Frage ist bei meinen weiteren Recherchen noch aufgetreten:
Hier steht unter Punkt 1), dass man mit dem Befehl
Code:
/var/run/docker.sock://var/run/docker.sock
niemals ein Image initialisieren soll. Bei der Installation des Portainers von Portainer wird es doch aber genauso gemacht. Ist das jetzt ein Problem?

@Monacum:
Danke für deine Info. Bin gerade am "rumspielen", da ich eventuell von ecoDMS zu paperless wechseln soll. ecoDMS ist einerseits doch sehr überfrachtet und bei paperless hat man den Vorteil, dass kein weiterer Client benötigt wird. Werde das mit der PUID/PGID mal testen. Die Übergabe der PUID/PGID bezieht sich dann nur auf die Rechte der Ordner des Hosts und hat nichts mit dem "rootless" starten des Containers zu tun; verstehe ich das richtig?
 

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.050
Punkte für Reaktionen
900
Punkte
204
Ja. Docker-Befehle lassen sich nach meinen Infos nur als Admin/Root absetzen, das will also alleine über einen normalen Benutzer nicht funktionieren.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Wenn du einen Container installierst, der die Docker-Umgebung verwalten soll, geht das m.W. nur so.
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.604
Punkte für Reaktionen
758
Punkte
154
Man soll das nicht machen, weil wer Zugriff auf docker.sock hat, der hat quasi root rechte. Mit docker.sock kann man sich einen Container erstellen und / mounten und machen was man will. Daher würde ich bei unbekannten Images das nicht machen, aber bei sowas wie Portainer habe ich keine Bedenken. Anders würde das Tool auch nicht funktionieren
 
  • Like
Reaktionen: Frank73

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.481
Punkte für Reaktionen
364
Punkte
103
Hier ist häufig die Rede, einen eigenen User und Gruppe für Docker einzurichten (bei Linux scheint dies automatisch beim Installationsskript schon zu passieren) und diese dann bei den Enviroments beim jeweiligen Container mitzugeben. Allerdings muss es dann auch vom Image unterstützt werden, was nicht überall der Fall ist.
Dann wird noch beschrieben, dass man den "docker.sock" von "root root" auf "root docker" anpassen soll.
Auf Linux wird die Gruppe docker angelegt, aber kein eigener user. Man kann über diesem Weg einem normalen Benutzer (= nicht privilegiert) durch das hinzufügen in die Docker-Gruppe erlauben die docker-cli auch als nicht root zu verwenden. Docker selbst läuft trotzdem nach wie vor als root. Deswegen sollte man gut überlegen wen man in die Docker Gruppe packt.

Das regelt allerdings nur den Zugriff von der docker-cli auf die Docker Engine. Es hat nichts mit Dateiberechtigungen für Container zu tun.
Ja. Docker-Befehle lassen sich nach meinen Infos nur als Admin/Root absetzen, das will also alleine über einen normalen Benutzer nicht funktionieren.
Das geht auf der Syno auch. Nutze ich selbst so. Wenn ich mich recht erinnere, hab ich die notwendigen Befehle hier im Forum auch schon mal geteilt.
 

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.050
Punkte für Reaktionen
900
Punkte
204
Ich bin mir nicht ganz sicher, was du mir sagen willst, aber wenn ich versuche, einen docker-compose …-Befehl als normaler Benutzer abzusetzen, erhalte ich eine Fehlermeldung: „permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock“.
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.604
Punkte für Reaktionen
758
Punkte
154
  • Like
Reaktionen: Monacum

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.604
Punkte für Reaktionen
758
Punkte
154
Ja Portainer ist nur eine UI. Alles was du mit Portainer machen kannst, kannst du auch mit der CLI mit dem Docker Befehl machen.
 

Frank73

Benutzer
Mitglied seit
29. Jan 2018
Beiträge
149
Punkte für Reaktionen
5
Punkte
18
Bin heute endlich mal wieder zum testen mit Container und Portainer gekommen.
Die "var/run/docker.socks" hat aktuell bei mir die Berechtigungen "root:root"; also keine separate Gruppe, wie es bei Linux der Fall wäre.

Ich habe mir das Image "hello-world" heruntergelden.
Den Container einmal mit root-Rechten über SSH ausgeführt und der Container warf das gewünschte Ergebnis raus.
Den Container als Admin-User über SSH ausgeführt und der Container wurde nicht gestartet ."..Permission denied".
Beide Ergebnisse hatte ich so erwartet und auch verstanden.:D

Dann in Portainer den Stack
Code:
services:
  hello_world:
    image: hello-world
ausgeführt. Auch hier wurde der Container gestartet.

Meine Frage:
Nutzt der Portainer immer root-Zugriff um die Container zu starten?
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.604
Punkte für Reaktionen
758
Punkte
154
Portainer nutzt den docker.sock. Dieser läuft mit Root und somit kann Portainer alles starten/deployen.
 
  • Like
Reaktionen: Frank73

Frank73

Benutzer
Mitglied seit
29. Jan 2018
Beiträge
149
Punkte für Reaktionen
5
Punkte
18
Bevor ich mir jetzt eine einheitliche Vorgehensweise bzgl. Container zurechtlege, mal eine generelle Frage hierzu.

Wir handhabt ihr das mit dem deployen von Containern?
- Über den Aufgabenmanager
- Über Portainer
- Manuelle Eingabe der Parameter in Portainer / Container Manager
- usw.

Danke für euren Input!
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.604
Punkte für Reaktionen
758
Punkte
154
Gibt VMs da immer über Portainer und Stack erstellen und dann da die Docker compose rein oder wenn die VM kein Portainer installiert hat (weil nur ein Container läuft) dann über docker compose über SSH
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.481
Punkte für Reaktionen
364
Punkte
103
Die pseudo-Datei docker.sock ist ein Unix-Domain Socket, an dem der Docker API-Endpunkt gebunden wird. Wer die Berechtigung hat docker.sock zu verwenden, bekommt lediglich die Rechte den API-Endpunkt anzusprechen.

Die Docker Engine selbst kennt weder Authentifizierung, noch Autorisierung und läuft immer als root (ausser man verwendet rootless Docker, was es auf der Syno nicht gibt)

Der Unix-Domain Sockets stellt nur eine Schnittstelle für den API-Endpunkt bereits, vergleichbar damit, wenn Anwendungen einen Port auf einer oder allen IPs des Systems binden.
 
  • Like
Reaktionen: alexhell


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat