ZFS Share unter Proxmox an unprivilegierten LXC Container durchreichen

Moin!

Ich bin letztens auf eine Sicherheitslücke innerhalb meines Systems aufmerksam geworden, welche mir gar nicht so klar war. Es handelt sich um priviligierte und unpriviligierte Container in Proxmox. Dazu kommt auch noch das Thema „nesting“ welches ich allerdings in einem anderen Beitrag abfrühstücken werde.
Der Unterschied zwischen priviligiert und unpriviligiert ist wie folgt:

  • Bei einem priviligierten Container ist der root user id 0 des Containers auf den root user id 0 des Host gemappt.
  • Bei einem unpriviligierten Container verhält sich das anders. Hier ist der root user id 0 des Containers auf einen unpriviligierten User user id X des Host gemappt und kann so im Fehlerfall keinen Schaden anrichten.

Solltet ihr nun in einen unpriviligierten Container ein ZFS, NFS, oder SMB Share einbinden wollen, gestaltet sich das schwieriger als mit einem priviligierten Container.
In diesem Beitrag zeige ich euch wie ihr ein ZFS Share einbinden könnt.

Vorraussetzungen dafür:

Wir schließen uns per SSH auf den Container auf. Ihr könnt dafür jeden beliebigen User verwenden. In diesem Fall möchte ich das der User „www-data“ Zugriffsberechtigung erlangt. Damit dies möglich ist muss die User ID und Gruppen ID ermittelt werden.

sudo adduser username      ### Nur wenn ein neuer User verwendet werden soll.
sudo id -u www-data
sudo id -g www-data

Im nächsten Schritt legen wir ein Verzeichnis an, in diesem das Share gemountet werden soll.

cd /
sudo mkdir data

Verbindung zum Proxmox Host per SSH aufbauen. Anschließend erstellen wir einen User der die Rechte auf dem Host innehalten soll. Genau diesen User mappen wir dann auf den Rechteinhaber innerhalb des Containers. Auch hier ermitteln wir die uid und gid des erstellten Users. Diese merken wir uns für die nächsten Schritte.

sudo adduser username
sudo id -u username
sudo id -g username

Nun erstellen wir das Share, welches durchgereicht werden soll. Damit der im letzten Schritt erstellte User auch der Besitzer des Shares ist, erteilen wir ihm die Rechte dazu.

cd /
sudo zfs create zfspoolname/sharename
sudo chown -R username:usergruppe /zfspoolname/zfsshare

Als nächstes passen wir die Config des Containers an. Dort legen wir den Mountpoint an. Anschließend mappen wir den vorher angelegten User auf den Nutzer im Container, der die Datenberechtigung besitzen soll. In diesem Anwendungsfall mappen wir für den User „www-data“.

sudo nano /etc/pve/lxc/ContainerID.conf

mp0: /zfspoolname/zfssharename/,mp=/data
lxc.idmap: u 0 100000 33
lxc.idmap: g 0 100000 33
lxc.idmap: u 33 1001 1
lxc.idmap: g 33 1001 1
lxc.idmap: u 34 100034 65502       ### Die letzte Zahl muss mit der ersten Zahl addiert 65536 ergeben!
lxc.idmap: g 34 100034 65502     

Da Container immer vom root des Hosts gestartet werden, müssen wir ihm gestatten die UID’s des Containers zu verwenden. Das erledigen wir für den User im ersten Codekasten und für die Gruppe im zweiten Codekasten.

sudo nano /etc/subuid

root:1001:1
sudo nano /etc/subgid

root:1001:1

Nun starten wir den Container neu.

sudo pct reboot 129

Wir verbinden uns per SSH auf den Container und überprüfen die Dateiberechtigung und User ID.

cd /
ls -la /data

Und fertig sind wir. Grüße gehen aus dem Archiv!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.