context: Comment monter un disque USB dans un conteneur LXC avec un uid et gid spécifique ?
Il faut passer par 2 étapes.
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
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).
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: