Ein Ubuntu Server 14.04-Host hostet einen Ubuntu Server 14.04-Gast über libvirt / qemu-kvm. Das System läuft einwandfrei, aber als Gast habe ich Probleme beim Schreiben in einen freigegebenen Ordner ( <filesystem>
), die mich verrückt machen. Beide Maschinen sind relative Vanille-Installationen.
Ich habe den angegebenen Ordner folgendermaßen angehängt:
[host] $ virsh edit guest-vm-name
# ...
<filesystem type='mount' accessmode='mapped'>
<source dir='/data'/>
<target dir='/data'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</filesystem>
# ...
Vom Gast aus mounte ich das Dateisystem wie folgt:
[guest] $ sudo -u www-data mkdir /tmp/mnt
[guest] $ sudo mount -t 9p -otrans=virtio,rw,version=9p2000.L /data /tmp/mnt
Ich benutze den www-data
Benutzer, da dies später der efftive-Benutzer sein wird und Gruppen- und Benutzer-IDs übereinstimmen müssen, wenn p9 verwendet wird. Das bedeutet auch, dass auf dem Host / data (das ist ext4-Partition, LVM auf RAID übrigens) so aussieht
[host] $ ls -lha /data
[host] $ drwxrwxr-x 4 www-data www-data 4.0K Nov 11 08:34 .
[host] $ drwxr-xr-x 24 root root 4.0K Nov 7 16:58 ..
[host] $ drwxr-xr-x 2 www-data www-data 4.0K Nov 11 08:34 jail
# ...
Wenn ich im Gast versuche, auf etwas im freigegebenen Dateisystem zu schreiben, erhalte ich Berechtigungsfehler (unabhängig vom verwendeten Benutzer):
[guest] $ sudo -u www-data touch /tmp/mnt/jail/letmeout
touch: cannot touch ‘/tmp/mnt/jail/letmeout’: Permission denied
Ich kann aber Dateien lesen
[guest] $ cat /tmp/mnt/jail/throughthewindow
Great Weather!
Ich habe verschiedene Dinge ausprobiert, insbesondere:
- Apparmor Service gestoppt und aa-Beschwerde angerufen (ich hoffe, das war effektiv)
- Setzen Sie die Sicherheit auf keine in
/etc/libvirt/qemu.conf
- Setzen Sie Benutzer und Gruppe auf root in
/etc/libvirt/qemu.conf
/ var / log / syslog und dmesg zeigen nichts Verdächtiges an.
Irgendwelche Hinweise?! Vielen Dank.
Antworten:
Ich weiß, dass dies ein alter Thread ist, aber ich bin gerade auf ein ähnliches Problem gestoßen und habe eine Lösung gefunden, die zumindest teilweise funktioniert .
Ich habe auch die Benutzer- und Gruppenwerte in
/etc/libvirt/qemu.conf
zu root , wie Sie haben.Ich habe aber auch die
dynamic_ownership
Einstellung geändert , weil die Beschreibung vielversprechend klang:Mein Setup ist:
root
libvirt
(möglicherweise wichtig)./mnt/data
) gehört dem Benutzer 1000 ("alexander").Ich kann jetzt schreiben schließlich Dateien im montierten freigegebenen Ordnern mit beiden Wurzeln (0) und Alexander (1000). (vorher durfte nur root hier Dateien schreiben)
Das Setzen
dynamic_ownership
auf 0 muss im "zugeordneten" Zugriffsmodus erfolgen.Hier sind einige weitere Informationen zu meinem Setup:
/etc/libvirt/qemu.conf:
Dateisystem (virsh edit):
Wirt:
fstab auf Gast:
Gast:
zurück auf Host:
Fazit
Das Seltsame ist, dass diese beiden Dateien auf dem Gast unterschiedlichen Benutzern gehören (root vs. alexander), während auf dem Host beide Dateien demselben Benutzer gehören (root: libvirt-qemu). : -O
Ich weiß nicht genau, wie diese Magie funktioniert , aber anscheinend schon.
Hoffe das hilft,
Alexander
quelle
@ Alexander gab eine tolle Antwort. Ich habe nicht alles getan, was er getan hat, aber das habe ich getan, damit die gleichen Benutzerrechte im 9p-Dateisystem in beide Richtungen funktionieren. (Auf diese Weise soll nur 9p ohne Sicherheitsprobleme in beide Richtungen zum Laufen gebracht werden. Für mehr Sicherheit benötigen Sie eine andere Methode oder andere Einstellungen.)
HOST (Bestellung ist unwichtig)
Ich habe meinen Hostbenutzer der folgenden Gruppe hinzugefügt: < kvm > (Ich bin auch Mitglied von < libvirtd >). Dieser Schritt ist möglicherweise nicht erforderlich, weil:
In der Datei /etc/libvirt/qemu.conf können Sie den Benutzer und die Gruppe ändern, mit denen sich alle Ihre VMs authentifizieren und ausführen.
( Dies ist eine mächtige kleine Änderung, und die Auswirkungen müssen herausgearbeitet werden, wenn Sie versuchen, dies auf so etwas wie einem Produktionsserver zu erreichen. )
(Mit der obigen Änderung wird der Host der virtuellen Maschine angewiesen, alle libvirt-Cross-VM-Anforderungen für alle von Ihnen ausgeführten Gast-VMs in den von Ihnen festgelegten < Benutzer > zu konvertieren , einschließlich der Gast-VM < Stamm >. * Beachten Sie erneut, dass dies der Fall ist ist eine systemweite Einstellung in Bezug auf libvirt und im weiteren Sinne qemu, wenn libvirt Ihre einzige qemu- Schnittstelle ist.)
("Squash" verweist übrigens auf ein 9p-Sicherheitsmodell. Es bedeutet "keine" und ist die zulässigste Einstellung für diesen Kontext.)
GAST
(Ich habe auch eine Option hinzugefügt, wie im folgenden Dokument erläutert.) Mein Mount-Befehl lautet:
Wenn Sie nach dem Einrichten keine Berechtigung zum Schreiben auf die Freigabe oder nur eine eingeschränkte Berechtigung haben, sollte der hervorragende Vorschlag von @randomoceans Antwort hilfreich sein. Das heißt, lassen Sie < stamm > einen Ordner unter der Freigabe erstellen und
chmod 777
auf diesen festlegen .- Noch mehr Informationen: https://wiki.qemu.org/Documentation/9psetup
quelle
Ich hatte auch dieses Problem, habe einen Ordner mit dem Namen
/home/user/shared
auf dem Host erstellt und dann den Ordner mit virt-manager hinzugefügt und als 9p virtio auf der qemu VM bereitgestellt.Ich habe die Einstellungen in /etc/apparmor.d/libvirt überprüft und es enthält Einträge für das neue
/home/user/shared,
und ich habe festgestellt, dass es nur dier
Berechtigung für hat,/home/user/shared
aberrw
für alle Dateien in/home/user/shared/
. Ich habe versucht, aw für Schreibberechtigungen hinzuzufügen, aber das schien nicht gespeichert zu werden, also bin ich in den Host gegangen/home/user/shared
und habe ein Unterverzeichnis erstellt und ein chmod 777 für dieses Unterverzeichnis erstellt. Das hat funktioniert und die Gast-VM konnte alle Erstellungs- und Bearbeitungsdateien an den su-Direktor schreiben.tldr: Erstellen Sie ein Unterverzeichnis im freigegebenen Ordner mit 777 Berechtigungen und prüfen Sie, ob Sie darauf schreiben können.
quelle