der henry: Apache2 public/private Zugriff

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 !!!

  1. 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

  2. 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

    --
    sumpsi - posui - obstruxi
  3. 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.

    1. 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.

      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.