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 und chown 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

  1. Bestimmen der Container-ID:

    • Ermitteln der ID des Containers, in den gemountet werden soll.
  2. Identifizieren des Host-Pfades:

    • Finden des Pfades auf dem Hostsystem, der gemountet werden soll (z.B. /mnt/pve/BackUP).
  3. Auswählen des Zielpfades im Container:

    • Festlegen, wo im Container der Mountpunkt verfügbar sein soll (z.B. /shared).
  4. Berechtigungen prüfen:

    • Sicherstellen, dass die Dateien und Verzeichnisse im Host-Pfad die richtigen UID/GID und Berechtigungen für den Container haben.
  5. Befehl ausführen:

    • Befehl eingeben und ausführen: pct set <ID_Container> -mp<ID_Index> <Host_Pfad>,mp=<Container_Pfad>.
  6. 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.