Folder współdzielony między gościem QEMU Windows a hostem Linux

24

W przeszłości korzystałem z Virtual Box, który ma bardzo dobrą obsługę udostępniania folderu na hoście gościowi Windows. Szukam podobnej funkcjonalności dla QEMU.

Dokumentacja sugeruje ujawnienie serwera Samba działającego gdzieś w sieci lub użyć -net user,smb=/path/to/folderdo uruchomienia serwera samby.

Nie miałem szczęścia z -net user,smbopcją QEMU. Wszystko, co robi, uruchamia się smbd(co powoduje konflikt z inną usługą działającą lokalnie z powodu konfliktu portów). Wystarczy powiedzieć, że jest to bezużyteczne, szczególnie biorąc pod uwagę wielu gości. (W systemie Linux -virtfsmożna użyć (Plan 9) do łatwego udostępniania folderów.)

Inne problemy z Sambą polegają na tym, że nie ogranicza się to do udostępniania folderów, ale także do udostępniania drukarek, mapowania użytkowników i tak dalej. Wszystko, czego potrzebuję, to udostępnienie jednego (lub więcej?) Folderów gościowi Windows.

Czy istnieje alternatywna metoda udostępniania folderów dla QEMU, która współpracuje z gościem systemu Windows?

Czy jest sposób na skonfigurowanie Samby, aby ograniczała się do bardzo ograniczonego zestawu funkcji i zintegrowała ją z QEMU? Powinno:

  • Nie wszyscy w sieci powinni mieć dostęp do folderu.
  • w tym użytkownicy lokalni (jeśli to możliwe).
  • Brak innych funkcji (udostępnianie drukarek).
  • Przypadek użycia: ujawnij katalog git w systemie Windows, skompiluj go w systemie Windows i użyj Linuksa do analizy.
  • Mają akceptowalną prędkość, Windows używa virtio-scsi i virtio-net.
  • Udostępniaj folder hosta systemu Linux gościowi systemu Windows 7.
Lekensteyn
źródło
bardziej agnostyczne pytanie na system operacyjny: superuser.com/questions/628169/…
Ciro Santilli 事件 改造 中心 法轮功 六四 事件
1
@CiroSantilli 法轮功 露 宪 六四 事件 法轮功 To pytanie jest oznaczone linuksem, w którym -virtfsdziała świetnie (patrz także to pytanie), ale nie znam sterownika 9p dla systemu Windows.
Lekensteyn,
tak, nie mówiąc, że to dupek czy coś, po prostu powiązane.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

14

Wbudowana usługa QEMU Samba

Niedziałająca -net user,smbopcja została spowodowana niezgodnością z nowszymi wersjami Samby (> = 4). Zostało to naprawione w QEMU v2.2.0 i nowszych z następującymi zmianami:

(Debian przeportował dwie ostatnie łatki do wersji 2.1 + dfsg-6, która jest obecna w Jessie.)

Stosowanie

Możesz wyeksportować jeden folder, tak jak w \\10.0.2.4\qemuprzypadku korzystania z sieci użytkownika:

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

Po pomyślnym uruchomieniu QEMU z tymi opcjami /tmp/qemu-smb.*-*/zostanie utworzony nowy katalog zawierający smb.conf. Jeśli jesteś wystarczająco szybki, ten plik można zmodyfikować, aby ścieżki były tylko do odczytu lub wyeksportować więcej folderów.

Tryb działania

Demon samby jest uruchamiany za każdym razem, gdy dostęp do portów 139 lub 445 uzyskuje się przez sieć „użytkownika”. Komunikacja odbywa się za pośrednictwem standardowego wejścia / wyjścia / błędu procesu smbd. To jest powód, dla którego nowsze demony zawiodły, zapisywałby komunikat o błędzie na potoku zamiast komunikatów protokołu.

Z powodu tej metody działania demon nie będzie nasłuchiwał na portach hosta, a zatem będzie dostępny tylko dla gościa. Dlatego inni klienci w sieci, a nawet lokalni użytkownicy, nie mogą uzyskać dostępu do folderów za pomocą tego demona.

Ponieważ udostępnianie drukarek QEMU v2.2.0 jest całkowicie wyłączone przez konfigurację samby, więc nie ma już innego problemu.

Szybkość zależy od karty sieciowej, dlatego zaleca się korzystanie ze sterownika virtionetkvm w systemie Windows.

Należy również pamiętać, że demon jest wykonywany przez ścieżkę bezwzględną (zwykle /usr/sbin/smbd) określoną w czasie kompilacji (przy użyciu --smbdopcji). Ilekroć musisz wypróbować nowy plik binarny lub utworzyć plik pośredni smbd, musisz zmodyfikować plik w tej ścieżce.

Inne zastrzeżenia

Pliki wykonywalne ( *.exe) muszą być wykonywalne na hoście ( chmod +x FILE), aby gość mógł mieć uprawnienia do wykonywania. Aby umożliwić wykonanie dowolnego pliku, dodaj acl allow execute always = Trueopcję do udziału.

Przykładowa konfiguracja smb.conf tylko do odczytu, która umożliwia wykonanie dowolnego pliku (na podstawie QEMU v2.2.0):

...
[qemu]
ścieżka = / home / peter / windows 
tylko do odczytu = tak
guest ok = true
force user = Peter 
acl pozwalają na wykonanie zawsze = Prawda
Lekensteyn
źródło
Użyłem tej opcji, potrzebuję zarówno dostępu do odczytu i zapisu. Zrestartowałem usługę qemu i odpowiednio zaktualizowałem conf. Nic nie widzę w folderach sieciowych w Eksploratorze w systemie Windows guest. Jak w tym przypadku znaleźć adres IP hosta (zakładam, że to 10.0.2.4)? Mój adres IP gościa dla tej karty sieciowej to 10.0.2.15. @Lekensteyn - jakieś pomysły?
tsar2512,
@ tsar2512 Zwykle idę do Eksploratora, a następnie używam Map Network Drive, aby przypisać literę \\10.0.2.4\qemu. Ostatnio pominąłem ten krok i otworzyłem wspomnianą ścieżkę bezpośrednio z okna dialogowego Uruchom.
Lekensteyn,
6

W 2018 r. Prostym sposobem udostępnienia folderu między hostem Linux a maszyną wirtualną z systemem Windows jest włączenie protokołu RDP w systemie Windows guesti połączenie się vmz klientem pulpitu zdalnego Remmina i włączenie folderu współdzielonego:

Ustawienia Remmina RDP

Spowoduje to utworzenie folderu w obszarze Ten komputer ( folder współdzielony w systemie Linuxhostname ) i \\tsclient\shared-folder-nameudziału sieciowego w guest. Możesz również zmapować dysk sieciowy:

Udziały folderów systemu Windows dla gości

  • To rozwiązanie nie wymaga sambadziałania.

  • Testowany pod libvirt/ virt-managerale powinien działać z każdą wirtualizacją.

Stuart Cardall
źródło
Ciekawa technika. Przekierowanie systemu plików wydaje się być funkcją RDP. xfreerdp /drive:shared-folder-name,/home/user/sharedOpcja powinna działać jak dobrze. Kod źródłowy referencje: konfiguracyjne Remmina , FreeRDP Code Library .
Lekensteyn,
Czy to bezpieczne rozwiązanie bez niebezpieczeństw ze strony potencjalnych napastników?
Dave