Я намерен настроить полный доступ на запись к общему ресурсу 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, установлены права доступа 777, корень гостя может писать в нее (т.е. создавать в ней файлы). Однако это не относится к файлам - их по-прежнему нельзя редактировать независимо от разрешений.
И хост, и гость работают под управлением Linux-сервера 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 на гостевой системе.
В моем случае среда kvm работает под пользователем libvirt. (по умолчанию) Затем, если / mnt / storage / data принадлежит libvirt-qemu.kvm на хосте и был развернут chmod 0777 / mnt / storage / data, у меня это работает. Я могу создать каталог как обычный пользователь (например, / mnt / storage / data / test /) в гостевой системе, а root может выполнять все задачи, которые вы просили. (Более того, каждый пользователь в качестве гостя может удалить любой файл, даже принадлежащий пользователю root. Я решил эту проблему, изменив права с 777 на 775 на хосте. Если пользователь в гостевой системе является частью группы, он может делать все если нет, то у него есть только права на чтение ...)
Можете ли вы проверить дополнительные атрибуты файловой системы, такие как acl в общем каталоге? Я подозреваю проблему с разрешением.