Sie wollen auf die Schnelle ein Verzeichnis freigeben, auf das andere per Web-Browser zugreifen können? Dafür extra den Apache-Server zu starten, hieße, mit Kanonen auf Spatzen zu schießen. Einfacher geht’s mit tHTTPd.
out of the box
Es gibt tausende Tools und Utilities für Linux. “out of the box” pickt sich die Rosinen raus und stellt pro Monat ein Progrämmchen vor, das wir für schlichtweg unentbehrlich oder aber zu Unrecht wenig beachtet halten.
Der vollkommen unaussprechliche Name des in dieser “out of the box” vorzustellenden Tools lautet ausgeschrieben “tiny HTTPdaemon” – ein sehr kleiner Web-Server also. Tatsächlich ist das eigentliche Server-Programm gerade mal 60–70 kByte klein. Zur Installation stehen mehrere Methoden zur Verfügung.
Vorgegart oder selbstgekocht?
Für die Distributionen Debian, SuSE und Red Hat und Mandrake existieren vorgefertigte Binärpakete, wobei der rote Hut und sein Abkömmling das tHTTPd-Paket nicht fest integriert haben – es muss über rpmfind beschafft werden (ftp://speakeasy.rpmfind.net/linux/rhcontrib/7.1/i386/thttpd-2.21b-fr0.4.i386.rpm). Als distributionsübergreifende Methode bleibt wie immer das Kompilieren der Quelltexte von http://www.acme.com/software/thttpd/thttpd-2.23beta1.tar.gz, was auch den Vorteil hat, die aktuellste Version zu installieren.
Entscheiden Sie sich dafür, das Binärpaket einzuspielen, greifen Sie zum distributionsspezifischen Paketmanager – rpm bei SuSE, Red Hat und Mandrake, dpkg oder apt-get bei Debian. Die Installation ausgehend vom Quellarchiv erfordert ein paar Schritte mehr:
tar xzf thttpd-2.23beta1.tar.gz cd thttpd-2.23beta1 ./configure make su (root-Passwort eingeben) make WEBGROUP=www install exit
Anschließend befindet sich die ausführbare Datei thttpd im Verzeichnis /usr/local/bin, kam das RPM-Paket zum Zuge, unter /usr/sbin. Zusätzliche Dateien liegen in /usr/local/www (Quellarchiv), /usr/local/httpd/htdocs (SuSE) oder /var/www (Red Hat).
Tütensuppe mit User- und Root-Geschmack
Im einfachsten Fall starten Sie den Web-Server in dem Verzeichnis, dessen Dateien er freigeben soll – Instant-Webserving nennt sich so etwas. Sie können dies als unprivilegierter User tun, müssen dem Programm in diesem Fall aber mitteilen, dass es auf einem anderen Port als dem Standard-HTTP-Port 80 lauschen soll. Im Beispiel lassen wir tHTTPd auf dem unprivilegierten Port 4242 horchen:
thttpd -p 4242
Soll nicht das Arbeitsverzeichnis zum Startzeitpunkt des Web-Servers, sondern ein anderes Verzeichnis freigegeben werden, bestehen Sie darauf mit der Option -d verzeichnisname. Dateien und Verzeichnisse aus darüberliegenden Ordnern bekommen die Benutzer des Servers nicht angezeigt.
Starten Sie den Server als root, so hat er die Berechtigung, auf Port 80 zu lauschen. Nach dem Start gibt tHTTPd die root-Rechte auf und läuft unter der Verantwortung des unprivilegierten Users nobody weiter. Vorher kann zudem ein weiterer Sicherheitsmechanismus zum Zuge kommen. Durch die Option -r setzt der Server mittels chroot den freizugebenden Ordner als sein Wurzelverzeichnis, das er nicht mehr verlassen kann.
Die Abbildungen 1 und 2 zeigen beispielhaft von tHTTPd freigegebene Verzeichnisse in den Web-Browsern w3m und Konqueror. Die zugänglichen Dateien liegen in /home/chris/public, aus dem der Server gestartet wurde. Da er nicht auf dem Standard-Port 80 lauscht, müssen die User den Port mit in der URL angeben, etwa http://localhost:4242 für den Zugriff auf einen lokal laufenden Web-Server.
Betreten verboten
Auch wenn tHTTPd nicht im chroot-Gefängnis läuft, begrenzt es den Zugriff auf Dateien und Ordner, die unterhalb seines Startverzeichnisses liegen. Abbildung 3 zeigt den Versuch, das Verzeichnis kein_chartsdreck zu öffnen, das einen Symlink mit Ziel außerhalb des Startverzeichnisses darstellt. Folglich gibt tHTTPd den HTTP-Fehler 403 (“forbidden”) zurück – hier ist der Zugang verboten. Auch den Versuch, das Startverzeichnis durch den Eintrag .. (übergeordnetes Verzeichnis) zu verlassen, unterbindet der Server.
Beim Starten des Web-Servers fällt auf, dass sich das Programm sofort vom kontrollierenden Terminal abkoppelt und im Hintergrund weiterläuft, wie es sich für einen ordentlichen Daemon gehört. Wie lässt sich der Server aber wieder beenden? Die nötige Information, die ProzessID, beschaffen wir uns mit dem ps-Kommando, das eine Liste der laufenden Prozesse zurückgibt. Zudem filtern wir die Ausgabe mit grep, so dass nur noch Einträge zu sehen sind, die die Zeichenkette thttpd enthalten, und schicken dem Prozess das Beendigungssignal mit dem kill-Kommando an die ermittelte Prozess-ID.
chris@camera:~ $ ps axc | grep thttpd 2752 ? S 0:00 thttpd chris@camera:~ $ kill 2752
Wer nicht erst umständlich mit ps und grep hantieren will, kann dem thttpd-Aufruf mit der Option -i pid-datei eine Datei mitgeben, in die der Server seine Prozess-ID schreibt. In dem Fall beschränkt sich das Beenden auf das Kommando kill $(cat pid-datei).
Logbuch
Da wir im normalen Betrieb gerne wissen wollen, was sich auf unserem Server tut, gibt es die Option -l logdatei, mit der Zugriffe auf den Server protokolliert werden. Im folgenden Beispiel wurde tHTTPd auf Port 4242 mit dem Freigabeordner /home/chris/public gestartet; die Logdatei heißt /home/chris/thttpd.log. Danach verfolgen wir die Einträge, die der Server in die Logdatei schreibt.
chris@camera:~ $ thttpd -p 4242 -d ~/public -l ~/thttpd.log chris@camera:~ $ tail -f ~/thttpd.log 10.0.0.200 - - [18/Jun/2002:15:03:22 +0200] "GET / HTTP/1.1" 200 50000 "" "Mozilla/5.0 (compatible; Konqueror/2.2.1; Linux)" 10.0.0.200 - - [18/Jun/2002:15:03:27 +0200] "GET /favicon.ico HTTP/1.1" 404 0 "" "Mozilla/5.0 (compatible; Konqueror/2.2.1; Linux)"
Zwei Zugriffe vom Rechner mit der IP-Adresse 10.0.0.200 haben wir zu verzeichnen, jeweils mit Konqueror als Browser. Die erste Anfrage liest den Inhalt des Startverzeichnisses. Vom Browser aus sieht man nicht, dass / in Wirklichkeit /home/chris/public ist. Diese Information soll auch gar nicht nach außen gelangen. Die zweite Anfrage versucht, die Datei /favicon.ico zu lesen. Da diese nicht existiert, gibt der Server den HTTP-Fehler 404 (“not found”, “nicht gefunden”) zurück.
Optionen im Bündel
Wenn Sie tHTTPd häufig mit den gleichen Optionen aufrufen wollen, ersparen Sie sich Tipparbeit, indem Sie diese in eine Konfigurationsdatei verfrachten. Dann brauchen Sie als einzige Option -C konfigdatei, um dem Server seine Konfigurationsdatei zuzuweisen. Die Einträge darin sehen etwas anders aus als auf der Kommandozeile. In Listing 1 sind die bisher verwendeten und eine neue Option eingetragen.
Listing 1
Konfigurationsdatei myweb.conf
# Konfigurationsdatei fuer thttpd port=4242 dir=/home/chris/public logfile=/home/chris/thttpd.log cgipat=/cgi-bin/*.cgi
Der Server wird mit thttpd -C myweb.conf gestartet. Die Zeile cgipat=/cgi-bin/*.cgi erlaubt tHTTPd das Ausführen von CGI-Skripten , wenn sie ausgehend vom Startverzeichnis in /cgi-bin stehen und die Endung .cgi besitzen.
Ein weiteres im Paket enthaltenes Programm namens htpasswd erlaubt den Schutz von Verzeichnissen durch Passwörter: Liegt eine damit erzeugte Datei .htpasswd in einem freigegebenen Verzeichnis, so muss jeder per Web-Browser darauf Zugreifende die mit htpasswd festgelegten Zugangsdaten kennen.
Dient tHTTPd als festinstallierter Web-Server, können sich lokale User mit makeweb einen eigenen Homepage-Bereich anlegen. Über diese eher fortgeschrittenen Anwendungen informieren Sie sich am einfachsten in den Manual-Seiten (man htpasswd, man makeweb) und der Online-Dokumentation auf der tHTTPd-Homepage.
Glossar
-
Web-Server
-
Ein Dienstprogramm (Server), das Web-Browsern über das “HyperText Transfer Protocol” (HTTP) Dateien zur Verfügung stellt. Der bekannteste Web-Server ist Apache.
-
rpmfind
-
Ein Suchdienst für Pakete im rpm-Format. Unter http://rpmfind.net/ finden Sie hauptsächlich Pakete für Red Hat und verwandte Distributionen.
-
Port
-
Eine Anlegestelle für Netzwerkverbindungen. Die Ports tragen Nummern, und viele sind über diese Zahl einem Dienst zugeordnet. Programme, die sich an Ports binden, können darüber Dienste zur Verfügung stellen, etwas Dateitransfer oder Remote-Logins.
-
unprivilegiert
-
Die Ports bis einschließlich 1023 dürfen nur mit root-Rechten an einen Dienst gebunden werden, während die Ports 1024 bis 65535 (so genannte unprivilegierte Ports) auch von User-Prozessen benutzt werden dürfen.
-
chroot
-
Mit diesem Systemruf (“change root”) erklärt ein Prozess ein Verzeichnis zu seinem neuen Wurzelverzeichnis (“root directory”). Der Prozess kann dieses Verzeichnis nicht mehr verlassen und ist vom restlichen Dateisystem isoliert.
-
Symlink
-
Kurzform von “symbolischer Link”. Ein Symlink ist eine spezielle Datei, deren Inhalt eine Pfadangabe (das Ziel des Verweises) ist. Versucht man, den Inhalt eines Symlinks zu lesen oder zu schreiben, greift das System in Wahrheit auf dessen Ziel zu. Symbolische Links werden mit dem Kommando ln -s erzeugt.
-
CGI
-
Abkürzung für “Common Gateway Interface”. Dieser Mechanismus dient zum Erstellen dynamischer Web-Seiten-Inhalte durch den Web-Server. Mit einem CGI-Shell-Skript ließe sich zum Beispiel eine Information über die momentan auf dem Server-Rechner angemeldeten Benutzer anzeigen.








