
Mi objetivo es configurar acceso completo de escritura a un recurso compartido de 9p para un invitado KVM. Tanto el anfitrión como el invitado tienen los mismos usuarios/grupos con los mismos ID. Tanto el anfitrión como el invitado deberían poder escribir en el recurso compartido usando los mismos nombres de usuario y no quiero distinguir si un archivo fue escrito por el anfitrión o el invitado. El proceso kvm se ejecuta como root; lo configuré user
en group
/etc/libvirt/qemu.conf root
.
En la definición de invitado en el anfitrión, la participación se define de la siguiente manera:
<filesystem type='mount' accessmode='passthrough'>
<source dir='/mnt/storage/data'/>
<target dir='data'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</filesystem>
En el invitado, la acción se monta como:
mount -t 9p -o rw,trans=virtio,version=9p2000.L,msize=262144 data /mnt/data
El problema es que el usuario root en el invitado no puede escribir en archivos/carpetas propiedad de un usuario no root en el host. Aún más extraño, la raíz del invitado puede cambiar el nombre y eliminar dichos archivos. Es decir, cuando en la máquina host creo un archivo como usuario no root, simplemente no puedo editarlo como root del invitado, ¡aunque puedo cambiarle el nombre y eliminarlo!
También descubrí que cuando una carpeta creada en el host con un usuario no root tiene sus permisos establecidos en 777, la raíz del invitado puede escribir en ella (es decir, crear archivos en ella). Sin embargo, esto no se aplica a los archivos: todavía no se pueden editar independientemente de los permisos.
Tanto el host como el invitado ejecutan el servidor Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux. En Debian, SELinux está deshabilitado por defecto y yo no lo habilité. Probé los tres modos de acceso 9p disponibles ( passthrough
y mapped
) squash
, sin diferencias.
Me pregunto si hay algo que pueda modificar para que funcione o es solo un error.
Tenga en cuenta que aquí se informa un problema similar:¿Acceso de lectura/escritura para sistemas de archivos passthrough (9p) con libvirt/qemu?pero a diferencia de ese caso, tengo acceso de escritura del 100% en los archivos que pertenecen al root, son solo archivos de usuarios no root en los que no puedo escribir ni siquiera siendo root en el invitado.
Respuesta1
Tuve problemas similares y nunca logré que funcionara con 9p y, como han dicho otros comentaristas, 9p no está maduro.
Terminé usando samba para montar un sistema de archivos host y está funcionando bien. Probablemente cualquier otro sistema de archivos de red también haría el trabajo (por ejemplo, NFS, recomendado por Red Hat; consulte el enlace del comentario de @Diagonhttps://access.redhat.com/discussions/1119043).
Respuesta2
¿Puedes comprobar los atributos adicionales del sistema de archivos, como las ACL en el directorio compartido? Sospecho que hay un problema de permiso.
Respuesta3
En mi caso, el entorno kvm se ejecuta con el usuario libvirt. (predeterminado) Entonces, si /mnt/storage/data es propiedad de libvirt-qemu.kvm en el host y se implementó chmod 0777 /mnt/storage/data, funciona para mí. Puedo crear un directorio como usuario normal (por ejemplo, /mnt/storage/data/test/) en el invitado y el root puede hacer todas las tareas que usted solicitó. (Aún más, cada usuario invitado puede eliminar todos los archivos, incluso los que pertenecen a root. Manejé ese problema cambiando los derechos de 777 a 775 en el host. Si el usuario invitado es parte del grupo, puede hacer todo si no, sólo tiene derechos de lectura... )