Apache2 public/private Zugriff
der henry
- apache
- webserver
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
Da ich die jeweiligen cgi-scripte ebenfalls mit htaccess sichern muss, benötige ich vermutlich auch hier jeweils ein eigenes Verzeichnis ??
Meine erste Idee wäre ...
/.../www/public/cgi-bin/
/.../www/public/cgi-bin/html
/.../www/private/cgi-bin/
/.../www/private/cgi-bin/html
/.../www/personX/cgi-bin/
/.../www/personX/cgi-bin/html
Wie würdet Ihr so etwas lösen ?
Vielen Dank !!!
Lieber Henry,
ist „anyone“ ein Benutzer, der einmal mit Authentifizierung und einmal ohne an Sachen gelangen will?
Wie würdet Ihr so etwas lösen ?
Ich würde das nicht rein über .htaccess lösen, sondern mit einem Login mit Session und dann anhand von Berechtigungen. Du verwendest/schreibst cgi-Skripte? Warum dann nicht damit lösen?
Liebe Grüße
Felix Riesterer
Hallo Henry,
eigentlich ist cgi-bin ein Unterverzeichnis des Web-Rootfolders. Im Web-Root liegen die HTML-Dokumente, ggf. gibt es auch Unterverzeichnisse mit HTML.
D.h. wenn Du www.example.com und henry.example.com hättest, könnte man es so machen
| Verzeichnis | Inhalt |
|---|---|
| /.../www/www.example.com | index.html, weitere HTML- oder PHP-Dateien, .htaccess |
| /.../www/www.example.com/cgi-bin | CGI-Scripte |
| /.../www/www.example.com/images | Bilder |
| /.../www/henry.example.com | index.html, weitere HTML- oder PHP-Dateien, .htaccess |
| /.../www/henry.example.com/cgi-bin | CGI-Scripte |
| /.../www/henry.example.com/images | Bilder |
Aber sollen es verschiedene Domains sein? Oder nur eine, mit Unterordnern? Geht auch. Was "richtiger" ist? Kommt auf die Bedarfe an. Verschiedene Domains sind unterschiedliche Origins, du hast dann die Cross-Origin Trennungsregeln des Browsers wenn Du vom Browser aus in einem Bereich Inhalte des anderen Bereichs abrufen willst.
| Verzeichnis | Inhalt |
|---|---|
| /.../www/www.example.com/public | index.html, weitere HTML- oder PHP-Dateien, .htaccess |
| /.../www/www.example.com/public/cgi-bin | CGI-Scripte |
| /.../www/www.example.com/public/images | Bilder |
| /.../www/www.example.com/henry | index.html, weitere HTML- oder PHP-Dateien, .htaccess |
| /.../www/www.example.com/henry/cgi-bin | CGI-Scripte |
| /.../www/www.example.com/henry/images | Bilder |
Ich rate aber eigentlich davon ab, einen "anyone"-Ordner mit Passwortsicherung zu haben. Ein Passwort ist etwas für eine Person, ein geteiltes Geheimnis ist keins mehr. Welcher Art sind diese Inhalte? Gibt es für jeden, der auf den private-Ordner zugreifen soll, auch einen eigenen PrivateX Bereich? Eventuell kann man den geschützten anyone-Bereich per mod-alias in den jeweiligen Private-Bereichen einblenden (oder als Unix Filesystemlink).
Rolf
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.cgiwird dann das Skript
/usr/local/apache2/cgi-bin/foo.cgiausgefü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:
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.
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.
/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.
A: Für den localhost und als „default“:
/var/www/localhostErlaube 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.
Erklärung(Einschränkung):
Das ist natürlich nur auf Desktops eine nützliche Idee. Ich habe kleine private Anwendungen, für die ich den Browser und damit HTML, CSS, JS und (im Hintergrund) zumeist PHP benutze.
Das spart mir den Aufwand mit GUI-Libarys anderer Programmiersprachen. Die haben Lernkurven, dagegen ist Marilyn Monroe so flach wie ein Blatt Papier.