Tutorials - Apache unter Windows Teil 2

image
Folgende Fragen werden hier erklärt:

Verzeichnisse schützen

Auf vielen Webseiten hast Du es schon gesehen: Es gibt einen Bereich, bei dem ein Name und Kennwort angefordert wird, wenn man auf ihn zugreifen möchte. Dieser Bereich steht nur den Leuten zur Verfügung, die die Zugangscodes haben. So ist es möglich, bestimmte Inhalte einer Seite nur einer bestimmten Benutzergruppe zugänglich zu machen, oder aber für sich selber einen Admin-Bereich einzurichten, auf den man nur selber Zugriff hat, und wo man Dateien liegen hat, die man zur Pflege der Seiten oder des Servers braucht, etc. Hier möchte ich Dir erklären, wie das funktioniert:

Die Authentifizierung mittels Passwort erfolgt so:
Der Client (unser Browser) sendet den Namen und das Passwort an den Apache Webserver. Dieser sieht in einer speziellen Datei nach, ob der Client zugriffsberechtigt ist oder nicht.
Es ist möglich eine ganze Reihe von Personen in Gruppen zusammenzufassen und diesen Gruppen als Ganzes den Zugang zu erlauben oder zu verbieten.
Die Authentifizierungsdatei wird mit einem kleinen Programm erstellt, welches sowohl bei der UNIX/Linux- als auch der Windows-Version des Apache mitgeliefert wird.
Dieses Programm heißt "htpasswd" und findet sich im "bin" Verzeichnis von Apache. Es arbeitet kommandozeilenorientiert. Was heisst das für uns? Wir sollten schon mal mit der DOS-Konsole gearbeitet haben, dann fällt es uns zumindest etwas leichter.

Dieses Beispiel geht davon aus, daß ein Ordner "F:\Web" existiert, in dem unsere Homepage-Dateien liegen. In diesem Ordner F:\Web soll nun ein Verzeichnis "Privat" eingerichtet werden. In diesem Verzeichnis soll eine "privat.html" liegen. Wenn diese aufgerufen wird, soll eine Passwortabfrage erfolgen.

Funktionsweise
Die .htaccess-Datei wird bei jedem Zugriff auf ein Verzeichnis oder eine Datei im und unterhalb des Verzeichnisses der .htaccess-Datei gelesen und ausgewertet. Wird z.B. von einem Nutzer die Datei "geheim.htm" im Verzeichnis "\Privat" abgefragt, so schaut der Webserver erst in allen höher gelegenen und im Verzeichnis "\Privat" nach einer vorhandenen .htaccess-Datei.

.htaccess erstellen
Zuerst musst Du diese .htaccess-Datei erstellen. Am besten erstellst Du mit dem Windows-Editor eine ".htaccess.txt"-Datei. In diese schreibst Du folgendes:

AuthType Basic
AuthName "Privater Bereich"
AuthUserFile c:/apache/cgi-bin/.htpasswd
require valid-user

Was bedeutet das?

AuthType
Der üblicherweise verwendete Authorisierungstyp ist Basic; andere mögliche Typen sind z.b. PGP oder Kerberos, diese werden aber z.B. vom Apache-Server nicht unterstützt. In der vorliegenden Beschreibung wird nur auf Basic eingegangen, dieser Typ benutzt als Paßwortdatei eine weitere Textdatei.

AuthName
Kurze Beschreibung des geschützten Web-Bereichs. Diese Beschreibung wird dem Anwender angezeigt, bevor Username und Password abgefragt werden.

AuthUserFile
Dateibezeichnung und Speicherort der Paßwortdatei. In dieser Datei werden die angelegten Benutzernamen nebst Kennwörtern gespeichert.

require
Mit der require-Directive wird angegeben, nach welchem Kriterium Benutzer zugelassen werden sollen. Es gibt hier drei alternative Möglichkeiten :

 

Die ".htpasswd"-Datei liegt in diesem Beispiel im "cgi-bin"-Verzeichnis von Apache, aber man kann sie natürlich auch woanders speichern.

Warum die Datei als ".txt-Datei" speichern?
Wenn Du eine .htaccess-Datei abspeicherst, wird Windows Dir wahrscheinlich die Meldung "Bitte geben Sie einen Dateinamen ein" anzeigen. Deshalb die ".txt"-Endung. Diese Datei speicherst Du im zu schützenden Verzeichnis ab, also in "F:\Web\Privat".

Nun öffne eine DOS-Box und gib folgendes ein:

cd\ ---> wechselt auf Laufwerk "C:/"

cd apache\bin ---> wechselt in's "bin-Verzeichnis" von Apache

Zuerst benennen wir unsere ".htaccess.txt" in ".htaccess" um. Das machen wir so:

ren f:\web\privat\.htaccess.txt .htaccess

Dann noch einen Benutzer anlegen, der sich in dem geschützten Bereich einloggen darf:

htpasswd -c c:\apache\cgi-bin\.htpasswd testuser

Gib danach das Passwort für den Benutzer testuser ein (2x). Du wirst jetzt unter c:\apache\cgi-bin\.htpasswd eine Passwortdatei finden, in der der Benutzer "testuser" und sein Passwort gespeichert sind.
Übrigens: der Schalter "-c" hinter dem Befehl "htpasswd" bedeutet "create", d.h. eine neue Datei wird angelegt. Wenn eine Datei schon besteht und zusätzlich ein Benutzer eingetragen werden soll, muss der Befehl ohne "-c" abgesetzt werden, also so:

htpasswd c:\apache\cgi-bin\.htpasswd testuser

Ja, das wär's auch schon. Ach ja, allerdings sind wir noch nicht ganz fertig, es muss noch ein Eintrag in der httpd.conf des Apache-Servers geändert werden. Öffne also besagte Datei im Editor und suche nach".htaccess". Du wirst zu solch einer Stelle kommen:

------------- Ausschnitt aus der httpd.conf --------------------

# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
AllowOverride None ----> Das änderst Du ab in AllowOverride All

----------------------------------------------------------------

Erst durch Änderung dieser Zeile wird der Passwortschutz aktiv. Die httpd.conf speichern und - ganz wichtig - den Server wie immer nach Änderungen an der httpd.conf neu starten, sonst kann der Test schiefgehen.
Dann kannst Du den Test starten ob es auch wirklich klappt mit dem Verzeichnisschutz.

Testen des Verzeichnisschutzes

Screenshot

Was passiert, wenn Du nun im Browser versuchst, auf die geschützte Zone zuzugreifen? Versuch' es mal! Setze in der Adressleiste des Browsers folgende Adresse ab:

http://localhost/privat

Siehe da: eine Eingabeaufforderung geht auf, mit der Bitte, Username und Passwort einzugeben.


Screenshot

Wenn Du nun bei Benutzername "testuser" und bei Passwort Dein vergebenes Passwort eingibst, wirst Du auf die "privat.html" oder wie immer Du die Datei genannt hast, weitergeleitet.
Wenn Du jedoch auf "Abbrechen" klickst, wirst Du wohl so eine Meldung sehen:

Du bekommst eine sogenannte "401" -Fehlermeldung, die da sagt, daß Du nicht berechtigt bist, den gewünschten Inhalt angezeigt zu bekommen. Wie Du diese Fehlermeldung Deinen Wünschen anpassen kannst, soll das folgende Kapitel zeigen.


[Home]    [Übersicht Tutorials]    [^ nach oben]

Fehlermeldungen anpassen (.htaccess)

Toll, Du hast Dich bis hierher durchgekämpft und bei Dir läuft der Apache? Gut, dann ist es an der Zeit zu erfahren, wie man dem Betrachter Deiner Seiten angepasste "Error-Documents" serviert. Jedem kann mal ein Fehler passieren, und gerade beim Verlinken von Webseiten schleichen sich diese manchmal ein. Dann ist es doch schöner, dem Betrachter eine angepasste Fehlerseite zu zeigen, mit einem Link der ihn zurück auf Deine Seiten führt, anstatt ihn einfach mit einer Apache-Standardmeldung im Regen stehen zu lassen. Schauen wir doch mal, was man im Fall der oben gezeigten Meldung machen kann. Eine Information vorweg: Es muss ein Eintrag in der .htaccess-Datei vorgenommen werden. Schauen wir mal, was da geht:
Erstmal erstellen wir ein angepasstes Fehlerdokument: Erstelle eine HTML-Datei mit folgendem Inhalt:

<html>

<head>
<title>401-Error</title>
</head>

<body>
<p>401-Fehler: Es wurde kein Zugriff auf die angeforderte Seite gewaehrt.</p>
<p>Zurueck zur <a href="http://xyz.dyndns.org" target="_self">Startseite</a>
oder zur <a href=javascript:history.back()>vorherigen Seite</a></p>
</body>

</html>

Diese Datei dient nur zu Testzwecken und kann natürlich nachher beliebig angepasst werden. Erstelle im Root-Verzeichnis Deines Webservers, (hier F:\Web) einen Ordner namens "error". In diesen speichere die Datei als "401.html" ab. Das hat den Vortei, daß Du sofort eine gewisse Ordnung in Deinen Dokumenten hast, und in diesen Ordner alle angepassten Dateien speichern kannst. Nun musst Du nur noch deinem Server sagen, daß er diese Seite im Falle eines 401-Fehlers anzeigen soll. Öffne also die .htaccess-Datei und trage folgendes als letzte Zeile ein:

ErrorDocument 401 /error/401.html --->  das ist die sog. lokale Weiterleitung

Hierbei wird eine lokale Fehlerseite angezeigt. Es darf kein relativer Pfad eingesetzt werden, sondern nur der Pfad vom 'public_html' Verzeichnis. Speichere die Datei und schliesse sie.

Folgende Einträge in die .htaccess wären noch möglich:

ErrorDocument 401 http://andere-url.de/401.html ---> das ist die sog. externe Weiterleitung

Hier wird die URL zu einem anderen Server eingetragen.

ErrorDocument 401 "Zugang nicht gewaehrt." ---> das ist der sog. Plain Text

Beim Plain Text wird die Fehlermeldung als ASCII Text an den Client gesendet.

Testen der angepassten Fehlerseite

Diesmal brauchst Du den Server nicht neu starten, denn Du hast ja nicht die "httpd.conf" editiert, sondern nur die ".htaccess".

Zum Testen brauchst Du nur im Browser eingeben:

http://localhost/privat

Dann im Fenster auf "Abbrechen" klicken, und die selbst erstellte Seite sollte angezeigt werden. Gut, nicht ?
Das kannst Du natürlich auch für andere Fehlermeldungen machen. Aber erst einmal: Was sind die gängigen Fehlermeldungen?

[Home]    [Übersicht Tutorials]    [^ nach oben]

Übersicht über die Fehlercodes

Hier eine Übersicht über die gängigen Fehlermeldungen:

Error 400 bad_request
Der Browser (oder Proxy) hat eine ungültige Anfrage gesendet, die vom Server nicht beantwortet werden kann.

Error 401 auth_required
Der Server kann nicht verifizieren ob, der User authorisiert ist, auf eine bestimmt URL zuzugreifen. Dabei kann ein falsches Passwort eingegeben worden sein oder der Browser kann die geforderten Referenzen nicht übermitteln

Error 403 forbidden
Der Webserver verweigert den Zugriff auf das angeforderte Verzeichnis. Entweder ist der Zugriff auf die Verzeichnisstruktur nicht erlaubt oder das Verzeichnis ist zugriffsgeschützt.

Error 404 not_found
Die angeforderte Datei ist nicht vorhanden

Error 408 request_timeout
Nach einer gewissen Zeit, ohne das auf eine Anfrage eine Antwort geliefert werden konnte, schliesst der Webserver die Verbindung

Error 500 internal_server_error
Die Proxy-Anfrage kann nicht ausgeführt werden. Es ist im Server ein interner Fehler aufgetreten. Der Server ist entweder überlastet oder ein Fehler in einem CGI-Script ist aufgetreten.

Weitere (nicht so häufige) Fehler sind:

Error 412 precondition_failed
Error 413 entity_too_large
Error 414 uri_too_large
Error 415 unsupported_media_type
Error 501 not_implemented
Error 502 bad_gateway
Error 503 service_unavailable
Error 506 variant_also_varies

[Home]    [Übersicht Tutorials]    [^ nach oben]

Fehlermeldung anpassen (httpd.conf)

Es gibt noch einen anderen Weg, um dem Server zu sagen, wo die Error-Dokumente liegen, die er im Falle eines Fehlers anzeigen soll. Und zwar - wen wird's wundern - in der httpd.conf. Öffne also Deine httpd.conf wieder im Editor und suche nach "error response" Du kommst zu dieser Stelle:

--------- Ausschnitt aus der httpd.conf -------------

#
# Customizable error response (Apache style)
# these come in three flavors
#
# 1) plain text
#ErrorDocument 500 "The server made a boo boo.
# n.b. the single leading (") marks it as text, it does not get output
#
# 2) local redirects
#ErrorDocument 404 /missing.html
# to redirect to local URL /missing.html
#ErrorDocument 404 /cgi-bin/missing_handler.pl
# N.B.: You can redirect to a script or a document using server-side-includes.
#
# 3) external redirects
#ErrorDocument 402 http://some.other-server.com/subscription_info.html
# N.B.: Many of the environment variables associated with the original
# request will *not* be available to such a script.

#
# Customize behaviour based on the browser
#
-----------------------------------------------------

Du weisst bestimmt schon selber, was nun zu tun ist: Erstelle ein html-Dokument für eine 404-Fehlermeldung (Pfad oder Datei nicht gefunden) und speichere sie wieder im Ordner "error" ab, diesmal als "404.html". Dann fügst Du in dem oben gezeigten Abschnitt unter "local redirects" die Zeile ein:

ErrorDocument 404 /error/404.html

Dann die Datei speichern, und das Ergebnis wieder testen, allerdings muss der Server diesmal neu gestartet werden. Das Ganze testest Du, indem Du eine Adresse angibst, die auf Deinem Server nicht vorhanden ist, also z.B. "http://localhost/test.html". Du bekommst nun Deine spezielle Fehler-Seite angezeigt.

[Home]    [Übersicht Tutorials]    [^ nach oben]

Jeden Tag eine neue Logdatei

Hinweis: Dieses Kapitel baut auf den Informationen aus den Kapiteln "Apache Allgemein- Die Logfiles des Apache" auf.
Wie Du Dir vorstellen kannst, wird die "access.log" im Laufe der Zeit recht groß. Wäre es nicht sinnvoll, aus diesem Grund jeden Tag eine Loddatei anlegen zu lassen, die dann auch mit dem Datum des jeweiligen Tages versehen wäre? Ich finde schon, deshalb erkläre ich's schnell. Zu diesem Zweck soll allerdings nicht auf Apache-Bordmittel zurückgegriffen werden, sondern wir werden uns ein Programm besorgen, welches für unsere Zwecke gut geeignet ist. Das Programm nennt sich "Cronolog" und findet sich hier:http://www.cronolog.org/download/cronolog-1.6.1-win32.zip

Auf www.cronolog.org befindet sich ferner die Dokumentation des Programms. Wenn Du die Datei heruntergeladen hast, entpacke die "Cronolog.exe" nach "C:\Apache\bin". Das ist standardmäßig der Ordner, in dem Dateien abgelegt werden, die der Erweiterung des Servers dienen. Dieser Ordner sollte Dir schon bekannt vorkommen wenn Du die vorherigen Kapitel gelesen hast, denn unsere "htpasswd.exe" liegt ja auch dort.
Jedoch zurück zu unserem Anliegen: Die Datei "Cronolog.exe" liegt also im "bin-Odner" des Apache-Servers. Nun ist -Du wirst es schon ahnen- die httpd.conf zu editieren, denn wir müssen ja unserem Server noch mitteilen, daß er mit Hilfe der Cronolog.exe die access.log-Datei jeden Tag neu anlegen soll. In die httpd.conf ist folgendes einzutragen:

CustomLog logs/access.log common <--- Diesen Eintrag auskommentieren

Hinzufügen:

Transferlog "|c:/apache/bin/cronolog.exe c:/apache/logs/access%Y%m%d.log"

Das wär's soweit schon. Nun hast Du jeden Tag eine neue access.log, z.B. namens "access20010916.log" (16.09.2001). Für Änderungen oder Anpassungen solltest Du einen Blick auf die Cronolog-Webseite werfen, auf der alles ausführlich dokumentiert ist.


[Home]    [Übersicht Tutorials]    [^ nach oben]