• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] Wie geht ein sauberer Umgang mit einem lokalen Webserver und seinen Rechten?

gorgonz

Hacker
Das Problem ist hinlänglich bekannt:
- Webserver ist nur lokaler Entwicklungsserver
- Jedesmal, wenn ich etwas kompiliere oder Dateien editiere könnte ich das nur als root (wegen wwwrun:www)

Auch, wenn es nur ein Testserver ist, der auch nicht immer läuft, will ich keine 777 Rechte verwenden, die tatsächlich auch bei Updates der Web-SW oft rückgesetzt werden.

Eine Überlegung ist, vollkommen virtuell abzuschotten (VirtualBox), eine andere, ob da mit docker was zu machen ist?

Klar, am liebsten würde ich gerne direkt auf meinem System arbeiten können, aber wie? ;-).

Wie macht ihr das denn?
 

gehrke

Administrator
Teammitglied
gorgonz schrieb:
Eine Überlegung ist, vollkommen virtuell abzuschotten (VirtualBox), eine andere, ob da mit docker was zu machen ist?
Ich geh mal nur auf diesen Aspekt ein, nicht auf die eigentliche Frage.

Selbstverständlich kannst Du hierfür eine VM benutzen, vorzugsweise IMHO mit KVM.
Und ja: genau dafür wurde Docker gemacht, und das wäre auch meine Empfehlung. Erfordert allerdings einiges an Einarbeitung, was IMHO aber gut investiert ist.
 

marce

Guru
die meisten klassischen Problem lassen sich auch recht einfach über Dateirechte und die entsprechende Server-Konfig lösen (Dateien müssen ja nicht unterhalb von /var/www u.ä. liegen, "wo nur root schreiben darf"

...zudem muss der Webserver ja nicht unter einem Systemuser laufen.

Möglichkeiten gibt es viele - es kommt auch sehr auf die jeweilige Umgebung (Server-Software, ggf. Programmiersprache, ...) an, ob das nur 'ne Spielwiese ist oder in irgendeiner Art einem prod. System entsprechen sollte, ...
 
OP
G

gorgonz

Hacker
erstmal vielen Dank für eure Ideen :)

@gehrke: Ja, das mit docker scheint mir auch ein guter Ansatz zu sein, gerade da es mir ermöglichen würde Tests mit verschiedenen PHP Versionen auf dem gleichen System zu machen. Ich bin da noch nicht gut eingearbeitet, aber hatte schon so viel Wissen, dass in XML Dateien gewünschte Konfigurationen aus Paketen zusammengestellt werden können. Unklar ist mir allerdings, wie ich docker in rechtetechnischer Hinsicht nutzen könnte. Kannst Du dazu noch etwas schreiben?

@marce: Hmm, bin nicht sicher, ob ich den Ansatz verstehe. Es gibt irgendwo die Möglichkeit, das Root-Verzeichnis für die Webserveranwendungen umzustellen. Für mich am einfachsten wäre es natürlich, htdocs in meinem Home-Verzeichnis zu platzieren. Das erzeugt weitere Fragen. Ich arbeite viel mit Joomla, welches bisher die Rechte immer auf wwwrun:www setzt. Ist das dann anders im Home-Verzeichnis von mir?

Noch generell: Es geht um einen PC, auf dem ich arbeite und dort einen lökalen Webserver betreibe, der ausschließlich der lokalen Entwicklung von SW (PHP, JS) dient.
 

marce

Guru
https://httpd.apache.org/docs/2.4/howto/public_html.html
https://httpd.apache.org/docs/2.4/de/mod/core.html#documentroot
https://httpd.apache.org/docs/2.4/mod/mod_unixd.html#user
https://httpd.apache.org/docs/2.4/programs/httpd.html

zudem nehmen die meisten Installer den User / Group, unter dem der Webserver läuft. Den kannst Du auch als "dein User" starten - musst dann ggf. aber (zumindest ohne kleine Hacks drumherum) auf Ports < 1024 verzichten. Stört aber nicht, ggf. kann man das ja Proxien.

Mit php-fpm könntest Du eh für jeden VHost hinterlegen, unter welchem User die laufen sollen.

Ob man sicher Docker geben will oder nicht - überlasse ich jedem selbst. Wenn's mal läuft und man alle Fallstricke davon verstanden hat kann man sich das Leben einfacher machen damit. Man kommt aber auch sehr gut ohne aus.
 

gehrke

Administrator
Teammitglied
gorgonz schrieb:
Unklar ist mir allerdings, wie ich docker in rechtetechnischer Hinsicht nutzen könnte. Kannst Du dazu noch etwas schreiben?
[...]
Noch generell: Es geht um einen PC, auf dem ich arbeite und dort einen lökalen Webserver betreibe, der ausschließlich der lokalen Entwicklung von SW (PHP, JS) dient.
Ich denke, die meisten Leute machen sich in einer solch reinen Development-Environment keine Gedanken und lassen dockerd mit root-Rechten laufen.

Spätestens bei einem öffentlich verfügbarem System muss man mehr tun. Es gibt aber hierzu diverse Stellen im Netz, wo Du die Maßnahmen recherchieren kannst.
Beginne vielleicht deine Suche mit diesem Pattern: docker without root permissions
 
OP
G

gorgonz

Hacker
Wow, das sind coole Vorschläge. Vielleicht kann ich sogar das Beste aus beiden Welten erreichen, einerseits UserDir, andererseits docker - dann ohne root :)

Heißen Dank dafür :thumbs:

Heute mach ich nix mehr damit, ist aber für morgen vorgemerkt :)
 
OP
G

gorgonz

Hacker
Also, der momentane Stand für mich ist so:
- eure Hinweise sind gut und ich denke, das hat meine Frage beantwortet
- leider ist ein ganz anderes Problem, dass es mir nicht gelingt den dockerd zu starten

Ich werde da noch mehr googeln und ansonsten einen neuen Thread aufmachen <seufz />
 

spoensche

Moderator
Teammitglied
Man kann es bei diesen Aufgaben auch mit einer VM und Docker übertreiben.

Podman kann auch als normaler User Container starten. Für das Container Netzwerk ist dann slirp4netns (Usermode Networking) notwendig, weil ein normaler User keine Netzwerk Devices anlegen darf.

Podman kann auch aus Dockerfiles oder Dockerswarm Konfigurationen Container erstellen.
Das ist die einfachste und sicherere Lösung als einen zusätzlichen Dienst der unnötigerweise mit root Rechten läuft.

Da brauchts keinen Docker Daemon der mit root Berechtigungen läuft.
 
OP
G

gorgonz

Hacker
ahh, da haben wir uns überlappt, spoensche. Hatte noch einen Versuch gestartet, indem ich yast2-docker installiert habe
=> jetzt bin ich beruhigt, auch yast2 kann docker nicht starten :lol:
podman schon mal installiert, muss aber lesen, wie der jetzt verwendet - und vor allem konfiguriert - wird ;)
 
OP
G

gorgonz

Hacker
@spoensche: vielen Dank für den Hinweis :). Mit podman kann ich schon mal container laden und starten, was mir mit docker nicht gelungen war :thumbs: . Alles andere zu meinem ursprünglichen Ansinnen muss ich jetzt erstmal in Ruhe angehen ;)
 

gehrke

Administrator
Teammitglied
Ich möchte meine Empfehlung konkretisieren.
gehrke schrieb:
gorgonz schrieb:
Eine Überlegung ist, vollkommen virtuell abzuschotten (VirtualBox), eine andere, ob da mit docker was zu machen ist?
Und ja: genau dafür wurde Docker gemacht, und das wäre auch meine Empfehlung.
spoensche schrieb:
Podman kann auch als normaler User Container starten.
Ich habe mich konkret auf Docker bezogen, weil das namentlich vom TE in die Runde geworfen wurde - in Abgrenzung zum Arbeiten auf dem lokalen Host oder zur vollwertigen Virtualisierung wie VirtualBox oder KVM.

Meine Empfehlung bezieht sich weniger auf Docker selbst, als mehr auf die dadurch implementierte Technologie: Container-Virtualisierung.

Da ist Docker noch immer der bekannteste Name, aber sicher gibt es heute auch Alternativen. Wenn man diesen Weg gehen möchte, muss man sich irgendwann mit den Vor- und Nachteilen der einzelnen Container-Lösungen und deren daran hängendem Umfeld auseinandersetzen und eine Entscheidung treffen. Wie immer gibt es Vor- und Nachteile für alles, aber eine größere Einarbeitungsphase muss man wohl in jedem Fall einplanen, denn es handelt sich um ein vollständig anderes Grundprinzip.

Aber grundsätzlich halte ich Container-Virtualisierung für einen sehr wichtigen Baustein und mir scheint Dein Anwendungsfall durchaus geeignet.

Und nein: Das bedeutet nicht, dass ich von Docker abrate.
 
gehrke schrieb:
..
Da ist Docker noch immer der bekannteste Name, aber sicher gibt es heute auch Alternativen. Wenn man diesen Weg gehen möchte, muss man sich irgendwann mit den Vor- und Nachteilen der einzelnen Container-Lösungen und deren daran hängendem Umfeld auseinandersetzen und eine Entscheidung treffen...
Nur für dich
Bezeichnungen wie "Container" oder "Container-Virtualisierung" solltest du aus deinem Kopf streichen.
Diese Ausdrücke schaffen nur Verwirrung und stellen sich dem Verstehen der eigentlichen Vorgänge in den Weg.
Wahrscheinlich wurde der "Container" von den Docker-Programmierern erfunden, um ihre Arbeit zu rechtfertigen.
Docker ist eine völlig überladene Applikation, die nichts anderes tut als sowieso vorhandene Kernel Funktionalitäten zu Konfigurieren.
In Wahrheit könnte man Docker mit ca.20 Zeilen Bash nachbilden, wenn man versteht was da vor sich geht.

Gruß
Gräfin Klara
 

gehrke

Administrator
Teammitglied
Gräfin Klara schrieb:
Nur für dich
Bezeichnungen wie "Container" oder "Container-Virtualisierung" solltest du aus deinem Kopf streichen.
Ich denke nicht, dass ich der einzige bin, der diesen Begriff verwendet.
Gräfin Klara schrieb:
In Wahrheit könnte man Docker mit ca.20 Zeilen Bash nachbilden, wenn man versteht was da vor sich geht.
Interessante Aussage. Das kannst Du ja gerne mal in einem eigenen Thread demonstrieren. 20 Zeilen gibt das Code-Tag ja her.
 
OP
G

gorgonz

Hacker
Das macht sogar mich neugierig, obwohl ich noch gar nicht so tief drin stecke. Vielleicht verstehe ich dann auch besser, wie das mit den mehreren Instanzen gemacht wird. Ich habe zwar schon darüber gelesen, dass die "Parallelisierung" über verschiedene Namespaces gemacht wird, aber steh da noch im Wald ;-)
 
OP
G

gorgonz

Hacker
Das Skript selbst ist mir gar nicht so wichtig, aber vielleicht kannst Du beschreiben, wie das "Multi-Instanzieren" vom Prinzip her gemacht wird. So ist mir immer noch unklar, wie ich zB ein PHP7 im System habe und über diesen Mechanismus aber ein PHP8 laufen lasse ;-)
 
gorgonz schrieb:
... gelesen, dass die "Parallelisierung" über verschiedene Namespaces ....
Das zeigt schon in die richtige Richtung. Die Bezeichnung lautet exakt "Network Namespace"
gorgonz schrieb:
.. So ist mir immer noch unklar, wie ich zB ein PHP7 im System habe und über diesen Mechanismus aber ein PHP8 laufen lasse ;-)
Was du suchst ist "processes isolation" oder "processes separation" mit network namespaces.
Obwohl einfach realisierbar weil vom kernel unterstützt, ist das Thema viel zu komplex um es hier zu beschreiben.
Schau nach unter iproute2 und Befehle wie
Code:
# ip netns add my_namespace
# ip netns show
sowie virtual devices (meine Empfehlung für dein Vorhaben wäre VETH), policy routing und routing rules.
Damit stimmt die Richtung

Gruß
Gräfin Klara
 
OP
G

gorgonz

Hacker
@Gräfin Klara: Hey, das war sehr hilfreich mit den Stichworten, danke Dir :). Gerade die Artikelserie vom Linux-Magazin war sehr anschaulich und verständlich. Versehe jetzt auch besser, warum Du denkst, dass das auch in einer bash hingeschrieben werden kann.

Ist eigentlich eine super Geschichte. Ist voll an mir vorbei gegangen und schon so alt
 
Oben