Table des matières

Mount bind dans un conteneur LXC

context: Comment monter un disque USB dans un conteneur LXC avec un uid et gid spécifique ?

Il faut passer par 2 étapes.

1 -Monter le disque USB dans le serveur proxmox

Repérer le disque USB avec

fdisk -l

Ici c'est /dev/sdb1

...

Disk /dev/sdb: 1.82 TiB, 2000347734016 bytes, 3906929168 sectors
Disk model: BigQuadra
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 567956CA-9176-418A-BB55-4B419812D0E3

Device     Start        End    Sectors  Size Type
/dev/sdb1   2048 3906928639 3906926592  1.8T Linux filesystem

...

Récuperer l'UUID

root@proxmox:~# blkid /dev/sdb1
/dev/sdb1: LABEL="Sauv_Docs" UUID="ffd6a8e4-80ef-48a4-9479-c2a4e1e4c7c4" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="0c701f63-ac29-4bb3-9670-c6acf2a4fc53"

Ajouter dans fstab la ligne de montage. Ici je monte le disque sur /mnt/usb2To.

UUID=ffd6a8e4-80ef-48a4-9479-c2a4e1e4c7c4 /mnt/usb2To ext4 defaults 0 2

exécuter le montage

mount -a

1bis- Monter un partage NFS Truenas

Pour que le montage soit accéssible par un UID particulier dans le conteneur LXC, il faut dans un premier temps attribuer dans Truenas le partage NFS (dataset) à root.

Vérifiez sur Truenas que dans le partage NFS (Utilisation et pas dans les Autorisations), options avancées de “Modifier le partage NFS”:

Utilisateur Mapall : root

Groupe Mapall : root

Ici le montage NFS se fera dans /mnt/myNAS

en ligne de commande

mount -t nfs4 mynas:/mnt/Solo/nextcloudSync /mnt/myNAS -o rw,noatime

depuis fstab

mynas:/mnt/Solo/nextcloudSync /mnt/myNAS nfs rw,noatime 0 0

Par défaut root sera le propriétaire du montage (paramétré par truenas).

2-faire un montage "bind" dans le conteneur unprivileged avec un mappage uid.

D'abord vérifiez que le montage appartient à root

ls -l /mnt/myNAS

Le conteneur LXC doit être éteint. Sans mappage uid et gid, le montage dans le conteneur sera attribué à nobody et meme root du conteneur ne pourra pas changer le propriétéaire.

Par défaut un conteneur LXC dansp roxmox est en mode “unprivileged”. Dans ce cas tous les UID dans le conteneur sont mappés à un UID particulier dans le hote proxmox.

uid_mappé=100000 + uid_conteneur

Coté proxmox, l'uid 33 de www-data dans le conteneur sera mappé à l'uid 100033. Si on fait un montage d'une ressource externe au conteneur via un montage bind, quelque soit le propriétaire coté proxmox, il sera attribué à “nobody” (uid=65534) avec le masque 755. Le root du conteneur ne pourra pas faire de chmod ou chown.

Pour attribuer le montage NFS ou USB à www-data du conteneur il faut modifier le propriétaire sur l'hote Proxmox avant qu'il soit monté dans le conteneur.

Le partage NFS est donné à root (vu plus haut) dans l'hote comme pour le montage USB. L'UID de www-data dans le conteneur vu par l'hote est 100033. On modifie le propriétaire.

chown -R 100033:100033 /mnt/myNAS

Remarque: en faisant cela on ne modifie pas le MapAll coté NFS Truenas mais les ACL dans les Autorisations.

Pour monter le point de montage du serveur dans le conteneur le plus simple est de l'indiquer dans le fichier de configuration du conteneur, ici avec id 103.

root@proxmox:~# vi /etc/pve/lxc/103.conf

on ajoute cette ligne pour le cas du montage NFS

mp0: /mnt/myNAS,mp=/mnt/myNAS

mp est le point de montage dans le conteneur.

pour que www-data soit propriétaire du point de montage il faut l'indiquer dans le le fichier de configuration du conteneur egalement en ajoutant ces lignes:

lxc.idmap: u 0 100000 33
lxc.idmap: g 0 100000 33
lxc.idmap: u 33 100033 1
lxc.idmap: g 33 100033 1
lxc.idmap: u 34 100034 65502
lxc.idmap: g 34 100034 65502

Si apt ne fonctionne pas ajouter:

lxc.idmap: g 65534 165534 1, pour que apt fonctionne dans LXC.

puis vérifier dans

root@proxmox:~# vi /etc/subuid

la présence de cette ligne uniquement:

root:100000:65536

et dans

root@proxmox:~# vi /etc/subgid

la présence de cette ligne uniquement:

root:100000:65536

Démarrez le conteneur. En cas de probleme, on peut dans le shell de proxmox démarrer le conteneur avec

root@proxmox:~# lxc-start -F -n 103

Dans le conteneur LXC, vérifiez le propriétaire du montage bind

ls -l /mnt/myNAS

puis testez que root peut écrire dedans

echo test>> /mnt/myNAS/test.txt

source:

https://pve.proxmox.com/wiki/Unprivileged_LXC_containers