Carpeta compartida entre el invitado de Windows QEMU y el host de Linux

24

En el pasado, he utilizado Virtual Box, que tiene muy buen soporte para compartir una carpeta en el host con un invitado de Windows. Estoy buscando una funcionalidad similar para QEMU.

La documentación sugiere exponer un servidor Samba que se ejecuta en algún lugar de la red, o usar el -net user,smb=/path/to/folderpara iniciar un servidor Samba.

No tuve suerte con la -net user,smbopción de QEMU. Todo lo que hace es comenzar smbd(que entra en conflicto con otro servicio que se ejecuta localmente debido a un conflicto de puerto). Es suficiente decir que esto es inutilizable, especialmente con múltiples invitados en mente. (Para Linux, -virtfs(Plan 9) se puede usar para compartir carpetas fácilmente).

Otros problemas con Samba es que no se limita al intercambio de carpetas, sino que también comparte impresoras, mapeo de usuarios y demás. Todo lo que necesito es compartir una (¿o más?) Carpetas con el invitado de Windows.

¿Existe un método alternativo para compartir carpetas para QEMU que funcione con un invitado de Windows?

¿O hay una manera de configurar Samba para restringirse a un conjunto muy limitado de características e integrarlo en QEMU? Debería:

  • No todos en la red deberían poder acceder a la carpeta.
  • usuarios locales incluidos (si es posible).
  • No proporciona otra funcionalidad (uso compartido de impresoras).
  • Caso de uso: exponga un directorio git a Windows, compílelo en Windows y use Linux para el análisis.
  • Tiene una velocidad aceptable, Windows usa virtio-scsi y virtio-net.
  • Poder compartir una carpeta desde un host Linux con un invitado Windows 7.
Lekensteyn
fuente
una pregunta más agnóstica del sistema operativo: superuser.com/questions/628169/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
@CiroSantilli 包子 露 宪 六四 事件 法轮功 Esa pregunta está etiquetada con Linux donde -virtfsfunciona muy bien (vea también esta pregunta), pero no conozco un controlador 9p para Windows.
Lekensteyn
Sí, sin decir que es un engañado ni nada, solo relacionado.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

14

El servicio incorporado de Samba de QEMU

La -net user,smbopción que no funcionaba fue causada por una incompatibilidad con las versiones más nuevas de Samba (> = 4). Esto se corrige en QEMU v2.2.0 y más reciente con estos cambios:

(Debian ha soportado los últimos dos parches a 2.1 + dfsg-6 que está presente en Jessie).

Uso

Puede exportar una carpeta como \\10.0.2.4\qemucuando usa Redes de usuario:

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

Cuando QEMU se inicia con éxito con estas opciones, se /tmp/qemu-smb.*-*/creará un nuevo directorio que contiene un smb.conf. Si eres lo suficientemente rápido, entonces este archivo podría modificarse para que las rutas sean de solo lectura o exportar más carpetas.

Modo de operación

El demonio samba se ejecuta cada vez que se accede a los puertos 139 o 445 a través de una red de "usuario". La comunicación ocurre a través de la entrada / salida / error estándar del proceso smbd. Esta es la razón por la cual los demonios más nuevos fallaron, escribiría su mensaje de error en la tubería en lugar de mensajes de protocolo.

Debido a este método de operación, el daemon no escuchará en los puertos host y, por lo tanto, solo será accesible para el invitado. Por lo tanto, otros clientes en la red e incluso los usuarios locales no pueden obtener acceso a las carpetas con este demonio.

Dado que QEMU v2.2.0 el uso compartido de impresoras está completamente deshabilitado a través de la configuración de samba, entonces otra preocupación se ha ido aquí.

La velocidad depende del adaptador de red, por lo que se recomienda utilizar el controlador virtionetkvm en Windows.

También tenga en cuenta que el demonio se ejecuta por su ruta absoluta (típicamente /usr/sbin/smbd) como se especifica en tiempo de compilación (usando la --smbdopción). Cada vez que necesite probar un nuevo binario o interposición smbd, deberá modificar el archivo en esa ruta.

Otras advertencias

Los ejecutables ( *.exe) deben ser ejecutables en el host ( chmod +x FILE) para que el invitado tenga permisos de ejecución. Para permitir la ejecución de cualquier archivo, agregue la acl allow execute always = Trueopción a un recurso compartido.

Ejemplo de configuración smb.conf de solo lectura que permite la ejecución de cualquier archivo (basado en QEMU v2.2.0):

...
[qemu]
ruta = / inicio / peter / windows 
solo lectura = 
invitado ok = verdadero
forzar usuario = peter 
acl permitir ejecutar siempre = verdadero
Lekensteyn
fuente
Utilicé esta opción, necesito acceso de lectura y escritura. He reiniciado el servicio qemu y actualicé la conf en consecuencia. No veo nada en las carpetas de red en el explorador en Windows Guest. Además, ¿cómo encuentro la IP del host (supongo que es 10.0.2.4) en este caso aquí? Mi IP de invitado para esta NIC fue 10.0.2.15. @Lekensteyn: ¿alguna idea?
tsar2512
@ tsar2512 Por lo general, voy al Explorador, luego uso Map Network Drive para asignarle una carta \\10.0.2.4\qemu. Últimamente me he saltado ese paso y he abierto dicha ruta directamente desde el cuadro de diálogo Ejecutar.
Lekensteyn
6

En 2018, una forma sencilla de compartir una carpeta entre un host Linux y una máquina virtual Windows es habilitar RDP en Windows guesty conectarse al vmcon el cliente de escritorio remoto Remmina y habilitar una carpeta compartida:

Configuración de Remmina RDP

Esto crea una carpeta en Esta PC ( carpeta compartida en Linuxhostname ) y un \\tsclient\shared-folder-namerecurso compartido de red dentro de guest. También puede asignar una unidad de red:

Carpeta compartida de Windows Guest

  • Esta solución no requiere sambaestar ejecutándose.

  • Probado bajo libvirt/ virt-managerpero debería funcionar con cualquier virtualización.

Stuart Cardall
fuente
Técnica interesante, la redirección del sistema de archivos parece ser una función RDP. La xfreerdp /drive:shared-folder-name,/home/user/sharedopción también debería funcionar. Fuente: referencias de códigos de configuración Remina , código de la biblioteca FreeRDP .
Lekensteyn
¿Es esta una solución segura sin ningún peligro de posibles atacantes?
Dave