Ich habe mit LXC / LXD unter Ubuntu 14.04 experimentiert und es funktioniert alles hervorragend. Ich muss nur herausfinden, wie freigegebene Verzeichnisse zwischen meinem Hostcomputer und einem Container funktionieren, damit ich Virtualbox ein für alle Mal loswerden kann.
Ich habe diese Seite gesehen: https://wiki.gentoo.org/wiki/LXD
Das gibt Anweisungen, aber ich bekomme immer wieder Fehler.
Kennt jemand einfache, klare Anweisungen, um dies zum Laufen zu bringen? Jede Hilfe sehr geschätzt.
lxc config device add confexample sharedtmp disk path=/tmp source=/tmp/shared
. Betrachtet man jedoch das Verzeichnis auf dem Container, sind der Eigentümer und die Gruppe für die darin enthaltenen Dateien auf "nobody" und "nogroup" gesetzt und der Mount ist schreibgeschützt.lxc file
, um Dateien zwischen Host und Container zu übertragen, mitpush
undpull
.Antworten:
Die Anweisungen auf https://wiki.gentoo.org/wiki/LXD , die Sie erwähnen, sind korrekt, bedürfen jedoch möglicherweise einer weiteren Erläuterung.
Auf dem Host überprüfen Sie zunächst den Besitz des Verzeichnisses, in dem die Containerdaten gespeichert sind. Lauf
und überprüfen Sie den Eigentümer des Containers, für den Sie das Verzeichnis freigeben möchten. In meinem Fall waren das
uid
undgid
beide 100000.Verwenden Sie diese als Nächstes, um den Eigentümer des Verzeichnisses zu ändern, das Sie freigeben möchten:
Teilen Sie das Verzeichnis mit dem Container so, wie Sie es in Ihrem Kommentar angegeben haben:
Jetzt werden Sie im Container sehen, dass das Verzeichnis
/tmp/share_on_guest
(ich würde nicht empfehlen, Ihr Verzeichnis zu mounten,/tmp
da dies vom System für andere Dinge verwendet wird und spezielle Berechtigungen hat) im Besitz von root ist. Ab hier können Siechown
im Container verwenden, um den Eigentümer in den entsprechendenuid
undgid
für Ihren Benutzer im Container zu ändern .Als Randnotiz: Nachdem Sie den Eigentümer des Containers auf z. B. einen Benutzer mit
uid
33uid
geändert haben, sehen Sie auf dem Host, dass es jetzt 100033 gibt, was durchaus Sinn macht.quelle
/var/lib/lxd/containers
, auf die verwiesen wird/var/lib/lxd/storage-pools/lxd/containers
(in diesem Fall ist das letztelxd
Bit der Name meines ZFS-Speicherpools). Alle Container dort schienen die gleiche UID / GID von 165536 zu haben, wenn sie ausgeführt wurden und sich im Besitz von befanden, wenn sieroot:root
ausgeschaltet waren.lxc config
und es hat wie ein Zauber funktioniert!Hier ist eine aktualisierte Antwort auf diese Frage.
Hängen Sie den Host-Ordner
/var/www
wie/var/test
im Container ein.quelle
Sie können dem Container zusätzliche Geräte zuweisen. Dies können Ordner sein, auf die der Host zugreifen kann.
Beachten Sie, dass dies
<device>
nur ein willkürlicher Name ist, den Sie zuweisen und der als ID für die nachfolgende Geräteverwaltung verwendet wird.Um beispielsweise den Host-Ordner "./host" als "/ mnt / host" in den Container einzubinden ...
Es bleibt ein Problem : Wenn dieser Ordner sowohl vom Host als auch vom Container beschreibbar sein soll, müssen Eigentümer und Berechtigungen entsprechend konfiguriert werden. Dies wird durch den Standardmodus von LXD erschwert, der die numerischen Bereiche für Benutzer- und Gruppenwerte virtualisiert
id
. Es gibt jedoch eine einfache Lösung : Umgehen Sie diese Virtualisierung, indem Sie den Container so konfigurieren, dass er mit Host-äquivalenten Berechtigungen ausgeführt wird.Die vollständigen Auswirkungen dieses Ansatzes auf die Host-Sicherheit sind mir derzeit nicht klar, scheinen aber von der Virtualisierung etwas "eingegrenzt" zu sein. Das praktische Risiko hängt davon ab, wie und warum Sie den Behälter verwenden. Siehe technische Hinweise unter https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers
Beachten Sie außerdem, dass dieser Ansatz wahrscheinlich am besten funktioniert, wenn Sie normalerweise als Nicht-Root-Benutzer im Container arbeiten, z. B. wenn Sie Folgendes anhängen:
quelle
env
ist insbesondere andershttp_proxy
. Ein Beispiel Umgehung:sudo http_proxy=http://[fe80::1%eth0]:13128 apt-get update
.http_proxy
, ich denke , die einfachere Lösung wahrscheinlich IPV4 zu ermöglichen , ist wie besprochen hier .sudo dhclient
im Container - oder wechselnmanual
zudhcp
in50-cloud-init.cfg
. Schöne Hinweise hier: github.com/lxc/lxd/issues/1298Basierend auf der ausgezeichneten Antwort von ph0t0nix schlage ich für meinen Ubuntu 18.04-Server den folgenden schrittweisen Ansatz vor:
Bestimmen Sie im Host die UID des Eigentümers von rootfs:
Bestimmen Sie im Container die UID von Ubuntu (dh Benutzer im Container):
Erstellen Sie einen freigegebenen Ordner auf dem Host und fügen Sie ihn dem Container hinzu:
Passen Sie die Host-UID des freigegebenen Ordners an (UID = UID-Host + UID-Gast):
Gast (Benutzer ubuntu) hat jetzt Zugriff auf freigegebenen Ordner und kann den Containerzugriff auf freigegebenen Ordner mit anpassen
chmod
.quelle
Ich habe jetzt eine funktionierende, sichere Lösung für dieses Problem, indem ich LXD-Profile verwende, um die Zuordnung zwischen UID und GID im Container und auf dem Host zu handhaben.
Eine sehr nützliche Zusammenfassung finden Sie hier:
https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8
quelle
0777
Sie die Berechtigungen "Bitte hacken Sie mein System und zerstören Sie meine Daten" nicht ohne ersichtlichen Grund! Es gibt fast keinen Grund dafür, da dies durch sinnvollere Änderungen wie das Ändern der (Gruppen-) Eigentümerschaft vermieden werden kann. -1