Linux Server - Apache

> Linux Server - Apache

> > # Zugriffskontrolle beim Apache

> > Die Fragen der Zugriffskontrolle - und überhaupt alle Fragen der Konfiguration des Hauptservers - waren früher in der Datei access.conf abgelegt. Heute werden sie auch in der zentralen Konfigurationsdatei abgelegt, die wir auf der letzten Seite schon beschrieben haben.

> > Die wesentlichen Einstellungen bezüglich der Zugriffskontrolle werden in den schon beschriebenen Klammerungen

> > - `<Directory Pfad> ... </Directory>`
> > - `<Location URL> ... </Location>`
> > - `<Files Dateinamensmuster> ... </Files>`
> > vorgenommen. Damit ist es möglich, jedem Verzeichnis, jeder (dateisystempositionsunabhängigen) URL und jeder Datei bestimmte Einstellungen mitzugeben, die sich auf die Fragen beziehen, was darin alles geschehen darf oder nicht. Zusätzlich sind verschiedene Angaben möglich, wer Zugriff auf das entsprechende Element (Verzeichnis, URL oder Datei) haben soll und wer nicht.

> > ### Optionen

> > Jedes der genannten Klammernpaare kann einen Befehl `Options` enthalten, der bestimmte Optionen setzt, die dann für das entsprechende Element gültig ist. Dem `Options`-Befehl folgen die entsprechenden Optionen, entweder einfach, oder mit vorgestelltem Plus oder Minuszeichen. Ein Pluszeichen hängt die entsprechende Option an, ein Minuszeichen zieht sie ab (deaktiviert sie). Die folgenden Optionen werden erkannt:

> > `All`
> >   Alle Optione außer MultiViews werden gesetzt. Das ist die Grundeinstellung.
> > `ExecCGI`
> >   In diesem Verzeichnis dürfen CGI-Scripts ausgeführt werden.
> > `FollowSymLinks`
> >   Symbolischen Links wird gefolgt. Mit dieser Technik lassen sich auch Verzeichnisse außerhalb des DocumentRoot in den Server integrieren.
> > `Includes`
> >   ServerSideIncludes sind in dem Verzeichnis erlaubt.
> > `IncludesNOEXEC`
> >   ServerSideIncludes sind in dem Verzeichnis erlaubt, die Ausführung von `#exec` und ein Einbinden von CGI-Scripts mittels `#include` sind verboten.
> > `Indexes`
> >   Wenn eine URL auf ein Verzeichnis stößt und dieses Verzeichnis keine Index-Datei besitzt (siehe DirectoryIndex), dann wird ein Inhaltsverzeichnis des Verzeichnisses ausgegeben.
> > `MultiViews`
> >   Enthält eine URL einen Dateinamen ohne Erweiterung, das Verzeichnis enthält aber keine Datei dieses Namens, so wird - sofern eine Datei dieses Namens mit Erweiterung existiert, diese Datei angezeigt.
> > `SymLinksIfOwnerMatch`
> >   Symbolische Links werden nur verfolgt, wenn der Eigentümer des Links der selbe User ist, wie der, dem das Ziel des Links gehört.

> > Ein Beispiel mag die Anwendung der Optionen verdeutlichen:

> >       <Directory /usr/local/httpd/htdocs/test>
> >         Options -Indexes -FollowSymLinks -ExecCGI +MultiViews
> >       </Directory>

> > - Das Verzeichnis /usr/local/httpd/htdocs/test wird - falls die Datei index.html nicht existiert - nicht angezeigt, wenn keine Datei sondern nur das Verzeichnis in der URL angegeben wurde.
> > - Symbolischen Links wird nicht gefolgt, auch wenn sie im Verzeichnis existieren.
> > - Die Ausführung von CGI-Scripts in diesem Verzeichnis ist verboten.
> > - Falls eine Datei ohne Endung gesucht wird, aber nur eine Datei mit selben Namen aber mit Endung existiert, so wird diese angezeigt.

> > ### Zugriffsrechte für Domains und Rechner

> > Manche Verzeichnisse (oder URLs oder Dateien) sollen nur von bestimmten Rechnern oder Domains aus zu sehen sein. Um das zu erreichen, gibt es eine Handvoll Befehle, die auch immer innerhalb der verschiedenen Klammerungen stehen.

> > Der erste Befehl definiert die Reihenfolge der Abarbeitung der Regeln von Zugriff erlaubt und Zugriff verweigert. Gültig sind entweder:

> >       order allow,deny

> > oder

> >       Order deny,allow

> > Die einzelnen Regeln werden festgelegt mit den Befehlen

> >       Deny from Rechnername oder IP-Adresse oder Muster
> >       Allow from Rechnername oder IP-Adresse oder Muster

> > Angegeben werden die folgenden Möglichkeiten:
> > Der Begriff `all`
> >   Einfach alle
> > Ein Namen einer Domain wie `mydomain.de`
> >   Alle Rechner der genannten Domain
> > Eine vollständige IP-Adresse wie `123.45.67.89`
> >   Genau dieser Rechner
> > Ein Teil einer IP-Adresse wie `10.230`
> >   Alle Rechner des Netzes 10.230.x.x
> > Eine IP-Adresse/Netzmaske entweder in der Form `10.230.0.0/255.255.0.0` oder `10.230.0.0/16`
> >   Die Rechner des angegebenen Subnetzes.

> > Auch das soll wieder durch ein Beispiel erhellt werden:

> >       <Directory /usr/local/httpd/htdocs/test>
> >         Order allow,deny
> >         Allow from all
> >       </Directory>

> > Das Verzeichnis /usr/local/httpd/htdocs/test darf von aller Welt angesehen werden.

> >       <Directory /usr/local/httpd/htdocs/test>
> >         Order deny,allow
> >         Deny from all
> >         Allow from 10.230
> >       </Directory>

> > Das Verzeichnis darf jetzt nur von Rechnern angesehen werden, die aus dem Netz 10.230.x.y stammen.

> > ### Zugriffsrechte über Userauthentifizierung

> > Jedes der geklammerten Elemente kann auch über eine Art Userauthentifizierung geschützt werden. Dazu müssen zunächst einmal User- bzw. Gruppendateien angelegt werden. In der Klammerung kann also stehen:

> >       AuthUserFile /etc/httpd/passwd
> >       AuthGroupFile /etc/httpd/group

> > Die Namen und Pfade der Dateien sind frei wählbar. Beginnen sie nicht mit einem Slash (sind also keine absolute Pfade), so werden sie vom ServerRoot aus gesucht. Die Passwortdatei enthält pro User eine Zeile im Format

> >       Username : verschl.Passwort

> > die Gruppendatei hingegen hat das Format:

> >       Gruppenname : User1 User2 User3

> > Mit dem Unixbefehl htpasswd können beliebige Passwortdateien angelegt und verwaltet werden, die Gruppendateien können mit jedem beliebigen Editor angelegt werden. Die Syntax für htpasswd ist - falls die Passwortdatei noch nicht existiert:

> >       htpasswd -c Passwortdatei Username

> > Falls die Datei schon existiert sollte das -c weggelassen werden.

> > Zu den Angaben der Dateien brauchen wir noch zwei weitere, einmal den Typ der Authentifizierung und zum Anderen eine Textzeile, die im Passwortdialog dargestellt wird. Beide sind notwendig, damit es funktioniert.

> >       AuthType Basic
> >       AuthName "Zugriff für große Geheimnisse"

> > Mit dem Befehl Require können jetzt Bedingungen formuliert werden, wer auf das Verzeichnis zugreifen darf. Dabei erwartet Require eine der folgenden Formen:

> > `Require user Username`
> >   Nur der genannte User - oder die genannten User (mit Leerzeichen voneinander getrennt) dürfen auf das Verzeichnis (oder die URL oder die Datei) zugreifen.
> > `Require group Gruppenname`
> >   Nur Mitglieder der genannten Gruppe - oder der Gruppen dürfen zugreifen.
> > `Require valid-user`
> >   Jeder dem System bekannte User (der also einen Eintrag in der angegebenen Passwortdatei hat) darf zugreifen.

> > Das folgende Beispiel zeigt ein solchermaßen geschütztes Verzeichnis:

> >       <Directory /usr/local/httpd/htdocs/test>
> >       AuthType Basic
> >       AuthName "Zugriff für große Geheimnisse"
> >       AuthUserFile /etc/httpd/passwd
> >       Require user efka
> >       </Directory>

> > Durch die Angabe beliebiger Passwortdateien können verschiedene Verzeichnisse so für verschiedene User zugänglich gemacht werden, ohne dass die verschiedenen Usereinträge sich stören würden. Es ist theoretisch sogar denkbar, die Passwortdatei in das zu schützende Verzeichnis zu legen, allerdings ist das kein guter Stil.

> > ### .htaccess Dateien

> > Die gesamten Einstellungen, die oben beschrieben wurden, sind in der zentralen Konfigurationsdatei natürlich nur dem User zugänglich, der Zugriff auf diese Datei hat und den Webserver nach einer Änderung neu starten kann.

> > Um auch anderen Usern die Möglichkeit zu geben, derartige Einstellungen vorzunehmen, gibt es eine sehr elegante Möglichkeit mit den sogenannten `.htaccess`-Dateien.

> > Dabei handelt es sich um Dateien, die direkt in ein zu schützendes Verzeichnis abgelegt werden und die genau die selben Einstellungen ermöglichen, wie oben besprochen. Diese Dateien werden jedesmal vom Webserver automatisch eingelesen, sobald eine Anfrage in ein Verzeichnis wechseln will. Der Webserver muß also nicht neu gestartet werden und jeder User kann in sein Verzeichnis solche Dateien ablegen.

> > Der Name dieser Dateien ist normalerweise `.htaccess`, das muß aber nicht zwangsläufig so sein, es ist einstellbar in der zentralen Konfigurationsdatei. Mit der Direktive

> >       AccessFileName .htaccess

> > wird hier der Name der Zugriffsdatei festgelegt. Zusätzlich muß aber - auch in der zentralen Datei - jedem Verzeichnis noch erlaubt werden, solche Zugriffsdateien zu verwenden. Dazu gibt es die Direktive `AllowOverride`. Sie legt fest, ob die zentral verwalteten Einstellungen durch Zugriffsdateien in einem Verzeichnis verändert werden dürfen. Diese Anweisung hat innerhalb von <Directory> Blöcken gültigkeit. Die wichtigsten Formen sind:

> > `AllowOverride None`
> >   Zugriffsdateien im Verzeichnis werden nicht ausgewertet.
> > `AllowOverride All`
> >   Zugriffsdateien im Verzeichnis werden ausgewertet und alle Features sind erlaubt.

> > Außerdem existieren noch die - seltener gebrauchten Einschränkungen:

> > `AllowOverride AuthConfig`
> >   Zugriffsdateien im Verzeichnis werden ausgewertet. Nur Direktiven für die User/Gruppenauthentifizierung sind erlaubt.
> > `AllowOverride Limit`
> >   Zugriffsdateien im Verzeichnis werden ausgewertet. Nur Direktiven für die Domain/Rechner-Zugriffssteuerung sind erlaubt.
> > `AllowOverride Options`
> >   Zugriffsdateien im Verzeichnis werden ausgewertet. Nur Direktiven für Optionen sind erlaubt.

> > Die letztgenannten Angaben sind auch kombinierbar, etwa in der Form

> >       AllowOverride AuthConfig Limit

> > Wenn diese Voraussetzungen erfüllt sind, dann kann ein User eine solche Zugriffsdatei in ein Verzeichnis legen und damit individuell bestimmen, welche Eigenschaften dieses Verzeichnis hat. Eine exemplarische Zugriffsdatei könnte also z.B. folgendermaßen aussehen:

> >       # .htaccess für das Verzeichnis foo

> >       # Zuerstmal die Zugriffsdaten
> >       AuthType Basic
> >       AuthName "Zugriff auf FOO"
> >       AuthUserFile /etc/httpd/passwd
> >       Require valid-user

> >       # In diesem Verzeichnis sind CGI-Scripts erlaubt
> >       Options +ExecCGI

> >       # Nur Rechner aus dem Netz 10.230.0.0 dürfen zugreifen
> >       Order deny,allow
> >       Deny from all
> >       Allow from 10.230

> > [ Zurück zur Apache-Hauptseite ] [ Nächste Seite ]