PUID, PGID und UMASK -> Wann und wie wirds benutzt?


Recommended Posts

Hallo zusammen,

 

kann mir eventuell einer erklären wann und wie man PUID, PGID und UMASK für Docker Templates verwendet?

Reicht das Flag "--user=99:100" in den ExtraParams oder lieber doch die Variablen dem Docker mitgeben? Gibt es da einen unterschied? Kann man die Variablen immer mit geben oder muss das Image diese auch zulassen?

 

<Config Name="PUID" Target="PUID" Default="99" Mode="" Description="UID for permissions. Do not change unless you know what you're doing." Type="Variable" Display="advanced" Required="true" Mask="false"/>
  <Config Name="PGID" Target="PGID" Default="100" Mode="" Description="GID for permissions. Do not change unless you know what you're doing." Type="Variable" Display="advanced" Required="true" Mask="false"/>
  <Config Name="UMASK" Target="UMASK" Default="022" Mode="" Description="UMASK for newly created files. Do not change unless you know what you're doing." Type="Variable" Display="advanced" Required="false" Mask="false"/>

 

Manchmal setzte ich das Flag "--user=99:100" und der Container funktioniert nicht. Nur ohne Flag funktioniert dieser. Manchmal muss ich auch nur die Variablen mitgeben. Manchmal beides. Ich verstehe das nicht so ganz.

 

Danke!

Link to comment
On 3/13/2024 at 4:32 PM, UNRA1DUser said:

Hallo zusammen,

 

kann mir eventuell einer erklären wann und wie man PUID, PGID und UMASK für Docker Templates verwendet?

Reicht das Flag "--user=99:100" in den ExtraParams oder lieber doch die Variablen dem Docker mitgeben? Gibt es da einen unterschied? Kann man die Variablen immer mit geben oder muss das Image diese auch zulassen?

 

<Config Name="PUID" Target="PUID" Default="99" Mode="" Description="UID for permissions. Do not change unless you know what you're doing." Type="Variable" Display="advanced" Required="true" Mask="false"/>
  <Config Name="PGID" Target="PGID" Default="100" Mode="" Description="GID for permissions. Do not change unless you know what you're doing." Type="Variable" Display="advanced" Required="true" Mask="false"/>
  <Config Name="UMASK" Target="UMASK" Default="022" Mode="" Description="UMASK for newly created files. Do not change unless you know what you're doing." Type="Variable" Display="advanced" Required="false" Mask="false"/>

 

Manchmal setzte ich das Flag "--user=99:100" und der Container funktioniert nicht. Nur ohne Flag funktioniert dieser. Manchmal muss ich auch nur die Variablen mitgeben. Manchmal beides. Ich verstehe das nicht so ganz.

 

Danke!

Ich bin da auch noch etwas Grün hinter den Ohren, aber soweit wie ich es verstanden habe, hängt dies gänzlich davon ab, wie das Image des Containers aufgebaut ist, den man da starten möchte.


Gerade für so ziemlich alle Docker, die es in den Community Applications gibt, sind diese bereits so aufgebaut, dass sie auf die PUID und PGID Variablen horchen (und häufig auch UMASK, wenn die Software im Container mit Dateien rumhantiert, damit man die Berechtigungen auf den erstellten Dateien steuern kann).

Wofür die Variablen dann genutzt werden, hängt dann davon ab, was im ausführenden Code des Dockers passiert. Z.B. könnte ein dockerfile vorsehen, dass die PUID und PGID Umgebungsvariablen dazu genutzt werden, um eben die Benutzer- und Gruppen-ID eines Linux Users fest vorzugeben, der innerhalb des Containers erstellt wird und darin weitere Prozesse ausführt.

Gerade, wenn Volumes vom Host System zum Container als persistenter Speicher durchgereicht werden, werden alle Dateien die dieser Linux User im Container innerhalb der durchgereichten Volumes erzeugt, standardmäßig mit seiner eigenen Benutzer und Gruppen ID versehen. Wäre dann ja naheliegend die IDs 99 für User und 100 für die Gruppe innerhalb des Containers zu verwenden, weil diese im Unraid Host System für den Benutzer "Nobody" und die Gruppe "Users" stehen. Das erleichtert dann den Umgang mit diesen Dateien innerhalb des Unraid Hosts selber, ohne dass man als root User in Unraid unterwegs sein muss.

 

Und wenn man jetzt einen Docker Container erwischt hat, der gar nicht diese Umgebungsvariablen verwendet?
Kann sein, dass dieser Docker Container in seinem Code keinen neuen User erzeugt innerhalb des Containers, sondern einfach mit dem default User des Containers los läuft, das wäre dann eben "root" (ID = 0). Möglicherweise kann man sich dann mit dem "--user=99:100" Flag in den Extra Parametern helfen, die steuern eben die IDs des Standard Users. Das sorgt dann wenigstens dafür, dass alles was der Standarduser des Containers an Dateien erzeugt, mit diesen IDs versehen werden.
Das kann gut gehen, muss aber nicht. Gerade wenn der Wechsel weg vom "root" User des Containers dafür sorgt, das er dann plötzlich gewisse Prozesse nicht mehr starten darf ("root" darf schließlich alles, aber der Flag sorgt dafür, dass dieser User eben nicht mehr "root" ist). Dann knallt der Container und läuft nicht mehr.

 

Letztendlich hängt es also ganz davon ab, was für einen Container man da hat und was der bei seinem Startup so alles tut. Die feine Unraid'sche Art ist eben die Unterstützung der PUID und PGID Variablen, aber das muss halt auch der Container Code hergeben. Einfach PUID/PGID als Umgebungsvariablen an einen Container klatschen sorgt noch lange nicht dafür, dass dieser mit diesen Variablen auch was macht.

Edited by Crovaxon
typos
  • Like 3
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.