Dossier partagé entre l'invité QEMU Windows et l'hôte Linux

24

Dans le passé, j'ai utilisé Virtual Box qui a un très bon support pour partager un dossier sur l'hôte avec un invité Windows. Je recherche des fonctionnalités similaires pour QEMU.

La documentation suggère d'exposer un serveur Samba fonctionnant quelque part sur le réseau, ou d'utiliser le -net user,smb=/path/to/folderpour démarrer un serveur samba.

Je n'ai pas eu de chance avec l' -net user,smboption de QEMU. Il ne fait que démarrer smbd(ce qui entre en conflit avec un autre service s'exécutant localement en raison d'un conflit de port). Il suffit de dire que cela est inutilisable, surtout avec plusieurs invités à l'esprit. (Pour Linux, -virtfs(Plan 9) peut être utilisé pour un partage de dossier facile.)

D'autres problèmes avec Samba est qu'il ne se limite pas au partage de dossiers, il fait également le partage d'imprimantes, le mappage d'utilisateurs et tout ce qui est différent. Tout ce dont j'ai besoin est de partager un (ou plusieurs?) Dossiers avec l'invité Windows.

Existe-t-il une autre méthode de partage de dossiers pour QEMU qui fonctionne avec un invité Windows?

Ou existe-t-il un moyen de configurer Samba pour se limiter à un ensemble très limité de fonctionnalités et l'intégrer dans QEMU? Cela devrait:

  • Tout le monde sur le réseau ne devrait pas pouvoir accéder au dossier.
  • utilisateurs locaux inclus (si possible).
  • Ne fournit pas d'autres fonctionnalités (partage d'imprimante).
  • Cas d'utilisation: exposez un répertoire git à Windows, compilez-le dans Windows et utilisez Linux pour l'analyse.
  • Avoir une vitesse acceptable, Windows utilise virtio-scsi et virtio-net.
  • Pouvoir partager un dossier d'un hôte Linux avec un invité Windows 7.
Lekensteyn
la source
une question plus
indépendante du
1
@CiroSantilli 包子 露 宪 六四 事件 法轮功 Cette question est balisée avec Linux où -virtfsfonctionne très bien (voir aussi cette question), mais je ne connais pas de pilote 9p pour Windows.
Lekensteyn
oui, ne dis pas que c'est dupe ou quoi que ce soit, juste lié.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

14

Service Samba intégré de QEMU

L' -net user,smboption qui ne fonctionnait pas était due à une incompatibilité avec les nouvelles versions de Samba (> = 4). Ceci est corrigé dans QEMU v2.2.0 et plus récent avec ces modifications:

(Debian a rétroporté les deux derniers correctifs vers 2.1 + dfsg-6 qui est présent dans Jessie.)

Usage

Vous pouvez exporter un dossier comme \\10.0.2.4\qemulors de l'utilisation du réseau utilisateur:

qemu-system-x86_64 \
    -net user,smb=/absolute/path/to/folder \
    -net nic,model=virtio \
    ...

Lorsque QEMU est démarré avec succès avec ces options, un nouveau /tmp/qemu-smb.*-*/répertoire sera créé contenant un smb.conf. Si vous êtes assez rapide, ce fichier peut être modifié pour rendre les chemins en lecture seule ou exporter plus de dossiers.

Mode de fonctionnement

Le démon samba est exécuté chaque fois que les ports 139 ou 445 sont accessibles via un réseau "utilisateur". La communication se fait via une entrée / sortie / erreur standard du processus smbd. C'est la raison pour laquelle les nouveaux démons ont échoué, il écrirait son message d'erreur dans le canal au lieu des messages de protocole.

En raison de cette méthode de fonctionnement, le démon n'écoutera pas sur les ports hôtes et ne sera donc accessible qu'à l'invité. Ainsi, les autres clients du réseau et même les utilisateurs locaux ne peuvent pas accéder aux dossiers à l'aide de ce démon.

Étant donné que le partage d'imprimante QEMU v2.2.0 est complètement désactivé via la configuration de samba, une autre inquiétude a disparu ici.

La vitesse dépend de la carte réseau, il est donc recommandé d'utiliser le pilote virtionetkvm sous Windows.

Notez également que le démon est exécuté par son chemin absolu (généralement /usr/sbin/smbd) comme spécifié lors de la compilation (en utilisant l' --smbdoption). Chaque fois que vous devez essayer un nouveau binaire ou interposer smbd, vous devrez modifier le fichier à ce chemin.

Autres mises en garde

Les exécutables ( *.exe) doivent être exécutables sur l'hôte ( chmod +x FILE) pour que l'invité dispose des autorisations d'exécution. Pour permettre l'exécution de n'importe quel fichier, ajoutez l' acl allow execute always = Trueoption à un partage.

Exemple de configuration smb.conf en lecture seule qui permet l'exécution de n'importe quel fichier (basé sur QEMU v2.2.0):

...
[qemu]
path = / home / peter / windows 
lecture seule = oui
invité ok = vrai
forcer l'utilisateur = peter 
acl permettre l'exécution toujours = vrai
Lekensteyn
la source
J'ai utilisé cette option, j'ai besoin des deux accès en lecture-écriture. J'ai redémarré le service qemu et mis à jour la conf en conséquence. Je ne vois rien dans les dossiers réseau de l'explorateur dans l'invité Windows. Comment puis-je trouver l'adresse IP de l'hôte (je suppose que c'est 10.0.2.4) dans ce cas ici? Mon IP invité pour cette carte réseau était 10.0.2.15. @Lekensteyn - des idées?
tsar2512
@ tsar2512 Habituellement, je vais dans l'Explorateur, puis j'utilise Map Network Drive pour assigner une lettre à \\10.0.2.4\qemu. Dernièrement, j'ai sauté cette étape et ouvert ledit chemin directement à partir de la boîte de dialogue Exécuter.
Lekensteyn
6

En 2018, un moyen simple de partager un dossier entre un hôte Linux et une machine virtuelle Windows est d' activer RDP dans Windows guestet de se connecter à vmavec le client Remmina Remote Desktop et d'activer un dossier partagé:

Paramètres Remmina RDP

Cela crée un dossier sous Ce PC ( dossier partagé sur Linuxhostname ) et un \\tsclient\shared-folder-namepartage réseau à l'intérieur du guest. Vous pouvez également mapper un lecteur réseau:

Partages de dossiers invités Windows

  • Cette solution ne nécessite passamba d'être en cours d'exécution.

  • Testé sous libvirt/ virt-managermais devrait fonctionner avec n'importe quelle virtualisation.

Stuart Cardall
la source
Technique intéressante, la redirection du système de fichiers semble être une fonctionnalité RDP. L' xfreerdp /drive:shared-folder-name,/home/user/sharedoption devrait également fonctionner. Références de code source: configuration Remmina , le code de la bibliothèque freerdp .
Lekensteyn
Est-ce une solution sûre sans aucun danger pour des attaquants potentiels?
Dave