Weiß ich nicht genau. Aber der LXC mapped user muss auch unter Proxmox angelegt werden:
Bash:
# anlegen der Gruppe und des Benutzers "vm-user1" in Proxmox
# sollte die ID 1000 bekommen, sofern die noch nicht vergeben ist, sonst musst du den Rest anpassen
groupadd vm-user1 && \
adduser --home /rpool/data/vm-user1 \
--gecos "" \
--quiet \
--disabled-login \
--ingroup vm-user1 \
vm-user1
# root im LXC wird auf id 1000 im Host gemapped
# Also wenn du dich als root im LXC anmeldest und eine Datei anlegst, ist das so, als hättest du die in Proxmox mit dem User 1000 angelegt
grep -q 'root:1000:1' "/etc/subuid" || cat << 'EOF' >> "/etc/subuid"
root:1000:1
EOF
# gleiches für die Gruppe 1000
grep -q 'root:1000:1' "/etc/subgid" || cat << 'EOF' >> "/etc/subgid"
root:1000:1
EOF
Jetzt hat /rpool/data/vm-user1 die entsprechenden Rechte und das UID/GID-Mapping.
Nun musst du in der LXC-Konfigurationsdatei noch das Mapping anlegen. Auch in Proxmox:
Code:
# z.B. /etc/pve/lxc/200.conf, wenn die LXC ID 200 ist
mp0: /rpool/data/vm-user1,mp=/mnt/
# ...
lxc.idmap: u 0 100000 1000
lxc.idmap: g 0 100000 1000
lxc.idmap: u 1000 1000 1
lxc.idmap: g 1000 1000 1
lxc.idmap: u 1001 101001 64535
lxc.idmap: g 1001 101001 64535
Dann den LXC neu starten, dich als root im LXC anmelden und zum Testen mal eine Datei in /mnt anlegen:
Das sollte gehen. Wenn du jetzt unter Proxmox ein
Bash:
ls -lsa /rpool/data/vm-user1
machst, sollte da eine Datei test.txt liegen, die dem Benutzer
100000 gehört (der auf dem Host nicht existiert).
Meldest du dich jetzt im LXC als root an und wechselst den Benutzer vm-user1
Bash:
# IM LXC
su - vm-user1
touch /mnt/test2.txt
sollte da eine Datei test2.txt liegen, die dem Benutzer vm-user1 gehört (sowohl im LXC, als auch in Proxmox).
Ergebnis:
- Führst du den Docker-Container als root aus (was man aus Sicherheitsgründen eher nicht machen sollte, aber manchmal wird es nicht anders unterstützt), werden dessen Dateien als der Nutzer 100000 gespeichert und können vom docker geschrieben und gelesen werden, haben aber keine root-Rechte auf dem Proxmox-Host (so wie es sein soll)
- Führst du den Docker-Container als vm-user1 aus, greift das Mapping und die Dateien erhalten die Berechtigungen auf User-Ebene
- Fazit: Halbwegs brauchbare Sicherheit trotz voller Funktionalität
erstmal vielen vielen Dank für diese massiv ausführliche antwort!
leider hänge ich erneut und es geht nicht :/
1. LXC komplett frisch aufgesetzt mit dem script von tteck, docker-compose und portainer erstellen lassen, feste ip vergeben, läuft.
2. adduser docker-user (statt vm-user1)
3. docker-user in sudo und docker group gepackt
auf LXC
4. login möglich, passt.
5. auf PVE
Bash:
# anlegen der Gruppe und des Benutzers "vm-user1" in Proxmox
# sollte die ID 1000 bekommen, sofern die noch nicht vergeben ist, sonst musst du den Rest anpassen
groupadd docker-user && \
adduser --home[I][B] /[COLOR=rgb(226, 80, 65)]rpool[/COLOR]/[/B][/I]data/[B]docker[/B] \
--gecos "" \
--quiet \
--disabled-login \
--ingroup docker-user \
docker-user
dann hab ich deine zeilen code in bash ausgeführt, da passiert nix, habs abgebrochen mit ctrl+c
Bash:
grep -q 'root:1000:1' "/etc/subgid" || cat << 'EOF' >> "/etc/subgid"
root:1000:1
EOF
aber die subuid und subgip beinhalten jetzt eine zeile für den docker-user
Bash:
root@pve:~# cat /etc/subuid
root:1000:1
root:100000:65536
docker-user:165536:65536
gibts jetzt die neue docker-user zeile. verstehe ich nicht.
ich hatte vorher auf PVE aber auch
nicht aus subuid und subgid die
root:1000:1
zeile gelöscht.
wenn ich jetzt als root im lxc eine datei anlege permission dennied
Bash:
root@docker:/mnt# touch /mnt/test.txt
touch: cannot touch '/mnt/test.txt': Permission denied
ich glaub ich steh aufm schlauch :/
brauchen meine subuid und subgid im PVE die docker-user id information?
ist das problem ggf. das mein mnt punkt falsch ist?
/
vm_tank/data/
docker
/vm_tank/data ist dabei mein zfs mirror (vm-tank) als directory im datacenter eingebunden
in meiner pve shell ist mir gerade aufgefallen, dass es den pfad
/rpool/data/docker/
gibt
, ich habe meinen user falsch angelegt auf pve.
jetzt komme ich leidernicht weiter. user gelöscht, verzeichnis gelöscht, gruppe kann ich nicht löschen, user neu anlegen zu bestehender gruppe macht er nicht.
Bash:
root@pve: deluser docker-user
Removing crontab ...
Removing user `docker-user' ...
Done.
root@pve: rm -r rpool/
root@pve: rm -r /vm_tank/data/docker
root@pve: groupadd docker-user && \
adduser --home /vm_tank/data/docker \
--gecos "" \
--quiet \
--disabled-login \
--ingroup docker-user \
docker-user
groupadd: group 'docker-user' already exists
root@pve: delgroup docker-user
Removing group `docker-user' ...
groupdel: cannot remove the primary group of user 'docker-user'
delgroup: `/sbin/groupdel docker-user' returned error code 8. Exiting.
root@pve: cat /etc/passwd
docker-user:x:1000:1000:,,,:/vm_tank/data/docker:/usr/sbin/nologin
root@pve:/# ls /vm_tank/data/docker
ok user nochmal gelöscht, nochmal neu angelegt, jetzt gibts /vm_tank/data/docker
Bash:
root@pve:~# ls -lsa /vm_tank/data/docker
total 24
9 drwx------ 2 docker-user docker-user 7 Mar 23 18:00 .
1 drwxr-xr-x 5 root root 5 Mar 23 17:57 ..
5 -rw-r--r-- 1 docker-user docker-user 220 Mar 23 17:57 .bash_logout
5 -rw-r--r-- 1 docker-user docker-user 3526 Mar 23 17:57 .bashrc
5 -rw-r--r-- 1 docker-user docker-user 807 Mar 23 17:57 .profile
1 -rw-r--r-- 1 docker-user docker-user 0 Mar 23 18:00 test2.txt
1 -rw-r--r-- 1 100000 100000 0 Mar 23 17:58 test.txt
jetzt gehts. danke!