# 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:innen, die in der Passwortdatei eingetragen sind, Zugriffsrechte mit ihrem eigenen Passwort.

## Passwortdatei anlegen und Passwort festlegen

Nun muss ein Passwort für den angegebenen Benutzer 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.