
Meu objetivo é configurar acesso total de gravação a um compartilhamento 9p para um convidado KVM. Tanto o host quanto o convidado têm os mesmos usuários/grupos com os mesmos IDs. Tanto o host quanto o convidado devem poder gravar no compartilhamento usando os mesmos nomes de usuário e não quero distinguir se um arquivo foi gravado pelo host ou pelo convidado. O processo kvm está sendo executado como root - eu configurei user
e group
em root
/etc/libvirt/qemu.conf.
Na definição de convidado no host, o compartilhamento é definido da seguinte forma:
<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>
No convidado, o compartilhamento é montado como:
mount -t 9p -o rw,trans=virtio,version=9p2000.L,msize=262144 data /mnt/data
O problema é que o usuário root no convidado não pode gravar em arquivos/pastas pertencentes a um usuário não root no host. Ainda mais estranho é que o root do convidado pode renomear e excluir esses arquivos. Ou seja, quando na máquina host eu crio um arquivo como usuário não root, simplesmente não consigo editá-lo como root do convidado, mesmo que possa renomeá-lo e excluí-lo!
Também descobri que quando uma pasta criada no host sob um usuário não root tem suas permissões definidas como 777, o root do convidado pode gravar nela (ou seja, criar arquivos nela). Isso, entretanto, não se aplica a arquivos — eles ainda não podem ser editados independentemente das permissões.
Tanto o host quanto o convidado estão executando o servidor Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux. No Debian, o SELinux está desabilitado por padrão e eu não o habilitei. Tentei todos os três modos de acesso 9p disponíveis ( passthrough
, mapped
e squash
) – sem diferença.
Gostaria de saber se há algo que eu possa ajustar para que funcione ou é apenas um bug?
Observe que há um problema semelhante relatado aqui:Acesso de leitura/gravação para sistemas de arquivos passthrough (9p) com libvirt/qemu?mas, ao contrário desse caso, tenho 100% de acesso de gravação nos arquivos de propriedade do root, são apenas arquivos de usuário não-root nos quais não consigo gravar, mesmo sendo root no convidado.
Responder1
Tive problemas semelhantes e nunca consegui trabalhar com 9p e, como outros comentaristas disseram, 9p não está maduro.
Acabei usando o samba para montar um sistema de arquivos host e está funcionando bem. Qualquer outro sistema de arquivos de rede provavelmente também faria o trabalho (por exemplo, NFS, que é recomendado pela Red Hat; veja o link do comentário de @Diagonhttps://access.redhat.com/discussions/1119043).
Responder2
Você pode verificar atributos adicionais do sistema de arquivos, como ACLs no diretório compartilhado? Estou suspeitando de problema de permissão.
Responder3
No meu caso, o ambiente kvm está rodando sob o usuário libvirt. (padrão) Então, se /mnt/storage/data pertence a libvirt-qemu.kvm no host e chmod 0777 /mnt/storage/data foi implantado, funciona para mim. Posso criar um diretório como um usuário normal (por exemplo /mnt/storage/data/test/ ) no convidado e o root pode realizar todas as tarefas que você solicitou. (Ainda mais, todo usuário convidado pode excluir todos os arquivos, mesmo de propriedade do root. Eu resolvi esse problema alterando os direitos de 777 para 775 no host. Se o usuário convidado fizer parte do grupo, ele pode fazer tudo se não, ele só tem direitos de leitura...)