Kapitel 17. 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 als 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 das 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@openoffice.de
Geben Sie hier Ihre E-Mail Adresse an. Diese Adresse können Sie später automatisch in Ihre Webseiten einbinden, zum 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.

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 haben sich Perl und PHP 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 test.sh als http://localhost/cgi-bin/test.sh zu erreichen. Ein einfaches Beispiel für ein Programm test.sh wäre:

#!/bin/sh

# disable filename globbing
set -f

echo Content-type: text/plain
echo

echo CGI/1.0 test script report:
echo

echo argc is $#. argv is "$*".
echo

echo SERVER_SOFTWARE = $SERVER_SOFTWARE
echo SERVER_NAME = $SERVER_NAME

Vergessen Sie nicht das Script ausführbar zu machen. Wenn Sie dieses Script über die oben gezeigte URL aufrufen, erhalten Sie folgende Ausgabe in Ihrem Webbrowser:

CGI/1.0 test script report:

argc is 0. argv is .

SERVER_SOFTWARE = Apache/1.3.12 (Unix) Debian/GNU
SERVER_NAME = surimi

Sie können einem CGI-Programm auch Parameter übergeben, dies geschieht in der URL hinter einem Fragezeichen. Das Script zählt die Anzahl der Parameter und gibt auch den übergebenen String aus. Wenn Sie die URL http://localhost/cgi-bin/test.sh?Linuxrules! benutzen, um das Script aufzurufen, verändert sich die Ausgabe im Webbrowser in der zweiten Zeile wie folgt:

argc is 1. argv is Linuxrules!.

Apache konfigurieren & optimieren

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

SSI - Server Side Includes

Server Side Includes (SSI) erlauben 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 werden. 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 weist den .shtml-Dateien den Mime-Type text/html zu, die zweite Zeile bestimmt, daß 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, gefaßt. Beachten Sie, daß 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 Sie 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 den Ort, an dem die einzubindende Datei zu finden ist:

file - dieses Attribut gibt einen relativen Pfad zu der Datei an. Der Wert darf kein absoluter Pfad sein und darf keinen Verweis 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 aktuellen 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:

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, daß 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 der 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.