Kapitel 15. Server Dienste

Inhaltsverzeichnis
Apache
FTP-Server
DHCP
Samba
netatalk

Apache

Anfang 1995 war die beliebteste Server-Software für das WWW (World Wide Web), der frei verfügbare HTTP (Hypertext Transfer Protocol) Server „NCSA“, der von Rob McCool am National Center for Supercomputing Applications (daher der Name: NCSA), University of Illinois, Urbana-Champaign entwickelt wurde. Zu dieser Zeit fand aber schon keine weitere Entwicklung statt, da Rob McCool fast ein Jahr zuvor das NCSA verlassen hatte. Viele Webmaster entwickelten eigene Erweiterungen und beseitigten Fehler. Einige dieser Webmaster kommunizierten miteinander und koordinierten Ihre Entwicklungen in Form von sogenannten „Patches“.

Diese Vielzahl der Patches führte auch zum Namen: „A PAtCHy server“ - Apache.

Auf Basis des NCSA httpd Version 1.3 und allen verfügbaren Patches entstand im April 1995 die erste offizielle Version 0.6.2 des Apache Webservers. Bereits im Dezember 1995 wurde die Verion 1.0 veröffentlicht, die auch intern komplett überarbeitet war. Bereits ein Jahr nachdem die Entwicklung aufgenommen wurde, konnte der Apache mehr Installationen aufweisen wie der NCSA Server.

Auch wenn Sie Ihren Rechner nicht permanent am Netz betreiben macht ein eigener Webserver auf Ihrem System Sinn. Bei der Entwicklung eigener Webseiten können Sie diese sofort „Live“ auf Ihrem System testen. Sie müssen dazu nicht die Seiten erst auf den Server Ihres Providers übertragen. Ebenso können Sie selbst geschriebene CGI-Programme gleich testen.

Apache installieren & einrichten

Die Installation von Apache können Sie wie gewohnt mit apt-get install apache durchführen. Auch dieses Paket beinhaltet ein Konfigurationscript, welches während der Installation gestartet wird. Wenn Sie Apache später neu konfigurieren möchten, können Sie die mit dem Programm apacheconfig durchführen.

sushi:~# apt-get install apache
Reading Package Lists... 100%
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  apache
0 packages upgraded, 1 newly installed, 0 to remove and 246 not upgraded.
Need to get 0B/356kB of archives. After unpacking 666kB will be used.
Selecting previously deselected package apache.
(Reading database ... 64458 files and directories currently installed.)
Unpacking apache (from .../web/apache_1.3.9-10.deb) ...
Setting up apache (1.3.9-10) ...

Installing new configuration file /etc/apache/httpd.conf ...
Installing new configuration file /etc/apache/access.conf ...
Installing new configuration file /etc/apache/srm.conf ...
Installing new configuration file /etc/apache/cron.conf ...
Updating alias /doc/ -> /usr/doc/ in srm.conf (for Debian docs).

Your config files will not be modified until you select Y at "save changes."

Enter the email address of your server administrator.  This address
will be used in error messages allowing users to submit reports of
faulty links or misconfigured cgi-programs to you. It should be an email
address that corresponds to a human.

Who should the ServerAdmin be? [you@your.address] fr@hoshi.in-berlin.de
Geben Sie hier Ihre E-Mail Adresse an. Diese Adresse können Sie später automatisch in Ihre Webseiten einbinden, zu Beispiel wenn es gewünscht ist den Betreiber des Servers (Webmaster) zu erreichen.

The DocumentRoot is set to /var/www.
Installing your new homepage in /var/www.

This release of the Apache server can be configured to load only certain
modules into memory.  This program can automagically configure Apache
so only modules that are actually needed are loaded.

Do you want to manually choose which modules to load? [y/N]
Das Apache Paket kommt mit einer ganzen Reihe von Modulen die, ähnlich wie die Module des Linux Kernels, die Funktionalität des Webservers erweitern. Wir werden später noch einige Interessante Module vorstellen. Sie können jetzt aber ohne Probleme darauf verzichten weitere Module auszuwählen. Der Webserver wird auch so funktionieren.

Working magic...........................................done.

# LoadModule vhost_alias_module /usr/lib/apache/1.3/mod_vhost_alias.so
# LoadModule env_module /usr/lib/apache/1.3/mod_env.so
LoadModule config_log_module /usr/lib/apache/1.3/mod_log_config.so
LoadModule rewrite_module /usr/lib/apache/1.3/mod_rewrite.so
# LoadModule mime_magic_module /usr/lib/apache/1.3/mod_mime_magic.so
LoadModule mime_module /usr/lib/apache/1.3/mod_mime.so
LoadModule negotiation_module /usr/lib/apache/1.3/mod_negotiation.so
LoadModule status_module /usr/lib/apache/1.3/mod_status.so
# LoadModule info_module /usr/lib/apache/1.3/mod_info.so
# LoadModule includes_module /usr/lib/apache/1.3/mod_include.so
LoadModule autoindex_module /usr/lib/apache/1.3/mod_autoindex.so
LoadModule dir_module /usr/lib/apache/1.3/mod_dir.so
LoadModule cgi_module /usr/lib/apache/1.3/mod_cgi.so
# LoadModule asis_module /usr/lib/apache/1.3/mod_asis.so
# LoadModule imap_module /usr/lib/apache/1.3/mod_imap.so
# LoadModule action_module /usr/lib/apache/1.3/mod_actions.so
# LoadModule speling_module /usr/lib/apache/1.3/mod_speling.so
LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so
# LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so
LoadModule alias_module /usr/lib/apache/1.3/mod_alias.so
LoadModule access_module /usr/lib/apache/1.3/mod_access.so
LoadModule auth_module /usr/lib/apache/1.3/mod_auth.so
# LoadModule anon_auth_module /usr/lib/apache/1.3/mod_auth_anon.so
# LoadModule dbm_auth_module /usr/lib/apache/1.3/mod_auth_dbm.so
# LoadModule db_auth_module /usr/lib/apache/1.3/mod_auth_db.so
# LoadModule digest_module /usr/lib/apache/1.3/mod_digest.so
# LoadModule cern_meta_module /usr/lib/apache/1.3/mod_cern_meta.so
LoadModule expires_module /usr/lib/apache/1.3/mod_expires.so
# LoadModule headers_module /usr/lib/apache/1.3/mod_headers.so
# LoadModule usertrack_module /usr/lib/apache/1.3/mod_usertrack.so
LoadModule unique_id_module /usr/lib/apache/1.3/mod_unique_id.so
LoadModule setenvif_module /usr/lib/apache/1.3/mod_setenvif.so
# LoadModule sys_auth_module /usr/lib/apache/1.3/mod_auth_sys.so
# LoadModule put_module /usr/lib/apache/1.3/mod_put.so
# LoadModule throttle_module /usr/lib/apache/1.3/mod_throttle.so
# LoadModule auth_ldap_module /usr/lib/apache/1.3/auth_ldap.so
# LoadModule allowdev_module /usr/lib/apache/1.3/mod_allowdev.so
# LoadModule pgsql_auth_module /usr/lib/apache/1.3/mod_auth_pgsql.so
# LoadModule cvs_module /usr/lib/apache/1.3/mod_cvs.so
# LoadModule define_module /usr/lib/apache/1.3/mod_define.so
# LoadModule eaccess_module /usr/lib/apache/1.3/mod_eaccess.so
# LoadModule roaming_module /usr/lib/apache/1.3/mod_roaming.so


Pondering...........................................done.

Save these changes to the configuration files? [Y/n]
Das Konfigurationsprogramm wird die nötigen Dateien unter /etc/apache/ speichern. Wie Sie sehen sind viele Zeilen auskommentiert, hierzu dient das Zeichen # am Zeilenanfang. Wenn Sie später bestimmte Funktionen benötigen, entfernen Sie dieses Zeichen und starten Sie den Server neu. Bei einigen Modulen sind weitere Eintragungen in der Konfiguration notwendig, ein paar Beispiele finden Sie weiter unten, die anderen werden in der Dokumentation zu Apache beschrieben.
Rotated `/etc/apache/httpd.conf' at Sun Jan 23 19:25:42 CET 2000.
Rotated `/etc/apache/srm.conf' at Sun Jan 23 19:25:42 CET 2000.
Restart Apache now? [Y/n]
Stopping apache with apachectl ...
Waiting for apache to terminate ...done.
/usr/sbin/apachectl start: httpd started
Der Webserver ist nun installiert und Sie können diesen mit einem beliebigen Webbrowser unter der Adresse: http://localhost/ erreichen. Es wurde bei der Installation eine Testseite eingerichtet, diese sollte Ihnen angezeigt werden. Die Dateien zu dieser Seite finden Sie unter /var/www/. Sie können dort nun eigene Seiten ablegen.

Wenn Sie sich näher mit dem Apache Webserver beschäftigen wollen, sollten Sie auch die Dokumentation installieren, die sich im Paket apache-doc befindet.

Konfigurationsdateien

Unter Debian GNU/Linux befinden sich die Konfigurationsdateien des Apache unter /etc/apache/. Dies entspricht dem Debian Standard, weicht aber ein wenig von der normalen Apache Konfiguration ab.

Apache benutzt drei Konfigurationdateien:

  • httpd.conf - Informationen zum Verhalten des Servers.

  • srm.conf - Informationen zu den Dokumenttypen

  • access.conf - Informationen zu den zugriffen auf die Dokumente

Debian GNU/Linux benutzt während der Installation des Paketes das Programm apacheconfig um diese Dateien (speziell httpd.conf) zu konfigurieren. Sie können apacheconfig zu jeder Zeit wieder aufrufen (als Superuser).

Logdateien

Apache protokolliert alle Aktionen in drei Logdateien, welche unter /var/log/apache/ zu finden sind:

  • PID Datei - Keine eigentlich Logdatei, hier wird die Prozeß ID gespeichert.

  • error_log - Fehlermeldungen.

  • access_log - Hier werden alle übertragenen Dateien protokolliert.

Starten & Stoppen

Sie können den Apache als Superuser über das Script /etc/init.d/apache starten, neu starten und stoppen.

linux:/home/fr# /etc/init.d/apache
Usage: /etc/init.d/apache {start|stop|reload|reload-modules|force-reload|restart}
linux:/home/fr# /etc/init.d/apache restart
Restarting apache daemon... done.
Wenn Sie Veränderungen an den Konfigurationsdateien vorgenommen haben, müssen Sie den Apache neu starten. Wenn dieser Neustart misslingt, liegt ein Fehler in den Konfigurationdateien vor.

CGI-Programme

CGI (Common Gateway Interface) Programme werden auf dem Webserver ausgeführt und liefern dynamische Daten als HTML Datei an den Browser zurück. Im einfachsten Fall kann ein CGI-Programm ein einfaches Shell-Script sein, Sie können aber auch in jeder anderen Programmiersprache Anwendungen erstellen. Sehr beliebt sind Datenbankanwendungen, als Scriptsprache hat sich perl durchgesetzt.

Wenn Sie ein CGI-Programm erstellt haben, so muß dieses in dem Verzeichnis /usr/lib/cgi-bin/ liegen. Im Browser ist beispielsweise das Programm hallo.sh als http://localhost/cgi-bin/hallo.sh zu erreichen. Ein einfache Beispiel für ein Programm hallo.sh wäre:

Apache konfigurieren & optimieren

Der Apache Webserver verfügt über eine Vielzahl von Funktionen, einige Interessante möchten wir Ihnen im folgenden vorstellen.

URL Korrekturen

Der Apache Webserver kann URLs die nicht auf dem Server vorhanden sind in den meisten Fällen automatisch korrigieren. Es werden sowohl fehlende Buchstaben ergänzt als auch Groß- und Kleinschreibung geprüft und ggf. korrigiert. Hierzu werden alle Dateinamen auf dem Server geprüft und mit der URL verglichen. Wenn nur eine passende Datei gefunden wird, wird die URL korrigiert und die gefundene Datei angezeigt. Bei mehreren passenden Dateien wird eine Liste angezeigt.

Um diese Funktion zu aktivieren, müssen Sie den Kommentar vor der Zeile: # LoadModule speling_module /usr/lib/apache/1.3/mod_speling.so, in der Datei /etc/apache/httpd.conf entfernen. Hier ein Ausschnitt aus der Datei:

...
LoadModule speling_module /usr/lib/apache/1.3/mod_speling.so
...

...
CheckSpelling on
...
Danach müssen Sie den Apache neu starten (mit /etc/init.d/apache reload).

geschützte Verzeichnisse

Wenn Sie Verzeichnisse auf Ihrem Webserver mit einem Paßwort schützen wollen, so erzeugen Sie in dem gewünschten Verzeichnis die Datei .htaccess.

Diese sollte etwa folgenden Inhalt haben:


AuthUserFile /home/user007/www/.passwd
AuthName "user007"
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>

Nun benötigen Sie noch die Datei mit dem Paßwort in verschlüsselter Form. Achten Sie darauf das diese Datei auf keinen Fall innerhalb der aus dem Netz zugänglichen Webseiten liegt! Erzeugen Sie die Datei /home/user007/www/.passwd, mit folgendem Eintrag:


user007:gfrzGZ98bsd8

Sie können ein verschlüsseltes Paßwort mit dem Programm mkpasswd aus einem Klartext erzeugen.

SSI - Server Side Includes

Diese Funktion erlaubt es Webseiten, bevor diese zum Browser geschickt werden, zu interpretieren. Sie können, über speziellen Code innerhalb der Seite, Variablen benutzen oder einfach Entscheidungen (if then...) treffen und viele andere Dinge.

Um diese Funktionalität zu aktivieren muß das Modul mod_include entweder mit eincompiliert sein, oder es muß beim Start des Servers geladen werde. Weiterhin müssen Seiten, die interpretiert werden sollen, die Endung .shtml bekommen und Sie müssen dies in der Konfiguration aktivieren:

AddType text/html .shtml
AddHandler server-parsed .shtml
Die erste Zeile weisst den .shtml Dateien den Mime-Type text/html zu, die zweite Zeile bestimmt das diese Dateien durch den Server interpretiert (parsed) werden sollen.

Weiterhin müssen Sie diese Funktion noch explizit einschalten, mit der Zeile

Options +Includes
in der Datei /etc/apache/httpd.conf oder in einer Datei .htaccess innerhalb des gewünschten Verzeichnisses Ihres Webservers (hierzu muß AllowOverride ebenfalls aktiviert sein).

Die zu interpretierenden Kommandos müssen innerhalb des HTML Codes als SGML Kommentare eingebettet werden. Die Syntax hierzu lautet:

<!--#element attribute=value attribute=value ... -->
Die Werte (value) werden meist in doppelten Anführungszeichen, seltener in einfachen Anführungszeichen, gefasst. Beachten Sie das der Abschluß dieser Zeile ( -%->) mit einem Leerzeichen beginnt!

Erlaubte Elemente sind unter anderem: „config“, „echo“, „exec“, „fsize“, „flastmod“, „printenv“, „set“ und „include“. Nähere Informationen zu diesen Elementen finden Sie in der Dokumentation, auf das Element „include“ gehen wir nun etwas genauer ein.

Mit dem Element „include“ können Sie Text aus einer anderen Datei in die aktuelle Datei einfügen. Jede dieser so eingebundenen Dateien unterliegt den Zugriffsrechten des jeweiligen Verzeichnisses, wenn also für den betreffenden Bereich die Option „IncludesNOEXEC“ gesetzt haben, werden so eingebundene CGI Scripte ignoriert. Wenn diese Option nicht angegeben ist, wird das CGI-Script ausgeführt und das Ergebnis eingebunden.

Das Element „include“ benötigt noch weitere Attribute, diese definieren die Ort an dem die einzubindende Datei zu finden ist:

file - dieses Attribut gibt einen relative Pfad zu der Datei an. Der Wert darf kein absoluter Pfad sein und darf keinen Verweiß auf ein höherliegendes Verzeichnis (../) enthalten.

virtual - hiermit wird eine komplette URL, relativ zum aktuellen Dokument angegeben. Hier sind keine Rechnernamen (hostname) zugelassen, wenn die URL nicht mit einem / beginnt wird ein Pfad, relativ zum aktuelen Dokument angenommen.

Weiterhin stehen Ihnen einige Variablen zur Verfügung die Sie entweder direkt oder in Zusammenhang mit den Kommandos echo oder if und elif verwenden können:

DATE_GMT

Die aktuelle Zeit als „Greenwich Mean Time“

DATE_LOCAL

Die aktuelle Zeit in der eingestellten Zeitzone

DOCUMENT_NAME

Der Dateiname, ohne Pfadangabe, des Dokumentes

DOCUMENT_URI

Die komplette URL des Dokumentes, dies ist bei eingebundenen Dateien nicht die URL des aktuellen Dokumentes

LAST_MODIFIED

Das Datum der letzten Änderung des Dokumentes

Hier nun ein kleines Beispiel für die Anwendung in der Praxis. Wenn Sie einen Webserver mit vielen Seiten pflegen müssen, sind Sie vielleicht schon mal in die Verlegenheit gekommen das Layout verändern zu müssen. Nun ist es natürlich sehr aufwendig dies in allen Dateien ändern zu müssen. Die Lösung hierfür ist nun eine HTML-Datei zu erstellen in der das Layout der Seite(n) bestimmt wird. Innerhalb des BODY Tags erstellen Sie nun sinngemäß folgende Einträge:

    <!--#if expr="\"$DOCUMENT_URI\" = \"/foo/file.html\"" -->
    in foo
    <!--#elif expr="\"$DOCUMENT_URI\" = \"/bar/file.html\"" -->
    in bar -->
    <!--#else -->
    in neither
    <!--#endif -->
Dies bewirkt das, je nachdem mit welcher URL die Datei aufgerufen wird, eine andere Datei in den BODY Tag eingelesen wird. Sie müssen natürlich nicht die Hauptdatei entsprechend den Namen der anderen Dateien kopieren, ein passender Link reicht hier völlig aus. Natürlich können Sie die Liste der Dateien beliebig erweitern, dies soll nur ein kurzes Beispiel darstellen. Jede Veränderung des Aussehens der HTML Seiten, im Kopf der Datei wird nun sofort auf allen Seiten wirksam.

Umleitungen

Manchmal ist es gewünscht einzelne Webseiten oder gar komplette Server umzuleiten. Dies kann bei einem Providerwechsel nötig sein, oder wenn Sie die Struktur Ihres Servers verändert haben.

Wenn Sie einen kompletten Server umleiten wollen, weil sich beispielsweise der Name geändert hat, so aktivieren Sie das Modul mod_alias und ergänzen Sie die Datei /etc/apache/httpd.conf um die Zeile:


Redirect / http://www.debian.org/

Dies führt aber nicht in allen Fällen zu dem gewünschten Ergebnis, zum Beispiel wenn nicht auf die Hauptseite sondern auf eine alte URL unterhalb der Hauptseite zugegriffen wird. Besser ist es wenn Sie alle Zugriffe auf den Server abfangen und dem Client (Browser) eine neue URL „unterschieben“.

Hierzu benötigen Sie das Modul mod_rewrite und folgende Zeilen in der Konfiguration:


     RewriteEngine On
     RewriteRule /.* http://www.debian.org/ [R]

Dies bewirkt das alle Anfragen auf den Server umgeleitet werden.

Fehlermeldungen

Sicher haben Sie in Ihrem Webbrowser schon einmal die Meldung gesehen das eine gesuchte Seite nicht mehr gefunden wurde. Der Anbieter hat vielleicht seinen Server umstrukturiert und die URL hat sich verändert. Sowas wird sicher auch auf Ihrem Server mal passieren. Sie können mit dem Apache Webserver diese Fehlermeldungen individuell gestalten oder auch dafür sorgen das im Fall das eine Seite nicht gefunden wird, der Client auf eine andere Seite geleitet wird.

Standardmäßig bekommen Sie eine Fehlermeldung wenn eine Seite nicht gefunden wurde, dazu müssen Sie nichts konfigurieren.

Je nach Fehlernummer können Sie ein anderes Verhalten erzwingen. Neben der Fehlernummer müssen Sie noch eine URL angeben die dem Client übermittelt werden soll. Diese URLs können mit einem / beginnen, wenn es sich um lokale URLs handelt, oder auf entfernte Server verweisen.


     ErrorDocument 500 http://foo.example.com/cgi-bin/tester
     ErrorDocument 404 /cgi-bin/bad_urls.pl
     ErrorDocument 401 /subscription_info.html
     ErrorDocument 403 "Sorry can't allow you access today"