Apache WebServer

1. Einleitung
2. Die Direktiven Konfigurationsdatei
2.1 Global Environment
2.2 Main- Server
3. Verzeichnisse
4. Zugriffsschutz
4.1 Rechnerbasierter Zugriffsschutz
4.2 Zugriffsschutz durch Authentifizierung
5. SSL- Verschlüsselung

1. Einleitung:

2. Direktiven der Konfigurationsdatei:

Die Konfigurationsdatei httpd.conf ist in die drei folgende Basissektionen unterteilt:

Für eine "normale" Konfiguration sind erst mal die beiden ersten Sektionen von Bedeutung. Ich erwähne hier nur die Direktiven bei denen eine Änderung der Parameter am Wahrscheinlichsten ist. Es gibt noch unzählige weitere Direktiven, ich persönlich habe jedoch noch nie einen Bedarf gesehen, diese zu Ändern.

2.1 Global Environment:


    ##
    ## httpd.conf -- Apache HTTP server configuration file
    ##
    ...
    ServerType standalone 
    ServerRoot "/usr/local/httpd"
    ExtendedStatus On
    ...
    

2.2 Main- Server:


    ...
    Port 80
    ServerAdmin gerlach@linuxteam.net
    ServerName  imperator.linuxteam.net
    DocumentRoot "/usr/local/httpd/htdocs"
    ...
    

3. Verzeichnisse:

Zuerst konfiguriert man die Rechte für das root- Verzeichnis. Das dies das höchste Verzeichnis ist, sollte man hier die Rechte massiv beschränken.


    <Directory />
      AuthUserFile  /etc/httpd/passwd
      AuthGroupFile /etc/httpd/group
      Options -FollowSymLinks +Multivies
      AllowOverride None
    </Directory>
    

Die Option -FollowSymLinks verbietet dem Apache, symbolische Links zu folgen. Die Zeile AllowOverride None bewirkt, dass Benutzer die Einstellungen nicht durch Angaben in einer Datei .htaccess an jeweiligen Verzeichnis ändern dürfen. In einer derartigen Datei kann man alle Optionen für Verzeichnisse überschreiben, wenn AllowOverride All dies erlaub.

Diese default- Einstellungen können für einzelne Unterverzeichnisse wieder aufgehoben werden. Einen Teil dieser Einschränkungen überschreiben wir für das DocumentRoot- Verzeichnis gleich wieder.


    <Directory "/usr/local/httpd/htdocs">
      Options Indexes -FollowSymLinks +Includes Multiviews 
      AllowOverride None
      Order allow,deny
      Allow from all
    </Directory>
    

Die Option Indexes bewirkt, dass der Apache ein Inhaltsverzeichnis erzeugt, falls keine Standard- Datei (index.htm oder index.html) vorhanden ist. Includes bedeutet das Server Side Includes (SSI) erlaubt sind.

Als Beispiel erstellen wir hier einfach mal ein Verzeichnis für die Abteilung Vertrieb:


    <Directory "/home/vertrieb">
      Options Indexes -FollowSymLinks +Includes Multiviews 
      AllowOverride None
      Order allow,deny
      Allow from all
    </Directory>
    

Um das Verzeichnis erreichen zu können, erzeugen wir einen Alias. Um zu verstehen, wofür man einen Alias verwendet, legen wir zunächst einen Alias für das Verzeichnis /home/vertrieb an:


    Alias /vertrieb "/home/vertrieb/"
    

Hiermit erreicht man das man über die URL http://hostname/vertrieb auf das Verzeichnis /home/vertrieb des Servers zugreifen kann.

4. Zugriffsschutz:

Der Apache bietet zwei Möglichkeiten, um den Zugriff auf den Webserver zu kontrollieren. Zum einen kann der Zugriff auf den kompletten Webserver oder auf bestimmte Verzeichnisse nur bestimmten Rechnern anhand ihrer IP-Adressen Namen oder Domainnamen erlaubt bzw. verboten werden. Zum anderen kann der Zugriff auf bestimmte Verzeichnisse durch eine Authentifizierung, also durch Angabe einer gültigen Kombination aus Benutzernamen und Passwort, erlaubt werden.

4.1 Rechnerbasierter Zugriffsschutz:

Den Rechnerbasierten haben wir weiter oben schon kennengelernt. Im den Beispielen oben besteht er aus den beiden Zeilen:

    Order allow,deny
    Allow from all
Die erste Zeile bestimmt die Reihenfolge der Auswertung nachfolgender allow- und deny- Definitionen. Will man z.B. die Seite nur im Intranet zur Verfügung stellen, könnte man dies so erreichen:
    Order allow,deny
    Allow from Domain- Name oder IP-Adresse des Subnetzes
    Deny from all
Diese Art der Zugriffsteuerung kann mit der folgenden Kombiniert werden.

4.2 Zugriffsschutz durch Authentifizierung:

Zur Authentifizierung schickt der Client eine Kombination aus Benutzernamen und Passwort an den Server. Der Server vergleicht nun die Übermittelte Information mit den Einträgen in der Passwort- Datei und erlaubt oder verweigert den Zugriff auf das Verzeichnis. Die Übertragung dieser Informationen von Client zum Server ist jedoch relativ unsicher, da alle Daten im Klartext übermittelt werden. Um die Zugriffssteuerung durch Authentifizierung zu ermöglichen müssen einige Parameter gesetzt werden. Als Beispiel legen wir hier ein Verzeichnis mit Geheim-Protokollen an:


    <Directory "/usr/local/httpd/htdocs/geheim">
      AuthName "Geheim-Protokolle"
      AuthType Basic
      AuthUserFile /etc/httpd/.htpasswd
      require valid-user
      Option Indexes -FollowSymLinks +Includes Multiviews
      AllowOverride None
    </Directory>
    

Interessant sind hier die Direktiven AuthUserFile und require valid-user. AuthUserFile bestimmt den Pfad zur Passwort- Datei. Diese Datei hat natürlich nichts mit der "normale" UNIX- Passwort- Datei (passwd bzw. shadow) zu tun. Diese Datei muss erst mit dem Programm htpasswd wie folgt erzeugt werden:

  root@imperator: htpasswd -c /etc/httpd/.htpasswd Boss
  New password: 
  Re-type new password: 
  Adding password for user Boss

Dies erzeugt die Passwort- Datei /etc/httpd/.htpasswd die den Benutzername (Boss) und dessen Passwort (verschlüsselt) enthält. Will man weitere Benutzer hinzufügen, verfährt man analog lässt aber die Option -c weg.

Über den Parameter require valid-user wird erziehlt, dass ausschließlich Benutzer Zugriff erhalten, für die eine Kombination aus Benutzernamen und Passwort angelegt wurden. Mögliche andere Parameter sind z.B. require user Boss, was nur dem Benutzer Boss auf das Verzeichnis Zugriff gestattet, auch wenn für mehrere Benutzer Authentifizierungs- Informationen erstellt worden sind. Auch das Anlegen von Benutzergruppen ist Möglich.

5. SSL- Verschlüsselung:

Will man eine verschlüsselte Verbindung anbieten muss man sich von Offizieller Stelle ein Zertifikat ausstellen lassen. Für den Hausgebraucht reicht es jedoch meist sich selber ein Zertifikat zu basteln. Dies geschieht durch folgende Schritte:

    cd /usr/ssl/misc 
    ./CA.sh -newca
    ./CA.sh -newreq
    ./CA.sh -sign

Damit erhählt man zwei Dateien: newreq.pem (enthält den private key) und newcert.pem (enthält das Zertifikat). Nun erzeugt man eine neue Datei (cert.pem) indem man folgendes eingibt:

    open rsa < newreq.pem > cert.pem. ...

Anschließend kopiert man die Dateien cert.pem und cacert.pem in das /etc/httpd- Verzeichnis.

    cp .... /cert.pem /etc/httpd
    cp /usr/ssl/misc/demoCA/cacert.pem /etc/httpd

Als letztes muss noch die httpd.conf- Datei im /etc- Verzeichnis bearbeitet werden. Folgende Direktiven müssen verändert werden:

SSLEngine On
SSLCertificateFile /etc/httpd/cert.pem
SSLCACertificateFile /etc/httpd/cacert.pem

Hinweis: Der Apache- Webserver unterstützt standardmäßig 'nur' die 128-Bit Verschlüsselung, d.h. Browser wie z.B. der Microsoft Internet Explorer müssen ggf. nachgerüstet werden.


last update: 22.05.2002