Portrait     Publikationen, Anleitungen etc.     Photoalbum     Links     switch to english    
 


Apache Logo

Eine kurze Einführung in den Apache Web-Server

Achtung: Diese Anleitung ist in weiten Teilen veraltet und wird voraussichtlich nicht mehr aktualisiert.

Auf dieser Seite möchte ich Ihnen einen kurzen Einblick in Konfiguration des Apache Web-Servers geben. Dabei beschäftigt sich diese Seite nur mit dem alten Apachen, also der Version 1.3.x und nicht der neuen 2.x Version bei der sich vieles geändert hat. Für tiefergehende Erkenntins möchte ich Ihnen die WWW-HOW-TO Kapitel 7-10 empfehlen, das Buch "Apache - Das umfassende Referenzwerk" aus dem O'Reilly-Verlag. und natürlich die doc zum packet apache
Der Apache gilt als der populärste Web-Server im Internet. Er ist freie Software und wird mit jeder mir bekannten Distribution mitausgeliefert. Übrigens ist der Apache nicht auf unix-artige OS beschränkt, sondern auch für MS-Windows erhältlich.

Die Konfigurationsdateien, mit denen wir uns im Folgenden beschäftigen wollen, liegen leider nicht bei allen Linuxdistributionen am selben Ort. Die hier verwendeten Pfade sind die von SuSE (6.4).

Beginnen wir nun damit ....

was der Apache für eine Website hält

Aus Sicht des Apachen besteht eine Webseit aus einem Verzeichnis, das irgendwo auf unserem Rechner liegt. Dieses Verzeichnis enthält mindestens die drei elementaren Unterverzeichnisse
  • conf ; welches die Config-Datei enthält, die Apache mitteilt, wie auf unterschiedliche Anfragen zu reagieren ist
  • htdocs ; welches die Dokumente (.html, Bilder, Daten usw.) enthält.
  • logs ; welches die Logdateien enthält, welche die Aktivitäten protokollieren
... und um die Sache nicht zu einfach zu machen liegen diese Unterverzeichnisse dann in der Regel doch nicht in einem Verzeichnis :-( .
Zum Beispiel liegen nach einer Standard-SuSE-Installlation die
/usr/local/httpd/htdocs/
Was so weit noch der Theorie entspricht. Die Logdateien treiben sich aber in
/var/log/httpd/
herum usw. . Wie kommt das? Es ist möglich die entsprechenden Pfade zu "verbiegen" und das haben die Leute von SuSE hier getan. Wo könnte der Sinn liegen? Nun, so liegen die Logdatein nicht einheitlich in meinem großen Apache-Verzeichnis, aber die Logdateien vieler Programme liegen nun einheitlich in einem Verzeichnis /var/log. Es steht Ihnen natürlich frei nun Ihren Sinn für Ordnung umzusetzten ....

Sever-Konfigurationsdateien

Die Konfiguration des Servers wurde, jedenfalls bei älteren Versionen des Apache s.u., in mehreren Datein aufgeteilt. Und zwar

/etc/httpd/httpd.conf die Hauptkonfigurationsdatei
/etc/httpd/srm.conf diese Datei regelt die Anzeige und Darstellung der Seiten
/etc/httpd/access.conf diese Datei regelt, wer auf den Server zugreifen darf
/etc/httpd/mime.types Zuweisung von Datein-Endungen zu MIME-Types

Eine Erbschaft aus alten Tagen (NCSA) sorgt dafür das der Apache die drei oberen Config-Datein akzeptiert. Dennoch ist davon abzuraten die Dateien srm.conf und access.conf zu benutzen. Alles Notwendige kann und sollte in die httpd.conf eingetragen werden. Es ist nämlich wesentlich einfacher die Konfigurationsdatei zu pflegen, wenn es nur eine gibt. Bei früheren Apache-Versionen war es notwendig, diese Datein zu deaktivieren, nachdem man sie gelöscht hat. Bei v1.3 reicht es, wenn sie einfach nicht existieren. Einfaches leer lassen der Datein tut es nach meiner Erfahrung übringens auch.
Das liegt daran das mit den drei Config-Dateien wie folgt verfahren wird. Nachdem die Datei httpd.conf ausgelesen wurde, sucht der Apache srm.conf und access.conf und führt sie in dieser Reihenfolge aus. Das deaktivieren dieses Verhaltens erfolgt über folgende Einträge in der httpd.conf

ResourceConfig /dev/null
AccessConfig /dev/null

Die Konfigurationsanweisungen httpd.conf

Die Konfigurationsanweisungen in der Datei httpd.conf lassen sich in drei Hauptgruppen unterscheiden:
  1. Section 1: Global Environment
    Die globalen Einstellungen, die das Verhalten des Apache-Servers im ganzen bestimmen
  2. Section 2: 'Main' server configuration
    Einstellungen die Parameter festlegen, nach dem der 'main' oder 'default' Server arbeitet. Das sind alle Anfragen die an den Server gehen und nicht einen virtuellen Host betreffen. Außerdem stellen diese Einstellungen die defaults für die virtuellen Hosts da.
  3. Section 3: Virtual Hosts
    Einstellungen der virtuellen Hosts. Virtuelle Hosts machen es möglich, Anfragen aus dem Netz zu bearbeiten, die an verschiedene IP's, bzw. Hostnames gesendet wurden mit Hilfe nur eines Apache Servers.
Schauen wir uns nun die httpd.conf mit ihren Möglichkeiten im Detail mal an.
Die diskutierte Varabel wird in Monotype, die möglichen Zuweisungen in Italic gedruckt. Darunter folgt eine kurze Erklärung.

Section 1: Global Environment

Schauen wir uns mal einige Basisconfigurationsmöglichkeiten unter Section 1 an.

ServerType (standalone / inetd)
Die Option inetd ermöglicht es zu verhindern, daß Apache eine Reihe wartender Child-Prozesse in Gang setzt. Stattdessen startet er jeweils nur einen neuen, wenn eine Anfrage eingeht, und beendet den Child-Prozesse dann, wenn die Anfrage bearbeitet wurde. Diese Vorgehensweise ist recht langsam, verbraucht aber weniger Systemleistung, wenn keine Clients verarbeitet werden müssen.
Insgesamt gilt diese Methode jedoch als veraltet, da sie unelegant und ineffizient ist
Die Option standalone erlaubt eine ganze Horder wartender Child-Server und ist die Default-Einstelllung.


ServerRoot "/usr/local/httpd"
Das Hauptverzeichnis, in dem die Unterverzeichnisse conf und logs zu finden sind.
Achtung! Hier nie einen slash am Ende des Pfades machen! Das kann je nach Apache-Version zu Ärger führen. Wenn Sie dieses Verzeichnis über ein Netzwerk, z.B. per NFS ansprechen lesen Sie vorher http://www.apache.org/docs/mod/core.html#lockfile

Nun folgenden diverse Möglichkeiten einzelne Files über das System zu verstreuen und die Anzahl der Clints zu begrenzen usw. Darauf will ich hier jetzt nicht eingehen. Die meisten dieser Varabeln erklären sich selbst und die anderen erfordern wieder die oben genannte Lektüre.

Section 2: 'Main' server configuration

Port 80
Zuerst haben Sie die Möglichkeit den Port zu ändern auf dem der Apache ständig "horcht" ob Anfragen für Ihn da sind. Es ist in der Regel nicht sinnvoll den Port zu ändern, da die "normalen" Browser sonst ihre Website nicht finden werden.

User wwwrun
Group nogroup
Hier kann angegeben werden unter welcher User, bzw. Gruppen-ID der Web-Server laufen soll. Ein eigener Benutzer ist aus Sicherheitsgründen sinnvoll. Ein solcher User sollte im System keine Privilegien haben, die es Ihm z.B. erlauben auf Dateien zuzugreifen, die nicht für das ganze Netz gedacht sind.

ServerAdmin root@localhost
Die Emailadresse des Admin. Sie wird benötig um diverese Antworten für Fehlermeldungen zu generieren.

DocumentRoot "/usr/local/httpd/htdocs"
Diese Variabel legt das Verzeichnis fest, aus dem Apache die Clients mit Dateien versorgt. Der Server hängt den Pfad der angefortderten URL an den DocumentRoot an. Dies kann z.B. über Alias abgefangen werden.
Achtung! Hier nie einen slash am Ende des Pfades machen! Das kann je nach Apache-Version zu Ärger führen.

AccessFileName .htaccess
Diese Variabel beinhaltet den Namen des files welches in jedem Verzeichnis abgelegt werden kann und die Informationen über die Zugriffsrechte zu den entsprechenden Dateien enthält. Wir werden weiter unten noch auf diese Datei eingehen.

ErrorLog /var/log/httpd/error_log
In dieser Datei werden alle Fehler aufgezeichnet.

PidFile /var/run/httpd.pid
In dieser Datei wird die PID (Prozeß-ID) abgespeichert. Sie wird u.a. zum Beenden des Servers genutzt. Außerdem dient sie als Lock-Datei um zu verhindern, daß zwei Server gleichzeitig auf einem Rechner laufen.

DirectoryIndex index.html

Diese Variabel gibt die Index-Datei an, die automatisch beim Aufrufen eines Verzeichnisses angezeigt wird.

Section 3: Virtual Hosts

Die oben genannten Variabeln können für Virtuelle Hosts auf dem gleichen Rechner neu vergeben werden. Darüber hinaus gibt es aber noch weitere Möglichkeiten und Probleme die ich hier nicht behandeln möchte. Sie können sich u.a. über die oben angegebene Literatur informieren.

http neustarten

Damit unsere jetzt gemachten Änderungen wirksam werden muß der Apache neu gestartet werden. Dafür ist es natürlich(?) nicht nötig den Rechner neu zu starten. Sie können dem Apachen über den Befehl httpd ansteuern.
Mögliche Befehle sind z.B. :

apache stop - Beendet httpd
apache start - Startet httpd
apache restart - Startet httpd erneut
apache(full)-status - Ausgabe eine (ausfürlichen) Statusberichtes
weiteres s. apache help

Der apache befindet sich im Verzeichnis /sbin/init.d/ wohin für root kein Pfad liegt. Sie müssen also zunächst in das Verzeichnis wechseln und können dann die entsprechenden Befehle mit einem ./ als Pfadangabe nutzen.

Mit lynx http://localhost können Sie nun testen, ob der gewünschte Effekt eingetreten ist. Sollte lynx als Browser nicht zu Verfügung stehen können Sie natürlich auch einen Anderen nehmen.... w3m z.B. :-)

Authentifizierung

Um Daten, die vom Apachen verwaltet werden vor möglicherweise unbefungen Blicken zu schützen bietet uns der Apache zwei Verfahren an.Zum einen lassen sich die empfindlichen Daten und die Zugriffsmöglichkeiten darauf in der Datei httpd.conf festlegen, also zentral.
Alternativ kann man solche Einstellungen auch in der Datei .htaccess vornehmen, die dann für das Verzeichniss gilt in dem sie sich befindet, also eine lokales Verfahren.
Wo liegen die Vorteile solche Einstellungen global oder lokal vorzunehmen?
Der Vorteil beim .htaccess-Mechanismus ist der, daß man die Konfiguration ändern kann, ohne den Server neu zu starten. Dies ist besonders für Systeme interessant, auf denen viele Leute ihre Homepage pflegen, aber natürlich nicht alle davon autorisiert sind den Server neuzustarten oder seine Konfigurationsdatei zu ändern. Der Nachteil der .htaccess-Methode ist, daß die Daten immer wieder durch den Phaser müssen, statt nur einmal beim Hochfahren eingelesen zu werden.

Authentifizierung über die zentrale httpd.conf Datei

Der Eintrag in der httpd.conf dem Angaben zur Authentifizierung folgen lautet <Directory>, bzw. <Directory Pfad>. Schauen wir uns mal an, was man da für Optionen hat....

AuthType Basic
Es gibt mittlerweile sicherer Authentifizierungsmöglichkeiten, (vgl. www.apache.org), die aber leider noch von keinem Browser unterstützt werden ==> Basic ist die einzig sinnvolle Einstellung.
AuthName "special directory"
Das Kind muß ja irgendeinen Namen haben...
AuthUserFile datei
Hier wird festgelegt wo die Datei mit den Benutzernamen und den verschlüsselten Paßwörten liegt. Zu den Paßwörter kommen wir später.
AuthGroupFile datei
Hier wird festgelegt wo die Datei liegt, welche die Gruppennamen und deren Mitglieder enthält.
Das sieht dann etwa so aus:
admin: tim tom thomas
webuser: bingo dingo jango
Diese Datei und ihre Eintragungen haben keine Auswirkungen solange nicht der entsprechende <require>, Eintrag (s.u.) vorgenommen wurde.
require [user benutzer1 benutzer2 ... ] [group gruppe1 gruppe2 ...] [valid-user]
require ist der Eintrag zur Aktivierung der Paßwortprüfung. Die Option valid-user meint, daß Paßwörter von allen Benutzern akzeptiert werden, die in der Paßwortdatei stehen.
Beispiele :
require user tim bingo dingo
durch diesen Eintrag werden nur die Benutzer tim bingo dingo mit gültigem Paßwort zur Anmeldung zu gelassen.
require group admin
durch diesen Eintrag werden nur die Mitglieder der Gruppe admin mit gültigem Paßwort zur Anmeldung zu gelassen.

Bis jetzt sind die (potenziellen) Benutzer auf indivdueller Basis verarbeitet worden. Man kann den Zugriff aber auch über eine bestimmte IP oder Hostname oder ganzen Gruppen von IP's und Hostnames erlauben, bzw. verweigern. Die benötigten Eintragungen sind allow from und deny from.
Die Abfolge in der allow und deny Anweisungen abgearbeitet werden ist unabhängig von der Reihenfolge wie sie in der Datei stehen. Die Standard-Abfolge ist erst deny und dann allow. Ist ein Client durch deny ausgeschlossen, bleibt er ausgeschlossen, wenn kein entsprechendes allow folgt. Trifft weder die allow- noch die deny-Anweisung auf den Client zu, wird dem Client der Zugriff gewährt. Diese Reihenfolge kann über order geändert werden .
Der Syntax ist denkbar einfach
order reihenfolge
z.B. also order allow,deny. Womit wir nun die Reihenfolge engtsprechend geändert hätten, mit allen dazu gehörigen Konsequenzen.
Nun endlich zum Syntax von allow from und deny from, welcher nahezu identisch ist :

allow from host host ...
deny from host host ...

Bei host kann es sich bei beiden um
  1. Einen (unvollständigen) Hostname
    Also alle Hosts die mit dem Host-String übereinstimmen oder enden.
  2. Eine IP-Adresse
  3. Ein Netzwerk/Netzmasken - Paar
    Netzwerk a.b.c.d und Metzmaske w.x.y.z für eine bessere Subnetz-Kontrolle.
    Syntax : a.b.c.d/w.x.y.z handeln.
Der Abschnitt unserer httpd.conf Datei, welcher sich mit Authentifizierung beschäftigt könnte jetzt also etwa so aussehen :

<Directory /usr/www/htdocs/sicherheit>
AuthUserFile /usr/www/ok_users/leute
AuthGroupFile /usr/www/ok_users/gruppe
require valid-user
order deny,allow
allow from 172.16.240.204
deny from all
</Directory>
Das einzige was nun zum Glück noch fehlt sind die

Paßwörter

Mit dem Befehl htpasswd kann man die entsprechende Paßwortdatei erzeugen und Paßwörter hinzufügen. Der (abgespeckte) Syntax des Befehles ist

htpasswd [-c] passwordfile username

-c Create a new file.

Mehr Optionen gibt es bei Bedarf mit htpasswd --help
Beispiele zum Syntax:
htpasswd -c /usr/www/ok_users/leute dingo
Legt zum Beispiel die Datei /usr/www/ok_users/leute an und richtet anschließend ein Paßwort für dingo ein. Das Paßwort wird wie üblich erfragt und muß einmal bestätigt werden.
Achtung! Nach dem ersten mal htpasswd -c /usr/www/ok_users/leute, darf diese Datei nicht mehr mit der Option -c angesteuert werden, da Sie sonst überschrieben wird. Um einen User zu einer bestehenden Datei hinzuzufügen verwendet man z.B.
htpasswd -c /usr/www/ok_users/leute tim
.

Authentifizierung über die lokale .htaccess Datei

Wenn Sie die oben gemachten Vorgaben zu Benutzung von /usr/www/htdocs/sicherheit lieber in einer lokalen Datei festlegen wollen müssen Sie zunächst den Namen für eine solche Datei festlegen, der innerhalb Ihres Systems gelten soll. Das geht mit dem Eintrag
AccessFileName dateiname1 dateiname2 ...
in der httpd.conf Datei, der den Dateien dateinameX die entsprechende Autorität verleiht. Damit diese Änderung wirksam wird, muß der Apache neu gestartet werden. Voreingestellt und Standard ist .htaccess
Als Beispiel könnten Sie in Ihre httpd.conf eintragen AccessFileName .dalton
Wenn nun eine solche Datei die Aufgabe der httpd.conf für /usr/www/htdocs/sicherheit übernehmen soll, muß eine Datei .dalton mit dem folgenden Inhalt in dem entsprechenden Verzeichniss liegen

AuthUserFile /usr/www/ok_users/leute
AuthGroupFile /usr/www/ok_users/gruppe
require valid-user
order deny,allow
allow from 172.16.240.204
deny from all

Natürlich muß man als Admin nicht alles hinnehmen was die User u.U. in ihrer .htaccess Dateien schreiben. Der Befehl AllowOverride schränkt die Möglichkeiten der .htaccess Dateien ein.
Moegliche Optionen sind zum Beispiel AuthConfig, All, None, Limit ....

Links zu weiteren Informationen


Das Apache Projekt
Apache HTTP Server Project
Die Dokumentation
Die Apache Seiten von Horus.at
apache week
apache today