Verständnisfragen zu unprivileged LXC und lxc.idmap für Schreibzugriff auf mp

sash

New Member
May 2, 2020
8
4
3
41
Hallo zusammen,

ich stehe irgendwie auf dem Schlauch... ich verstehe nicht, wie ich von einem unpriviligierten LXC-Container auf ein in der Config gemountetes Verzeichnis schgreibend zugreifen kann. Mir ist schon klar, wie es aktuell technisch funktioniert, also das zur User- und Gruppen ID 100000 addiert werden, aber mir ist nicht klar, was die Optionen, die ich unter https://pve.proxmox.com/wiki/Unprivileged_LXC_containers gefunden habe genau erwirken.

Meine Config sieht wie folgt aus:

Code:
arch: amd64
cores: 2
hostname: nas
memory: 1024
mp0: /mnt/tank_hdd1/workspace,mp=/mnt/workspace
nameserver: 10.10.10.254
net0: name=eth0,bridge=vmbr0,firewall=1,gw=10.10.10.254,hwaddr=A6:10:39:1B:A9:53,ip=10.10.10.238/24,ip6=dhcp,type=veth
ostype: debian
rootfs: local_SSD_VM:subvol-100-disk-0,size=12G
searchdomain: sash.de
swap: 1024
unprivileged: 1
lxc.idmap = u 0 100000 65536
lxc.idmap = g 0 100000 65536

insbesondere den letzten Teil habe ich eingefügt, weil ich annahm, dass dadurch der user mit der ID 1000 (Gruppe 1000) auf 101000 gemappt wird, welcher im LXC vorhanden ist.

Erreichen möchte ich letztlich nur, dass der User 1000 auf /mnt/workspace schreiben kann, ggf. auch noch User 1001 und 1002 etc.

Wenn ich die Rechte manuell, auf dem Proxmox Host auf User/Guppe 101000 setze funktioniert der Schriebzugriff problemlos.

In /etc/subuid und /etc/subgid steht folgendes:
Code:
sash:100000:65536
root:100000:65536

Wo ist mein Denkfehler?

Im Voraus besten Dank!
sash
 
Last edited:
lxc.idmap = u 0 100000 65536
lxc.idmap = g 0 100000 65536

die zeile sagt aus dass die uid '0' (im ct) auf 100000 (am host) gemappt wird (1 auf 100001, etc..) nicht umgekehrt

die lösung mit
Wenn ich die Rechte manuell, auf dem Proxmox Host auf User/Guppe 101000 setze funktioniert der Schriebzugriff problemlos.
ist schon richtig
 
Vielen Dank für Deine Antwort! Was genau bedeutet denn die 3. Zahl, wenn es so ist, wie Du es beschreibst?
lxc.idmap = u 0 100000 65536

Müsste das dann nicht auch für die 101000 gelten? Ist der Weg mit der Berechtigung auf 101000 nun der richtige, oder Mapping über lxc.idmap?
 
Vielen Dank für Deine Antwort! Was genau bedeutet denn die 3. Zahl, wenn es so ist, wie Du es beschreibst?
lxc.idmap = u 0 100000 65536

Müsste das dann nicht auch für die 101000 gelten? Ist der Weg mit der Berechtigung auf 101000 nun der richtige, oder Mapping über lxc.idmap?
Das letzte ist die Anzahl der UIDs bzw die Größe des Bereichs. Es mappt 65536 UIDs, also von 0 bis 0 + 65536 = 65536 auf 100000 bis 100000 + 65536 = 165536.
Es wird also der Bereich 0 bis 65536 auf 100000 bis 165536 gemappt.

Wenn da echt nur UID 1000-1002 nicht umgemappt werden sollen, solltest du auch nur die 3 UIDs nicht mappen, was dann die Sicherheit erhöht:
Code:
# UID/GID mappen von 0-999 auf 100000-100999
lxc.idmap = u 0 100000 1000
lxc.idmap = g 0 100000 1000
# UID/GID mappen von 1000-1002 auf 1000-1002
lxc.idmap = u 1000 1000 3
lxc.idmap = g 1000 1000 3
# UID/GID mappen von 1003-65535 auf 101003-165535
lxc.idmap = u 1003 101003 64533
lxc.idmap = g 1003 101003 64533
 
Last edited:
Auch Dir vielen Dank für Deine Antwort. Leider bin ich jetzt erst dazu gekommen es auszuprobieren. Ich habe Deinen Code einmal in die Config eingetragen, damit startet der Container allerdings nicht mehr...

Code:
()
lxc_map_ids: 2816 newuidmap failed to write mapping "newuidmap: uid range [1000-1003) -> [1000-1003) not allowed": newuidmap 21916 0 100000 1000 1000 1000 3 1003 101003 64533
lxc_spawn: 1683 Failed to set up id mapping.
__lxc_start: 1950 Failed to spawn container "100"
TASK ERROR: startup for container '100' failed

Ich bin mir aber auch noch nicht sicher, ob ich es nun (endlich) verstehe. Ich habe zum Test mich auf eine UID und GID beschränkt:

Code:
unprivileged: 1
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 64533
lxc.idmap: g 1001 101001 64533

etc.subuid:
Code:
sascha:100000:65536
root:100000:65536
root:1000:1

und /etc/subguid
Code:
sascha:100000:65536
root:100000:65536
root:1000:1

Jetzt startet der Container - allerdings funktioniert ssh dann nicht mehr, eine Verbindung von außen klappt nicht mehr, das Mapping mit der ID ist aber "gut", ich kann mit uid und gid 1000 auf das Mapping schreiben.

Scheinbar hat das aber irgendwelche Auswirkung auf z.B. den ssh-server.

Code:
root@nas:~# systemctl status sshd.service
* ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-11-21 11:06:20 CET; 20s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 2028 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 2029 (sshd)
    Tasks: 1 (limit: 4915)
   Memory: 1.9M
   CGroup: /system.slice/ssh.service
           `-2029 /usr/sbin/sshd -D

Nov 21 11:06:20 nas systemd[1]: Starting OpenBSD Secure Shell server...
Nov 21 11:06:20 nas sshd[2029]: Server listening on 0.0.0.0 port 22.
Nov 21 11:06:20 nas sshd[2029]: Server listening on :: port 22.
Nov 21 11:06:20 nas systemd[1]: Started OpenBSD Secure Shell server.
Nov 21 11:06:31 nas sshd[2044]: fatal: setgroups: Invalid argument [preauth]
Nov 21 11:06:32 nas sshd[2046]: fatal: setgroups: Invalid argument [preauth]

"Eigentlich" will ich nur mit UID 1000, 1001 und der GID 1002 auf bestimmte Mappings schrieben können... :-/
 
Last edited:
  • Like
Reactions: masterloc
lxc.idmap: u 1001 101001 64533
lxc.idmap: g 1001 101001 64533
Da solltest du dann aber ganz hinten "64535" statt "64533" eingeben, sonst bleiben 65534 und 65535 ungemappt und Linux nutzt wohl normal 0 bis 65535.

Sonst sah das für mich ok aus.

Wenn du 1000 bis 1002 mappen willst sollten aber in der /etc/subuid und /etc/subgid (du hast subguid geschrieben, ist das nur ein Tippfehler im Forum?) statt "root:1000:1" dort "root:1000:3" stehen, damit der uid/gid 1000+1001+1002 die Rechte gibt. "root:1000:1" ist korrekt, wenn du nur uid/gid 1000 haben willst.

()
lxc_map_ids: 2816 newuidmap failed to write mapping "newuidmap: uid range [1000-1003) -> [1000-1003) not allowed": newuidmap 21916 0 100000 1000 1000 1000 3 1003 101003 64533
lxc_spawn: 1683 Failed to set up id mapping.
__lxc_start: 1950 Failed to spawn container "100"
TASK ERROR: startup for container '100' failed
Sieht für mich so aus, als ob er versucht 1000-1003 zu mappen und sich dann später mit dem 1003 - 65535 in die quere kommt.
"lxc.idmap = u 1000 1000 3" sollte eigentlich 3 uid ab 1000 mappen, also uid 1000, 1001 und 1002.
 
Last edited:
  • Like
Reactions: masterloc and sash
Du hast vollkommen Recht - 64535 IDs sind wohl für SSH notwendig - hier nun meine Config, damit funktioniert für die UID/GID 100-1003 das schreiben auf die Datenträger.

Code:
unprivileged: 1
lxc.idmap: u 0 100000 1000
lxc.idmap: g 0 100000 1000
lxc.idmap: u 1000 1000 3
lxc.idmap: g 1000 1000 3
lxc.idmap: u 1003 101001 64532
lxc.idmap: g 1003 101001 64532

letztes Problem - ich erhalte Fehler beim Backup:

Code:
INFO: starting new backup job: vzdump --compress zstd --mailnotification failure --all 1 --quiet 1 --mailto s.klapprott@outlook.de --storage local_HDD_backup --mode stop
INFO: filesystem type on dumpdir is 'zfs' -using /var/tmp/vzdumptmp29578_100 for temporary files
INFO: Starting Backup of VM 100 (lxc)
INFO: Backup started at 2020-11-23 03:30:01
INFO: status = running
INFO: backup mode: stop
INFO: ionice priority: 7
INFO: CT Name: nas.sk2it.de
INFO: including mount point rootfs ('/') in backup
INFO: excluding bind mount point mp0 ('/mnt/workspace') from backup (not a volume)
INFO: excluding bind mount point mp1 ('/mnt/tm') from backup (not a volume)
INFO: excluding bind mount point mp2 ('/mnt/backup') from backup (not a volume)
INFO: stopping vm
INFO: creating vzdump archive '/mnt/tank_hdd1/backups/backup/proxmox/dump/vzdump-lxc-100-2020_11_23-03_30_01.tar.zst'
INFO: tar: ./home/sascha/.gnupg: Cannot open: Permission denied
INFO: tar: ./home/sascha/.config: Cannot open: Permission denied
INFO: tar: ./home/sascha/.local: Cannot open: Permission denied
INFO: tar: ./home/sascha/.bash_history: Cannot open: Permission denied
INFO: tar: ./home/sascha/.cache: Cannot open: Permission denied
INFO: Total bytes written: 1020774400 (974MiB, 76MiB/s)
INFO: tar: Exiting with failure status due to previous errors
INFO: restarting vm
INFO: guest is online again after 17 seconds
ERROR: Backup of VM 100 failed - command 'set -o pipefail && lxc-usernsexec -m u:0:100000:1000 -m g:0:100000:1000 -m u:1000:1000:3 -m g:1000:1000:3 -m u:1003:101001:64532 -m g:1003:101001:64532 -- tar cpf - --totals --one-file-system -p --sparse --numeric-owner --acls --xattrs '--xattrs-include=user.*' '--xattrs-include=security.capability' '--warning=no-file-ignored' '--warning=no-xattr-write' --one-file-system '--warning=no-file-ignored' '--directory=/var/tmp/vzdumptmp29578_100' ./etc/vzdump/pct.conf ./etc/vzdump/pct.fw '--directory=/mnt/vzsnap0' --no-anchored '--exclude=lost+found' --anchored '--exclude=./tmp/?*' '--exclude=./var/tmp/?*' '--exclude=./var/run/?*.pid' ./ | zstd --rsyncable '--threads=1' >/mnt/tank_hdd1/backups/backup/proxmox/dump/vzdump-lxc-100-2020_11_23-03_30_01.tar.dat' failed: exit code 2
INFO: Failed at 2020-11-23 03:30:18

Der Backuptask kann wohl nicht auf das HOME-Verzeichnis zugreifen und dieses Bakuppen... gibt es dafür auch noch einen Trick?
 
  • Like
Reactions: masterloc
lxc.idmap: u 0 100000 1000
lxc.idmap: g 0 100000 1000
lxc.idmap: u 1000 1000 3
lxc.idmap: g 1000 1000 3
lxc.idmap: u 1003 101001 64532
lxc.idmap: g 1003 101001 64532
Die beiden Zeilen...
Code:
lxc.idmap: u 1003 101001 64532
lxc.idmap: g 1003 101001 64532
...würden 1003 bis 65535 auf 101001 bis 165533 mappen. Schöner wäre da...
Code:
lxc.idmap: u 0 100000 1000
lxc.idmap: g 0 100000 1000
lxc.idmap: u 1000 1000 3
lxc.idmap: g 1000 1000 3
lxc.idmap: u 1003 101003 64532
lxc.idmap: g 1003 101003 64532
...damit von 1003 bis 65535 auf 101003 bis 165535 gemappt wird.


Welche UID hat der User "sascha" dessen home zu sichern willst?
 
  • Like
Reactions: masterloc
Stimmt, das sollte aber nicht das Problem hinischtlich des Backups darstellen, oder?

User sascha hat die ID 1000/ GID 1000
 
hat noch jemand einen Hinweis hinsichtlich des Backups? Ich habe momentan da keinen Ansatz :-/
 
Ich weiß da leider auch nicht weiter. Was gibt "ls -a /home/sascha/" dir aus?
Und was genau hast du in die etc.subuid und etc.subgid geschrieben?
 
Dynke für Deinen Input!

Code:
sascha@nas:~$ ls -l /home/
total 11
drwxr-xr-x 6 nobody nogroup 10 Nov 18 13:51 sascha

es steht dort die ID 101000:101000 drin... ich habe das nun auf die 1000:1000 gesetzt und das Backup läuft auch! Vielen Dank @Dunuin!

Code:
INFO: Finished Backup of VM 100 (00:00:13)
INFO: Backup finished at 2020-11-25 23:55:40
INFO: Backup job finished successfully
TASK OK
 
Hi, ich habe hier das gleich Problem. Mein Home-Verzeichnis gehört nobody:nobody.
Was hast du denn genau auf 1000:100 gesetzt und wie hast du das genau gemacht?
Chown 1000:1000 auf das Home-Verzeichnis geht nicht. Auch als Root nicht!
Ansonsten habe ich Zugriff auf den Mountpoint aber halt nicht auf das Home-Verzeichnis.
 
Chown 1000:1000 auf das Home-Verzeichnis geht nicht. Auch als Root nicht!
Ansonsten habe ich Zugriff auf den Mountpoint aber halt nicht auf das Home-Verzeichnis.
Um die wirklichen Rechte in einem unprivilegierten LXC bearbeiten zu können musst du das Dateisystem auf dem PVE Node mounten. Siehe pct mount <VMID> und pct unmount <VMID> Befehle. Dann kannst du das Home-Verzeichnis z.B. von 101000:101000 auf 1000:1000 ändern über chown.
 
Last edited:
  • Like
Reactions: masterloc
Um die wirklichen Rechte in einem unprivilegierten LXC bearbeiten zu können musst du das Dateisystem auf dem PVE Node mounten. Siehe pct mount <VMID> und pct unmount <VMID> Befehle. Dann kannst du das Home-Verzeichnis z.B. von 101000:101000 auf 1000:1000 ändern über chown.
Sehr geil! Vielen Dank für den Tipp!!!
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!