Antwort an „Raketenwilli“ verfassen

Ein „Frohes Fressfest“ wünsche ich erst einmal!

Hallo,

ich habe mal eine grundsätzliche Frage, da ich einen Webserver (apache2) neu unter Debian aufbauen will. Kein Node usw.

Ich benötige aktuell bzw. für die Zukunft folgendes:

Zugriff "anyone" über htaccess gesichert ... eigene Verzeichnisstruktur und cgi-Skripte Zugriff "anyone" ohne Passwort/Sicherung ... eigene Verzeichnisstruktur und cgi-Skripte Zugriff nur "PersonX" über htaccess gesichert ... eigene Verzeichnisstruktur und cgi-Skripte

Also. Ich kann mit meiner Antwort daneben liegen.

Das liegt aber daran, dass Du nicht vollständig beschrieben hat, was Du erreichen willst. Du nennst zum Beispiel „personX“. Was hier fehlt ist die Information, ob das ein Verzeichnis sein soll, auf welches (nur) die „personX“ nur via Web Zugriff haben soll oder ob diese dort auch einen (wie auch immer gearteten) Zugriff auf das Dateisystem (direkt, ssh, ftp, nfs, webuplaod,„tausend“ andere Möglichkeiten) haben soll, also eigene Dateien und Verzeichnisse anlegen können soll. Mithin, ob Du Hoster werden willst.

Grundsätzlich gilt, dass alles, was Du konfigurieren kannst, in Abhängigkeit von weiteren Umständen nützlich, überflüssig, hinderlich oder kreuzgefährlich sein kann.

Es stellt sich aber auch die Frage, wofür Du das etwas angestaubte cgi-Zeug zu brauchen glaubst.

Du willst doch nicht etwa alte Perl- oder gar Bash-Skipte ausführen oder Deine Webseite in c oder c++ programmieren? Für modernere Skriptsprachen gibt es Module (sehr schnell) oder etwas wie „FPM“ (erlaubt suexec und bietet mehr Sicherheit im Multi-USER-Hosting).

„suexec“ wäre zu konfigurieren und zu nutzen, wenn „personX“, also „person0815“ und „person0816” schreibenden Zugriff aufs Dateisystem haben soll (s.o.) und Du dieser nicht zu 100% vertraust.

Eigentlich braucht man das /cgi-bin/ - Verzeichnis nicht. Man kann cgi (also Skripte) auch generell und in jedem Verzeichnis erlauben. In manchen Umgebungen ist das aber nicht erwünscht, z.B. wenn Benutzer selbst eigene Skripte anlegen könnten und das aber NICHT dürfen sollen.

In dem Fall wird „auf neutralem Boden“ - also an einer Stelle außerhalb des Document-Root ein Verzeichnis angelegt (Das Manual schlägt /usr/local/apache2/cgi-bin/ vor.) und für die Webseiten vorgeschlagen einen Alias auf ein Verzeichnis zu setzen, in welches nur der Root oder ein (oder wenige) berechtigte(r) Benutzer schreiben können. Nicht aber einfache Benutzer.

Verzeichnisse sollten in diesem Fall dem Root und (vielleicht) einer speziellen Gruppe (WebAdmins) gehören, Rechte 775. Dateien darin mit den selben Rechten. Also dürfen der Root und die Gruppe WebAdmins darin Vereichnisse und Dateien anlegen, jeder darf diese lesen und ausführen. Aber eben nicht hinzufügen, löschen oder ändern.

ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"

Bei Zugriffen auf

  • http[s]://DeinHost.example/cgi-bin/foo.cgi

wird dann das Skript

  • /usr/local/apache2/cgi-bin/foo.cgi

ausgeführt.

Bei Deiner Installation solltest Du überlegen, ob Du das tatsächlich brauchst. Ich vermute nämlich, dass es nur eine Person gibt, die Skripte ablegen kann: Du selbst. In dem Fall kann man das Ausführen von CGI-tatsächlich einfach in jedem Ordner unterhalb von Document-Root erlauben.

Achte einfach darauf, dass der Webserver (läuft in der Grundkonfiguration von Debian unter dem Benutzer und der Gruppe „www-data“ keine Schreibrechte unterhalb von Document-Root hat.

Was jetzt die Verzeichnisse betrifft würde ich wie folgt vorschlagen:

  1. Behalte '/var/www/html/' für Zugriffe ohne Hostnamen (also bei Adressierung mit der IP-Adresse z.B. http://192.0.2.1) bei. Kein CGI. Allenfalls eine Webseite, die sagt, dass es hier nichts gibt.

  2. Lege ein Verzeichnis für jeden gewünschen Hostname an und konfiguriere dafür, den Zugriff::

A: Für den localhost und als „default“: /var/www/localhost

Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8 - Darin kannst Du dann Sachen unterbringen, die (womöglich) ohne weitere Authentifizierung abrufbar sein sollen.

B: Für den Netzwerkname bei Dir zu Hause: /var/www/example.home

Erlaube dort nur Zugriffe aus Deinem lokalen Netzwerk (z.B. 192.168.1.0/24) - Darin kannst Du dann Sachen unterbringen, die (womöglich) ohne weitere Authentifizierung abrufbar sein sollen. Das gilt aber nur, wenn Du mit dem Rechner nicht an fremden Netzen teilnimmst - sonst musst Du den Zugriff z.B. mit Benutzername und Passwort absichern.

C: Für den öffentlichen Netzwerkname

Dein Server soll vermutlich aus dem Netz z.B. dem Name „domain.example“ erreichbar sein. Das erreichst Du mit der vhost-Konfiguaration. Dann kannst Du unterhalb von /var/www/domain.example einfach die weitere Verzeichnis /var/www/domain.example/private, /var/www/domain.example/Person_A, /var/www/domain.example/Person_B` einrichten und dort den Zugriff beschränken.

Denke auch daran, dann https einzurichten.

  1. Du brauchst auch Verzeichnisse für Daten, auf die kein Webzugriff möglich sein soll - Im Idealfall außerhalb aller Document-Roots. Etwas wie

/var/www-data/

Das kann dann auch weitere Unterordner mit Rechten für unterschiedliche Benutzer haben. Siehe suexec, weiter oben.

Wenn Du wirklich meinst, dass Du für /cgi-bin/ einen Alias brauchst kannst du den natürlich anlegen.

freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen