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

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>

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 ]