Sous Qemu, montage d'un répertoire partagé avec les mêmes permissions que l'hôte

Lien :
https://dev.to/franzwong/mount-share-folder-in-qemu-with-same-permission-as-host-2980

1/ Sous le système hôte, vérifier les permissions de l'utilisateur par défaut.

util01@station40:~$ id
uid=1000(util01) gid=33(www-data) groups=33(www-data),4(adm),20(dialout),24(cdrom),27(sudo),30(dip),46(plugdev),109(kvm),120(lpadmin),136(libvirt),998(docker),999(sambashare)

2/ Sur le système hôte, créer un répertoire partagé.

  • Création d'un répertoire partagé :
util01@station40:~$ mkdir -p shared_dir
  • Créé un fichier texte :
util01@station40:~$ cd shared_dir/
util01@station40:~/shared_dir$ echo "testtest" >> test.txt
util01@station40:~/shared_dir$ ls -l
total 4
-rw-r--r-- 1 util01 www-data 9 août  20 10:34 test.txt
util01@station40:~/shared_dir$ 

3/ Paramétrage de Qemu pour le lancement du système invité.

Ajouter :

-virtfs local,path=/home/util01/shared_dir,mount_tag=shared_dir,security_model=mapped-xattr

Soit :

#!/bin/bash

MACADDRESS=`printf 'DE:AD:BE:EF:%02X:%02X' $((RANDOM%256)) $((RANDOM%256))`

echo "Initialize Host Machine"

H_DESKTOP=lubuntu
H_DISTRIB=lubuntu
H_VERSION=2204
H_PROC=64

echo "Initialize Guest Hardware"

RAM=4096
CORE=2

echo "Configure Virtual Machine"

PART=part2

QEVER=9.0.2

G_DISTRIB=lubuntu
G_VERSION=2204
G_PROC=64
TAP=0
APP=base
VDA=vda

echo "Launch Virtual Machine"

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:../host/$H_DISTRIB/$H_VERSION/$H_PROC/qemu/$QEVER/lib/:../host/$H_DISTRIB/$H_VERSION/$H_PROC/qemu/$QEVER/qemu-$QEVER/pc-bios/ \
    ../host/$H_DISTRIB/$H_VERSION/$H_PROC/qemu/$QEVER/qemu-$QEVER/build/qemu-system-x86_64 \
    -drive file=../../$PART/guest/$G_DISTRIB/$G_VERSION/$G_PROC/$APP/vd/$VDA.qcow2,format=qcow2,index=0,media=disk \
    -enable-kvm  -m $RAM \
    -display sdl,window-close=off \
    -device AC97 \
    -smp $CORE \
    -rtc base=localtime \
    -netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no \
    -device e1000,netdev=mynet0,mac=52:55:00:d1:55:01 \
    -bios ../host/$H_DISTRIB/$H_VERSION/$H_PROC/qemu/$QEVER/qemu-$QEVER/pc-bios/bios-256k.bin \
    -name Lubuntu2204 \
    -virtfs local,path=/home/util01/shared_dir,mount_tag=shared_dir,security_model=mapped-xattr

4/ Sur le système invité, création d'un utilisateur .

  • Création d'un utilisateur :
util01@station01:~$ sudo useradd -m util02
  • Assigner un mot de passe à l'utilisateur :
util01@station01:~$ sudo passwd util02
  • Vérification des permissions :
util02@station01:~$ id
uid=1001(util02) gid=1001(util02) groups=1001(util02)

5/ Sur le système invité, créer un point de montage.

  • Créer un répertoire de partage :
util02@station02:~$ mkdir -p shared
  • Monter le répertoire partagé :
util02@station02:~$ sudo mount -t 9p -o trans=virtio,version=9p2000.L shared_dir ~/shared
  • Vérification :
util02@station02:~$ ls -l
total 4
-rw-r--r-- 1 util01 www-data 9 août  20 10:34 test.txt
util02@station01:~$ ls -l -d ~/shared/
drwxr-xr-x 2 util01 www-data 4096 août  20 10:34 /home/util02/shared/

6/ Test.

  • Sous l'invité :
util02@station01:~$ cd shared/
util02@station01:~/shared$
util02@station01:~/shared$ echo "test01test01" >> test01.txt
bash: test01.txt: Permission denied

7/ Installation de bindfs.

util02@station01:~$ sudo apt-get install bindfs

8/ Création de la correspondance entre les permissions du système hôte et du système invité.

bindfs --map=<uid de l'hôte>/<uid de l'invité>:@<nom du groupe de l'hôte>/@<guid de l'invité> ~/shared ~/shared

Soit :

util02@station01:~$ sudo bindfs --map=1000/1001:@www-data/@1001 ~/shared ~/shared

9/ Test.

  • Sous l'invité, création d'un fichier et vérification :
util02@station01:~$ ls -l -d ~/shared/
drwxr-xr-x 2 util02 util02 4096 août  20 11:31 /home/util02/shared/
util02@station01:~$ echo "test01test01" >> ~/shared/test01.txt
util02@station01:~$ ls -l ~/shared/test01.txt 
-rw-rw-r-- 1 util02 util02 13 août  20 11:44 /home/util02/shared/test01.txt
  • Vérification sur l'hôte :
util01@station40:~$ ls -l ~/shared_dir/
total 12
-rw------- 1 util01 www-data 13 août  20 11:44 test01.txt
-rw-r--r-- 1 util01 www-data  9 août  20 10:34 test.txt