KVM-Gast kann nicht auf 9p-Freigabe schreiben, die Nicht-Root-Benutzern gehört

KVM-Gast kann nicht auf 9p-Freigabe schreiben, die Nicht-Root-Benutzern gehört

Ich möchte einem KVM-Gast vollen Schreibzugriff auf eine 9p-Freigabe einrichten. Sowohl Host als auch Gast haben dieselben Benutzer/Gruppen mit denselben IDs. Sowohl Host als auch Gast sollten mit denselben Benutzernamen in die Freigabe schreiben können, und ich möchte nicht unterscheiden, ob eine Datei vom Host oder vom Gast geschrieben wurde. Der KVM-Prozess wird als Root ausgeführt – ich habe und userin /etc/libvirt/qemu.conf festgelegt.grouproot

In der Gastdefinition auf dem Host wird die Freigabe wie folgt definiert:

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

Im Gast wird die Freigabe wie folgt gemountet:

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

Das Problem besteht darin, dass der Root-Benutzer im Gast nicht in Dateien/Ordner schreiben kann, die einem Nicht-Root-Benutzer auf dem Host gehören. Noch seltsamer ist, dass der Root des Gasts solche Dateien umbenennen und löschen kann. Das heißt, wenn ich auf dem Host-Rechner eine Datei als Nicht-Root-Benutzer erstelle, kann ich sie anschließend einfach nicht als Root des Gasts bearbeiten, obwohl ich sie umbenennen und löschen kann!

Ich habe auch festgestellt, dass der Root des Gastes in einen Ordner schreiben kann (d. h. Dateien darin erstellen), wenn dieser auf dem Host unter einem Nicht-Root-Benutzer erstellt wurde und dessen Berechtigungen auf 777 gesetzt sind. Dies gilt jedoch nicht für Dateien – diese können unabhängig von den Berechtigungen weiterhin nicht bearbeitet werden.

Sowohl Host als auch Gast verwenden Linux Server 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux. In Debian ist SELinux standardmäßig deaktiviert und ich habe es nicht aktiviert. Ich habe alle drei verfügbaren 9p-Zugriffsmodi ( passthrough, mappedund squash) ausprobiert – kein Unterschied.

Ich frage mich nur, ob ich irgendetwas optimieren kann, damit es funktioniert, oder ist es nur ein Fehler?

Beachten Sie, dass hier ein ähnliches Problem gemeldet wurde:Lese-/Schreibzugriff für Passthrough-Dateisysteme (9p) mit libvirt/qemu?Aber anders als in diesem Fall habe ich 100 % Schreibzugriff auf die Dateien, die dem Root gehören. Nur auf die Dateien von Nicht-Root-Benutzern kann ich nicht schreiben, selbst wenn ich auf dem Gast Root bin.

Antwort1

Ich hatte ähnliche Probleme und habe es mit 9p nie zum Laufen gebracht, und wie andere Kommentatoren gesagt haben, ist 9p nicht ausgereift.

Ich habe schließlich Samba verwendet, um ein Host-Dateisystem zu mounten, und es funktioniert einwandfrei. Jedes andere Netzwerkdateisystem würde wahrscheinlich auch funktionieren (z. B. NFS, das von Red Hat empfohlen wird; siehe Link aus @Diagons Kommentarhttps://access.redhat.com/discussions/1119043).

Antwort2

Können Sie zusätzliche Dateisystemattribute wie ACLs im freigegebenen Verzeichnis überprüfen? Ich vermute, dass es ein Berechtigungsproblem gibt.

Antwort3

In meinem Fall läuft die KVM-Umgebung unter dem Benutzer libvirt. (Standard) Wenn /mnt/storage/data dann auf dem Host libvirt-qemu.kvm gehört und chmod 0777 /mnt/storage/data bereitgestellt wurde, funktioniert es für mich. Ich kann als normaler Benutzer ein Verzeichnis (z. B. /mnt/storage/data/test/) im Gast erstellen und Root kann alle gewünschten Aufgaben ausführen. (Darüber hinaus kann jeder Benutzer im Gast jede Datei löschen, auch wenn sie Root gehört. Ich habe dieses Problem gelöst, indem ich die Rechte auf dem Host von 777 auf 775 geändert habe. Wenn der Benutzer im Gast Teil der Gruppe ist, kann er alles tun, andernfalls hat er nur Leserechte ...)

verwandte Informationen