Forum: PC Hard- und Software LXC Container und die Rechte bei Mountpoints


von Rene K. (xdraconix)


Lesenswert?

Ich nutze Proxmox und habe darin einen unpreveligierten Container 
erstellt. Nun möchte ich von dem Server ein Verzeichniss im Container 
verfügbar machen.

Meine Proxmox Config sieht so aus:
1
root@server:/etc/pve/local/lxc# cat 1017.conf
2
arch: amd64
3
cores: 2
4
features: nesting=1
5
hostname: WebTest
6
memory: 512
7
mp0: /mnt/ext-share/Websites/ContainerWebsites/1017,mp=/var/www/htdocs
8
nameserver: 192.168.178.3
9
net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.178.1,hwaddr=4A:7C:CF:E5:C4:47,ip=192.168.178.17/24,type=veth
10
ostype: alpine
11
rootfs: local-lvm:vm-1017-disk-1,size=5G
12
searchdomain: 192.168.178.3
13
swap: 512
14
unprivileged: 1
15
lxc.idmap: u 0 100000 1000
16
lxc.idmap: g 0 100000 1000
17
lxc.idmap: u 1000 1000 1
18
lxc.idmap: g 1000 1000 1
19
lxc.idmap: u 1001 101001 64535
20
lxc.idmap: g 1001 101001 64535

Auf dem Server ist dies Verzeichnis (1017) so gemountet - 33:33 ist 
www-data:www-data:
1
root@server:/mnt/ext-share/Websites/ContainerWebsites# ls -lhn
2
total 4.0K
3
drwxr-xr-x 2 33 33 4.0K Oct 23 22:49 1017

auf dem Container sieht dies nun so aus:
1
WebTest:/var/www# ls -lhn
2
total 8K
3
drwxr-xr-x    2 65534    65534       4.0K Oct 23 20:49 htdocs

ändere ich nun das idmap auf, so endet dies in einer Fehlermeldung das 
dies nicht erlaubt ist:
1
lxc.idmap: u 0 100000 1000
2
lxc.idmap: g 0 100000 1000
3
lxc.idmap: u 33 1033 1
4
lxc.idmap: g 33 1033 1
5
lxc.idmap: u 1034 101034 64535
6
lxc.idmap: g 1034 101034 64535

Ich bekomme weder mit root noch mit sonstwem auf den Mount in dem 
Container, ich kann es zwar lesen, aber nichts ändern.

Ich verstehe die ganze Sache mit dem ummappen nicht so richtig. Wie 
mappe ich den User 33:33 auf die 65534:65534? Wer kann mir das irgendwie 
plausibel erklären?

Lieben Dank

von Peter Pan (Gast)


Lesenswert?


von Draco (Gast)


Lesenswert?

Nein tatsächlich nicht. 😊

In der SUBUID Datei... Was bedeutet die 1 hinter der UID? Das nur die 
eine UID gemappt wird?

von 🐧 DPA 🐧 (Gast)


Lesenswert?

65534:65534 (nobody:nogroup) ist ein Nutzer, der eigentlich möglichst 
nichts können sollte.

Wenn es kein Mapping im Container gibt, das auf einen Bereich mappt, in 
dem die UID / GID des Files enthalten sind, wird 65534:65534 genommen, 
und dann kommst du da nicht ran. Das ist vermutlich nicht, was du 
willst.

Als Beispiel, sagen wir du mappst:
1
lxc.idmap: u 10 20 4

Das mappt 4 UIDs im Container auf 4 UIDs ausserhalb:
1
10 -> 20
2
11 -> 21
3
12 -> 22
4
13 -> 23

Hat dann ausserhalb eine Datei die UID 21, siehst du innerhalb die UID 
11.
Hat ein Prozess innerhalb die UID 11, und greift auf die Datei zu, ist 
das, wie wenn er UID 21 gehabt hätte.

Damit das unprivileged (ohne root) geht, muss es noch in der /etc/subuid 
eingetragen sein. (in meinem Beispiel 20-23).

Du mappst bei dir:
1
lxc.idmap: u 33 1033 1

Aber ausserhalb vom Container hat dein File die UID 33. 1033 ist die UID 
ausserhalb vom Container, die im Container 33 entspricht, aber die Datei 
hat UID 33, nicht UID 1033. Es ist keine UID im Container auf UID 33 
ausserhalb gemappt.

Draco schrieb:
> In der SUBUID Datei... Was bedeutet die 1 hinter der UID? Das nur die
> eine UID gemappt wird?

Ja.

von Draco (Gast)


Lesenswert?

Ich denke ich habe es nun so mittlerweile verstanden.

Wo bei mir auch ein Fehler lag, man muss dann den gesamten Bereich 
(100000 - 16553) mappen, sonst weigert sich der Container beharrlich zu 
starten.

Mein nächstes Problem ist, ich mappe ja nun host UID u GID auf 33:33 zu 
Container 33:33 - das entzieht nun aber auf dem Container dem User 33:33 
die rechte auf deren eigenen Struktur (NGINX startet nicht da ihm 
Zugriffsrechte auf seine eigene Daten verwehrt wird.

Aber gut, da kann ich ja im Container nur für die Freigabe einen Nutzer 
anlegen z.b. 34:34 und diesen in die Gruppe 33 aufnehmen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.