Гость KVM не может записывать данные в общий ресурс 9p, принадлежащий пользователю, не являющемуся пользователем root

Гость KVM не может записывать данные в общий ресурс 9p, принадлежащий пользователю, не являющемуся пользователем root

Я собираюсь настроить полный доступ на запись к общему ресурсу 9p для гостя KVM. И хост, и гость имеют одних и тех же пользователей/группы с одинаковыми идентификаторами. И хост, и гость должны иметь возможность писать в общий ресурс, используя одни и те же имена пользователей, и я не хочу различать, был ли файл записан хостом или гостем. Процесс kvm запущен как root — я установил userи groupв root/etc/libvirt/qemu.conf.

В определении гостя на хосте общий ресурс определяется следующим образом:

<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>

В гостевой системе общий ресурс монтируется как:

mount -t 9p -o rw,trans=virtio,version=9p2000.L,msize=262144 data /mnt/data

Проблема в том, что пользователь root в гостевой системе не может писать в файлы/папки, принадлежащие не-root пользователю на хосте. Еще более странно, что root гостя может переименовывать и удалять такие файлы. То есть, когда на хостовой машине я создаю файл как не-root пользователь, я просто не могу редактировать его как root гостя, хотя я могу переименовывать и удалять его!

Я также обнаружил, что если папка, созданная на хосте под пользователем без прав root, имеет права 777, то root гостя может писать в нее (т. е. создавать в ней файлы). Однако это не относится к файлам — их по-прежнему нельзя редактировать независимо от прав доступа.

И хост, и гость работают под управлением Linux server 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux. В Debian SELinux по умолчанию отключен, и я его не включал. Я попробовал все три доступных режима доступа 9p ( passthrough, mappedи squash) — никакой разницы.

Просто интересно, можно ли что-то подправить, чтобы это заработало, или это просто баг?

Обратите внимание, что похожая проблема описана здесь:Доступ для чтения/записи для сквозных (9p) файловых систем с libvirt/qemu?но в отличие от этого случая у меня есть 100% доступ на запись к файлам, принадлежащим пользователю root, это просто файлы пользователей, не являющихся root, в которые я не могу записывать, даже будучи пользователем root в гостевой системе.

решение1

У меня были похожие проблемы, и мне так и не удалось заставить его работать с 9p, и, как отметили другие комментаторы, 9p не является зрелым.

Я в итоге использовал samba для монтирования файловой системы хоста, и она работает нормально. Любая другая сетевая файловая система тоже, вероятно, справится с этой задачей (например, NFS, которую рекомендует Red Hat; см. ссылку из комментария @Diagonhttps://access.redhat.com/discussions/1119043).

решение2

Можете ли вы проверить дополнительные атрибуты файловой системы, такие как acl в общем каталоге? Я подозреваю проблему с разрешениями.

решение3

В моем случае среда kvm запущена под пользователем libvirt. (по умолчанию) Тогда, если /mnt/storage/data принадлежит libvirt-qemu.kvm на хосте и chmod 0777 /mnt/storage/data был развернут, это работает для меня. Я могу создать каталог как обычный пользователь (например, /mnt/storage/data/test/) в гостевой системе, и root может выполнять все задачи, которые вы просили. (Более того, каждый пользователь-гость может удалить любой файл, даже принадлежащий root. Я решил эту проблему, изменив права с 777 на 775 на хосте. Если пользователь в гостевой системе является частью группы, он может делать все, если нет, у него есть только права на чтение ... )

Связанный контент