ZFS Share an unprivilegierten LXC 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 privilegierte und unprivilegierte Container in Proxmox. Dazu kommt auch noch das Thema „nesting“ welches ich allerdings in einem anderen Beitrag abfrühstücken werde.
Der Unterschied zwischen privilegiert und unprivilegiert ist wie folgt:

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

Solltet ihr nun in einen unprivilegierten Container ein ZFS, NFS, oder SMB Share einbinden wollen, gestaltet sich das schwieriger als mit einem privilegierten 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, dass 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!

Abonnieren
Benachrichtige mich bei
guest
4 Kommentare
Älteste
Neuste Meist Bewerteste
Inline Feedbacks
Zeige alle Kommentare
4
0
Bitte lasse uns an deinen Gedanken teilhaben und kommentier den Beitrag.x
Cookie Consent mit Real Cookie Banner