3.3.9 Beispiel Zugangsschutz

Ein typisches Beispiel, um Ihren Server in einfacher Weise zu schützen, ist die Konfiguration eines passwortbasierten Zugangsschutzes. Dieser Schutz ist nicht sehr sicher, aber er verhindert, dass "robots" auf die Seite kommen und Schwachstellen (z.B. in Formularfeldern) ausprobieren können.

Wichtig

Bitte konfigurieren Sie Ihren Server mit Zugangsschutz, damit die kommende PHP-Programmierung gefahrlos durchgeführt werden kann.

Für den Apache gibt es viele Arten des Zugangsschutzes. Hier wird ein einfach zu realisierender Zugangsschutz gewählt. Doch zuerst muss überlegt werden, welche Dokumente der Apache-Webserver überhaupt an einen Client ausliefern kann.

Der Zugangsschutz soll für alle Dokumente gelten, die über den Apache zur Verfügung gestellt werden. Mit der Direktive DocumentRoot wird das "Root-Verzeichnis" angegeben. Unterhalb dieses Verzeichnisses können alle Dokumente per Client Request angefragt werden. Aber beim Apache sind Links in andere Verzeichnisse möglich, sofern diese mit der Direktive Options FollowSymLinks erlaubt werden. Es reicht also nicht, wenn man den Zugangsschutz auf der Ebene DocumentRoot einrichtet und gleichzeitig FollowSymLinks zulässt.

Konfigurationsanweisungen in der apache2.conf

In der apache2.conf steht folgender Abschnitt, der sich auf alle Verzeichnisse des Servers bezieht und sehr sinnvoll ist:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>
  • Durch AllowOverride None werden .htaccess-Dateien verboten (sofern sie in Unterverzeichnissen nicht explizit wieder zugelassen werden).
  • Durch Require all denied wird der Zugriff komplett gesperrt.

Anschließend gibt es in der apache2.conf Direktiven, die sich auf ein Unterverzeichnis beziehen und damit die oben genannten Regeln aufheben.

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
  • Durch AllowOverride None werden auch hier alle .htaccess-Dateien verboten, was an dieser Stelle überflüssig ist, da dieses Verbot bereits auf einer höheren Verzeichnisebene erfolgte.
  • Durch Require all granted wird der Zugriff komplett geöffnet. Es sind also prinzipiell alle Dokumente unterhalb von /var/www/ abrufbar. Hier muss also der Zugangsschutz ansetzen.

Zugangsschutz einrichten

Der neue Abschnitt mit dem Zugangsschutz soll wie folgt aussehen:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    AuthType Basic
    AuthName "Mein Zugangsschutz"
    AuthUserFile "/etc/apache2/htpass"
    Require user IhrUserName
</Directory>
  • AuthType gibt die generelle Art des Schutzes an. Wenn die Seite aufgerufen wird, erzeugt der Browser ein Fenster für eine Passwortabfrage.
  • AuthName ist für den Text zuständig, der in dem Fenster für die Passwortabfrage angezeigt wird. Hier können Sie (fast) beliebigen Text eingeben.
  • AuthUserFile enthält die Angabe der Passwortdatei.
  • Require user IhrUserName wird nun, gegenüber den ursprünglichen Einstellungen granted, geändert in user und, mit der Eingabe eines Nutzernamens (bitte ändern Sie IhrUserName in einen sinnvollen Nutzernamen), wird der Zugriff entsprechend eingeschränkt. Wird anstelle eines Nutzernamens valid-user angegeben, so haben alle Nutzer, die in der Passwortdatei eingetragen sind, Zugriffsrechte mit ihrem eigenen Passwort.

Passwortdatei anlegen und Passwort festlegen

Nun muss ein Passwort für den angegebenen Nutzer erstellt werden. Hierzu gibt es das Linux-Kommando htpasswd -cb passwdfile username. Also in der Kommandozeile in das Verzeichnis /etc/apache2 wechseln und dort den Befehl eingeben:

htpasswd -cb htpass IhrUserName (Passwort)

Anschließend den Webserver neu starten und die Webseite aufrufen. Dann sollte ein Fenster für die Eingabe des Passwortes sichtbar werden.