Freigaben in einen unprivilegierten LXC-Container unter Proxmox
In einem Proxmox VE (Virtual Environment) kann man Freigaben, wie NFS oder SMB, in Container durchreichen, um so externe Speicherquellen innerhalb eines Containers zugänglich zu machen, da man dort sonst keine Freigaben mounten kann. Dies ist besonders nützlich, wenn bestimmte Daten für Applikationen im Container verfügbar gemacht werden sollen, die auf externen Speichermedien liegen.
Ein Beispiel für das Durchreichen einer Freigabe in einen unprivilegierten LXC-Container ist der Befehl pct set
. Hiermit wird die Konfiguration des Containers angepasst, sodass ein externer Mountpunkt im Container eingebunden wird.
Abstrakte Erklärung des Befehls
Der Befehl pct set
ist ein Kommando, das genutzt wird, um die Konfiguration eines Containers zu ändern. Wenn eine Freigabe in einen Container gemountet werden soll, wird dies mit der Option -mp
(für „mount point“) umgesetzt. Es gibt verschiedene Optionen, um den Mountpunkt festzulegen:
- mp0, mp1, etc.: Diese geben an, welcher Mountpunkt im Container genutzt wird. Mehrere Mountpunkte können durchgezählt werden.
- mp: Dies gibt den Pfad auf dem Hostsystem an, der in den Container gemountet werden soll.
Das Format des Befehls ist also:pct set 105 -mp0 /mnt/pve/BackUP,mp=/shared
<ID_Container>
: Die ID des Containers, in den die Freigabe gemountet werden soll.<ID_Index>
: Der Index des Mountpunkts (z.B.mp0
,mp1
usw.).<Host_Pfad>
: Der Pfad auf dem Hostsystem, der gemountet wird.<Container_Pfad>
: Der Pfad im Container, unter dem der Mountpunkt verfügbar sein soll.
Beispielbefehl
Im gegebenen Beispiel:
pct set 105 -mp0 /mnt/pve/BackUP,mp=/shared
wird folgendermaßen konfiguriert:
- Der Container mit der ID
105
wird ausgewählt. - Der erste Mountpunkt (
mp0
) wird festgelegt. - Der Pfad auf dem Hostsystem (
/mnt/pve/BackUP
) wird im Container unter/shared
eingebunden.
Dieser Befehl sorgt dafür, dass die NFS-Freigabe, die auf dem Hostsystem unter /mnt/pve/BackUP
verfügbar ist, im Container unter /shared
verfügbar wird. Auf diese Weise kann der Container auf die Daten der NFS-Freigabe zugreifen, als wären sie direkt im Container verfügbar.
Berechtigungen beachten
Ein wichtiger Aspekt beim Mounten von Freigaben in unprivilegierte LXC-Container sind die Berechtigungen. Unprivilegierte Container laufen standardmäßig mit geringeren Rechten, was bedeutet, dass UID (User IDs) und GID (Group IDs) des Hosts auf andere Werte im Container gemappt werden.
Es ist wichtig sicherzustellen, dass die Dateien und Verzeichnisse im gemounteten Pfad die richtigen Berechtigungen haben, damit der Container darauf zugreifen kann:
- UID/GID-Mapping: Auf dem Hostsystem müssen die Dateien und Verzeichnisse mit einer UID und GID versehen sein, die im Container auf die richtigen Benutzer gemappt werden. Dies geschieht durch das UID/GID-Mapping in der LXC-Konfiguration. Wenn beispielsweise die UID 1000 im Hostsystem im Container auf UID 100000 gemappt wird, müssen die Dateien im Hostsystem auch die entsprechenden Berechtigungen für UID 1000 haben.
- Berechtigungen setzen: Die Berechtigungen (Lesen, Schreiben, Ausführen) müssen so gesetzt sein, dass der Container die benötigten Rechte hat. Gegebenenfalls müssen
chmod
undchown
verwendet werden, um die richtigen Rechte auf dem Hostsystem zu setzen.
Beispielsweise könnten Sie auf dem Hostsystem sicherstellen, dass das Verzeichnis /mnt/pve/BackUP
und dessen Inhalte der UID und GID gehören, die im Container korrekt gemappt werden, oder dass die Berechtigungen breit genug gesetzt sind, um den Zugriff zu ermöglichen:
chown 1000:1000 /mnt/pve/BackUP
chmod 755 /mnt/pve/BackUP
In diesem Beispiel werden die Berechtigungen so gesetzt, dass der Benutzer mit UID 1000 (und die entsprechenden gemappten UIDs im Container) auf die Freigabe zugreifen kann.
Mögliche Anwendungsfälle
- NFS Freigaben: Netzwerkspeicher, der über das NFS-Protokoll zur Verfügung gestellt wird, kann in einen Container gemountet werden, um große Datenmengen zur Verfügung zu stellen.
- SMB/CIFS Freigaben: Netzwerkspeicher, der über das SMB-Protokoll (häufig bei Windows-Freigaben) zur Verfügung steht, kann ebenfalls in Container gemountet werden.
- Lokale Verzeichnisse: Auch lokale Verzeichnisse des Hosts können in den Container gemountet werden, um beispielsweise Konfigurationsdateien oder Logs des Hosts zugänglich zu machen.
Algorithmus zur Nutzung von pct set
-
Bestimmen der Container-ID:
- Ermitteln der ID des Containers, in den gemountet werden soll.
-
Identifizieren des Host-Pfades:
- Finden des Pfades auf dem Hostsystem, der gemountet werden soll (z.B.
/mnt/pve/BackUP
).
- Finden des Pfades auf dem Hostsystem, der gemountet werden soll (z.B.
-
Auswählen des Zielpfades im Container:
- Festlegen, wo im Container der Mountpunkt verfügbar sein soll (z.B.
/shared
).
- Festlegen, wo im Container der Mountpunkt verfügbar sein soll (z.B.
-
Berechtigungen prüfen:
- Sicherstellen, dass die Dateien und Verzeichnisse im Host-Pfad die richtigen UID/GID und Berechtigungen für den Container haben.
-
Befehl ausführen:
- Befehl eingeben und ausführen:
pct set <ID_Container> -mp<ID_Index> <Host_Pfad>,mp=<Container_Pfad>
.
- Befehl eingeben und ausführen:
-
Prüfung:
- Überprüfen, ob der Mountpunkt im Container korrekt verfügbar ist und der Container darauf zugreifen kann
Beispiel:
pct set 105 -mp0 /mnt/pve/BackUP,mp=/shared
Dieser Algorithmus kann wiederholt werden, um weitere Mountpunkte zu konfigurieren, indem einfach der Index (z.B. mp1
, mp2
) und die entsprechenden Pfade angepasst werden.