Apache2 public/private Zugriff
bearbeitet von RaketenwilliEin „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](https://httpd.apache.org/docs/current/suexec.html)).
„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](https://httpd.apache.org/docs/current/howto/cgi.html). 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html). 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](https://httpd.apache.org/docs/2.4/howto/access.html).
[Denke auch daran, dann https einzurichten](https://letsencrypt.org/de/docs/).
3. 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.
Apache2 public/private Zugriff
bearbeitet von RaketenwilliEin „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](https://httpd.apache.org/docs/current/suexec.html)).
„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](https://httpd.apache.org/docs/current/howto/cgi.html). Nicht aber einfache Benutzer.
Verzeichnisse sollten 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html). 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](https://httpd.apache.org/docs/2.4/howto/access.html).
[Denke auch daran, dann https einzurichten](https://letsencrypt.org/de/docs/).
3. 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.
Apache2 public/private Zugriff
bearbeitet von Raketenwilli> 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](https://httpd.apache.org/docs/current/suexec.html)).
„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](https://httpd.apache.org/docs/current/howto/cgi.html). Nicht aber einfache Benutzer.
Verzeichnisse sollten 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html). 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](https://httpd.apache.org/docs/2.4/howto/access.html).
[Denke auch daran, dann https einzurichten](https://letsencrypt.org/de/docs/).
3. 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.
Apache2 public/private Zugriff
bearbeitet von Raketenwilli> 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 können.**
**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](https://httpd.apache.org/docs/current/suexec.html)).
„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](https://httpd.apache.org/docs/current/howto/cgi.html). Nicht aber einfache Benutzer.
Verzeichnisse sollten 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html). 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](https://httpd.apache.org/docs/2.4/howto/access.html).
[Denke auch daran, dann https einzurichten](https://letsencrypt.org/de/docs/).
3. 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.
Apache2 public/private Zugriff
bearbeitet von Raketenwilli> 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.
**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](https://httpd.apache.org/docs/current/suexec.html)).
„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](https://httpd.apache.org/docs/current/howto/cgi.html). Nicht aber einfache Benutzer.
Verzeichnisse sollten 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html). 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](https://httpd.apache.org/docs/2.4/howto/access.html).
[Denke auch daran, dann https einzurichten](https://letsencrypt.org/de/docs/).
3. 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.
Apache2 public/private Zugriff
bearbeitet von Raketenwilli> 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.
**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](https://httpd.apache.org/docs/current/suexec.html)).
„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](https://httpd.apache.org/docs/current/howto/cgi.html). Nicht aber einfache Benutzer.
Verzeichnisse sollten 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html). 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](https://httpd.apache.org/docs/2.4/howto/access.html).
[Denke auch daran, dann https einzurichten](https://letsencrypt.org/de/docs/).
3. 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 unten.
Wenn Du wirklich meinst, dass Du für /cgi-bin/ einen Alias brauchst kannst du den natürlich anlegen.
Apache2 public/private Zugriff
bearbeitet von Raketenwilli> 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.
**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](https://httpd.apache.org/docs/current/suexec.html)).
„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](https://httpd.apache.org/docs/current/howto/cgi.html). Nicht aber einfache Benutzer.
Verzeichnisse sollten 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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. 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](https://httpd.apache.org/docs/2.4/howto/access.html).
3. 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 unten.
Wenn Du wirklich meinst, dass Du für /cgi-bin/ einen Alias brauchst kannst du den natürlich anlegen.
Apache2 public/private Zugriff
bearbeitet von Raketenwilli> 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.
**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](https://httpd.apache.org/docs/current/suexec.html)).
„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](https://httpd.apache.org/docs/current/howto/cgi.html). Nicht aber einfache Benutzer.
Verzeichnisse sollten 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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, wier auch die folgenden den Zugriff:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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. 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](https://httpd.apache.org/docs/2.4/howto/access.html).
3. 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 unten.
Wenn Du wirklich meinst, dass Du für /cgi-bin/ einen Alias brauchst kannst du den natürlich anlegen.
Apache2 public/private Zugriff
bearbeitet von Raketenwilli> 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 werden willst.
**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](https://httpd.apache.org/docs/current/suexec.html)).
„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](https://httpd.apache.org/docs/current/howto/cgi.html). Nicht aber einfache Benutzer.
Verzeichnisse sollten 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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, wier auch die folgenden den Zugriff:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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. 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](https://httpd.apache.org/docs/2.4/howto/access.html).
3. 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 unten.
Wenn Du wirklich meinst, dass Du für /cgi-bin/ einen Alias brauchst kannst du den natürlich anlegen.
Apache2 public/private Zugriff
bearbeitet von Raketenwilli> 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 werden willst.
**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](https://httpd.apache.org/docs/current/suexec.html)).
„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 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](https://httpd.apache.org/docs/current/howto/cgi.html). Nicht aber einfache Benutzer.
Verzeichnisse sollten 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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, wier auch die folgenden den Zugriff:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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. 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](https://httpd.apache.org/docs/2.4/howto/access.html).
3. 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 unten.
Wenn Du wirklich meinst, dass Du für /cgi-bin/ einen Alias brauchst kannst du den natürlich anlegen.
Apache2 public/private Zugriff
bearbeitet von Raketenwilli> 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 werden willst.
**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](https://httpd.apache.org/docs/current/suexec.html)).
„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 eigene Skripte anlegen könnten.**
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](https://httpd.apache.org/docs/current/howto/cgi.html). Nicht aber einfache Benutzer.
Verzeichnisse sollten 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 ändern.
~~~apache
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](https://datatracker.ietf.org/doc/html/rfc5737)) 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, wier auch die folgenden den Zugriff:](https://httpd.apache.org/docs/2.2/de/vhosts/name-based.html):
A: Für den localhost und als „default“: `/var/www/localhost`
[Erlaube dort nur Zugriffe aus dem Netzwerk 127.0.0.0/8](https://httpd.apache.org/docs/2.4/howto/access.html) - 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)](https://datatracker.ietf.org/doc/html/rfc1918) - 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. 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](https://httpd.apache.org/docs/2.4/howto/access.html).
3. 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 unten.
Wenn Du wirklich meinst, dass Du für /cgi-bin/ einen Alias brauchst kannst du den natürlich anlegen.