Freigegebener Ordner zwischen QEMU-Windows-Gast und Linux-Host

24

In der Vergangenheit habe ich Virtual Box verwendet, die sehr gute Unterstützung für die Freigabe eines Ordners auf dem Host für einen Windows-Gast bietet. Ich suche nach ähnlichen Funktionen für QEMU.

In der Dokumentation wird vorgeschlagen, einen Samba-Server verfügbar zu machen, der irgendwo im Netzwerk ausgeführt wird, oder -net user,smb=/path/to/foldereinen Samba-Server zu starten.

Ich hatte kein Glück mit der -net user,smbOption von QEMU. Es wird lediglich gestartet smbd(was zu Konflikten mit einem anderen Dienst führt, der aufgrund eines Portkonflikts lokal ausgeführt wird). Es genügt zu sagen, dass dies unbrauchbar ist, insbesondere wenn mehrere Gäste daran denken. (Unter Linux kann -virtfs(Plan 9) für die einfache Freigabe von Ordnern verwendet werden.)

Andere Probleme mit Samba sind, dass es nicht nur auf die Freigabe von Ordnern beschränkt ist, sondern auch Druckerfreigabe, Benutzerzuordnung und so weiter. Ich muss lediglich einen (oder mehrere?) Ordner für den Windows-Gast freigeben.

Gibt es eine alternative Methode zur Ordnerfreigabe für QEMU, die mit einem Windows-Gast funktioniert?

Oder gibt es eine Möglichkeit, Samba so zu konfigurieren, dass es sich auf einen sehr begrenzten Funktionsumfang beschränkt und in QEMU integriert? Es sollte:

  • Nicht jeder im Netzwerk sollte auf den Ordner zugreifen können.
  • lokale Benutzer eingeschlossen (wenn möglich).
  • Keine anderen Funktionen bereitstellen (Druckerfreigabe).
  • Anwendungsfall: Machen Sie ein Git-Verzeichnis für Windows verfügbar, kompilieren Sie es in Windows und verwenden Sie Linux zur Analyse.
  • Haben Sie eine akzeptable Geschwindigkeit, verwendet Windows virtio-scsi und virtio-net.
  • Sie können einen Ordner von einem Linux-Host für einen Windows 7-Gast freigeben.
Lekensteyn
quelle
Eine agnostischere Frage zum Betriebssystem: superuser.com/questions/628169/…
Ciro Santilli am
1
@CiroSantilli 包子 包子 Linux 宪 六四 事件 Diese Frage ist mit Linux verschlagwortet, wo es -virtfsgroßartig funktioniert (siehe auch diese Frage), aber mir ist kein 9p-Treiber für Windows bekannt.
Lekensteyn
Ja, ich sage nicht, es ist ein Betrüger oder so, nur verwandt.
Ciro Santilli 事件 新疆 改造 法轮功 六四 六四

Antworten:

14

QEMUs eingebauter Samba-Dienst

Die nicht funktionierende -net user,smbOption wurde durch eine Inkompatibilität mit neueren Samba-Versionen (> = 4) verursacht. Dies wurde in QEMU v2.2.0 und neuer mit den folgenden Änderungen behoben:

(Debian hat die letzten beiden Patches auf 2.1 + dfsg-6 zurückportiert, das in Jessie vorhanden ist.)

Verwendung

Sie können einen Ordner exportieren, \\10.0.2.4\qemuwenn Sie das Benutzer-Netzwerk verwenden:

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

Wenn QEMU mit diesen Optionen erfolgreich gestartet wurde, wird ein neues /tmp/qemu-smb.*-*/Verzeichnis erstellt, das a enthält smb.conf. Wenn Sie schnell genug sind, kann diese Datei geändert werden, um Pfade schreibgeschützt zu machen oder mehr Ordner zu exportieren.

Arbeitsweise

Der Samba-Daemon wird ausgeführt, wenn über ein "Benutzer" -Netzwerk auf die Ports 139 oder 445 zugegriffen wird. Die Kommunikation erfolgt über die Standard-Ein- / Ausgabe / Fehler des SMBD-Prozesses. Dies ist der Grund, warum neuere Daemons fehlgeschlagen sind. Statt Protokollnachrichten wird die Fehlermeldung in die Pipe geschrieben.

Aufgrund dieser Vorgehensweise überwacht der Dämon die Host-Ports nicht und ist daher nur für den Gast zugänglich. Andere Clients im Netzwerk und sogar lokale Benutzer können mit diesem Dämon nicht auf Ordner zugreifen.

Da die Druckerfreigabe in QEMU v2.2.0 in der Samba-Konfiguration vollständig deaktiviert ist, gibt es hier keine weiteren Probleme.

Die Geschwindigkeit hängt vom Netzwerkadapter ab, daher wird empfohlen, den virtio- netkvmTreiber unter Windows zu verwenden.

Beachten Sie außerdem, dass der Dämon (normalerweise /usr/sbin/smbd) anhand seines absoluten Pfads ausgeführt wird , der zum Zeitpunkt der Kompilierung angegeben wurde (mithilfe der --smbdOption). Wann immer Sie eine neue Binärdatei oder eine Zwischenschaltung versuchen müssen smbd, müssen Sie die Datei an diesem Pfad ändern.

Andere Vorbehalte

Executables ( *.exe) müssen auf dem Host ( chmod +x FILE) ausführbar sein, damit der Gast über Ausführungsberechtigungen verfügt. acl allow execute always = TrueFügen Sie einer Freigabe die Option hinzu, um die Ausführung einer beliebigen Datei zuzulassen .

Beispiel einer schreibgeschützten smb.conf-Konfiguration, die die Ausführung einer beliebigen Datei ermöglicht (basierend auf QEMU v2.2.0):

...
[qemu]
pfad = / home / peter / windows 
schreibgeschützt = ja
Gast ok = wahr
force user = Peter 
acl erlauben ausführen immer = True
Lekensteyn
quelle
Ich habe diese Option verwendet. Ich benötige sowohl Lese- als auch Schreibzugriff. Ich habe den qemu-Dienst neu gestartet und die conf entsprechend aktualisiert. Ich sehe nichts in Netzwerkordnern im Explorer in Windows Guest. Wie finde ich in diesem Fall auch die Host-IP (ich nehme an, das ist 10.0.2.4) hier? Meine Gast-IP für diese Netzwerkkarte war 10.0.2.15. @Lekensteyn - irgendwelche Ideen?
Tsar2512
@ tsar2512 Normalerweise gehe ich zum Explorer und verwende Map Network Drive, um einen Buchstaben zuzuweisen \\10.0.2.4\qemu. In letzter Zeit habe ich diesen Schritt übersprungen und den Pfad direkt aus dem Dialogfeld "Ausführen" heraus geöffnet.
Lekensteyn
6

Im Jahr 2018 besteht eine einfache Möglichkeit, einen Ordner zwischen einem Linux- Host und einer virtuellen Windows- Maschine freizugeben , darin , RDP in Windows zu aktivieren und mit dem Remmina-Remotedesktop-Client eine guestVerbindung herzustellen und einen freigegebenen Ordner zu aktivieren:vm

Remmina RDP-Einstellungen

Dies erstellt einen Ordner unter Dieser PC ( freigegebener Ordner unter Linuxhostname ) und eine \\tsclient\shared-folder-nameNetzwerkfreigabe in der guest. Sie können auch ein Netzlaufwerk zuordnen:

Windows-Gastordnerfreigaben

  • Diese Lösung ist nicht erforderlich zu sambalaufen.

  • Getestet unter libvirt/ virt-managersollte aber mit keiner Virtualisierung funktionieren.

Stuart Cardall
quelle
Interessante Technik, Dateisystemumleitung scheint eine RDP-Funktion zu sein. Die xfreerdp /drive:shared-folder-name,/home/user/sharedOption sollte auch funktionieren. Quellcode-Referenzen: Remmina-Konfiguration , FreeRDP-Bibliothekscode .
Lekensteyn
Ist dies eine sichere Lösung ohne die Gefahr potenzieller Angreifer?
Dave