Raspberry Pi: Lighttpd installieren und benutzen

Bei den meisten Programmen ist ein integrierter Webserver meist dabei. Es gibt aber auch gute Webanwendungen, die ohne Webserver kommen oder man möchte eigene Webseiten hosten. Für diesen Zweck werde ich Lighttpd installieren. Eine ressourcenschonende Alternative zum Apache Webserver.

Installation des Webservers

Die Installation geht schnell über die Paketquellen mit folgendem Befehl:

sudo apt-get -y update && sudo apt-get -y install lighttpd

Verwendung des Webservers

Rein technisch kann man den Webserver bereits verwenden. Unter dem Standardpfad /var/www können nun HTML-Dokumente hinzugefügt werden. Der Ordner ist normalerweise im Besitz von root. Das heißt, damit diese auch gelesen werden können muss der Benutzer www-data zumindest lesend auf die Dateien zugreifen können. Diese können dann im Webbrowser normal mit dem Hostname oder der IP-Adresse aufgerufen werden. Standardmäßig gibt es in dem Ordner die Datei index.lighttpd.html, welche aufgerufen wird und eine Demo Seite anzeigt.

lighttpd-index

Der Standardpfad sowie der Port können einfach in der Konfigurationsdatei unter /etc/lighttpd/lighttpd.conf geändert werden. Dazu einfach mit einem Editor wie Nano und Root-Rechten zugreifen (sudo nano /etc/lighttpd/lighttpd.conf) und die Einträge server.document-root und server.port entsprechend abändern. Mit einem neuen Eintrag server.bind = “localhost” kann man den Webserver zum Beispiel auch nur vom Raspberry selbst aufrufbar machen bzw. kann man dem Server bei mehreren IP-Adressen mitteilen, auf welcher er Anfragen annehmen soll. Standardmäßig werden auf allen Adressen Anfragen angenommen. Speichern nicht vergessen! ([STRG]+[O] und schließen [STRG]+[X])

Der Deamon kann mit sudo service lighttpd force-reload die Konfigurationsdatei neu einlesen und verwenden.

PHP Modul installieren

Heutzutage verwenden viele interaktive Webseiten PHP. Das PHP Modul ist jedoch nicht standardmäßig installiert und muss für lighttpd aktiviert werden. Die Installation führen wir wie folgt aus:

sudo apt-get -y install php5-cgi

Anschließend müssen wir das Modul mit folgendem Befehl aktivieren:

sudo lighty-enable-mod fastcgi && sudo lighty-enable-mod fastcgi-php

Nach dem dies passiert ist, liest man die Konfigurationsdatei mit sudo service lighttpd force-reload neu ein. Nun können PHP Webseiten vom Webserver interpretiert und verarbeitet werden.

SQLite installieren

Für die meisten PHP Aufgaben verwendet man SQL Datenbanken. SQLite bietet sich in Zusammenarbeit mit dem Lighttpd Webserver an, da er perfekt für kleinere Datenbanken ist und die Ressourcen vom Raspberry Pi schont. Zuerst benötigen wir das oben aktivierte PHP Modul. Nun benötigen wir noch das SQLite Paket.

sudo apt-get -y install sqlite3 php5-sqlite

Zum Schluss wie immer sudo service lighttpd force-reload ausführen. Das Paket ist nun installiert und kann verwendet werden.

Das Problem mit SQLite ist, dass es ohne Anmeldedaten verwendet werden kann, jeder kann auf die Datenbanken zugreifen und bei größeren Datenbanken merkt man nichts mehr von der besseren Performance. Zudem fehlen ein paar Standardbefehle oder setzt sogar eigene Befehle durch. Wenn man Third-Party-Webanwendungen benutzt, muss SQLite unterstützt werden. (z. B. Owncloud)

Möchte man also mehr Sicherheit oder man wird sowieso mit größeren Datenbanken arbeiten, bietet sich eher MySQL an. Allerdings sollte man dann auch anständige Hardware verwenden. Für den Heimbereich reicht es aber allemal.

SSL Modul nachinstallieren

Möchte man den Webserver verschlüsselt erreichen, benötigt man ein SSL-Zertifikat und muss https:// verwenden. Doch bevor dies möglich ist, muss das entsprechende Modul aktiviert und ein Zertifikat erstellt werden. Da OpenSSL schon installiert ist müssen wir das Modul nur wie folgt aktivieren:

sudo lighty-enable-mod ssl

Nun benötigen wir ein Zertifikat. Es gibt viele Möglichkeiten, ich übertrage jetzt einfach die schnelle Variante von http://redmine.lighttpd.net/projects/1/wiki/Docs_SSL#Self-Signed-Certificates. Folgender Befehl muss zur Zertifikatserstellung ausgeführt werden:

sudo openssl req -new -x509 -keyout /etc/lighttpd/server.pem -out /etc/lighttpd/server.pem -days 365 -nodes

Nach dem die verlangten Informationen eingetragen sind, ist das Zertifikat erstellt. Ihr könnt irgendein Stuss reinschreiben, da das Zertifikat natürlich kein offiziell zertifiziertes Zertifikat ist. Zum verschlüsselten Datenaustausch reicht es. Macht das Zertifikat mit sudo chmod 400 /etc/lighttpd/server.pem am besten nur lesend für den Root. Somit kann kein anderer die Datei bearbeiten oder lesen.

Nun noch schnell die Konfiguration mit sudo service lighttpd force-reload einlesen. Wenn man nun https://IP-AdressorHostname in den Webbrowser eingibt, wird man auf die verschlüsselte Webseite geleitet.

Vorher muss man aber noch im Webbrowser einmal bestätigen, dass man dem Zertifikat vertraut. Kriminelle könnten sich so ein Zertifikat für eine Phishingseite herstellen, weshalb der Webbrowser einen Warnhinweis ausspuckt, ob wir die Verbindung wirklich aufbauen wollen. Es ist nämlich auf keinem offiziellen Zertifizierungsserver zu finden. Wir wissen ja, das wir es sind und wem vertrauen wenn nicht uns selbst?

https-Vertrauen

Momentan kann http:// oder https:// verwendet werden. Was einer Nutzung von https:// meist ad absurdum führt, da standardmäßig http:// verwendet wird, https:// also explizit angegeben werden muss. Um den Webserver nur über eine https:// Verbindung zu erreichen müssen zwei Änderungen durchgeführt werden.

Zuerst muss die separate SSL-Konfigurationsdatei gelöscht werden. Dazu muss sudo rm /etc/lighttpd/conf-enabled/10-ssl.conf ausgeführt werden. Nun gehen wir mit sudo nano /etc/lighttpd/lighttpd.conf in die Konfigurationsdatei. Dort tauscht man nun die Zeile server.port mit folgenden drei Zeilen aus:

server.port = 443
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/server.pem"

Ist dies passiert, speichert man die Datei noch mit [STRG]+[O] und beendet den Editor mit [STRG]+[X]. Zu guter Letzt die Konfigurationsdatei wieder mit sudo service lighttpd force-reload einlesen.

Wenn man nun mit einem Browser versucht auf die IP-Adresse oder den Hostname des Raspberry zu zugreifen, wird ein Fehler auftauchen, dass keine Webseite vorhanden ist. Verwendet man allerdings https://IP-AdresseorHostname wird man mit der Webseite verbunden.

Zugriffsbeschränkungen einrichten

Beim Apache Server gibt es .htaccess-Dateien, diese versteht lighttpd jedoch nicht. Lighttpd verwendet ein anderes System um den Zugriff zu Bereichen des Webservers zu beschränken. Es muss wieder ein Modul aktiviert und entsprechend konfiguriert werden. Die Aktivierung wird mit folgendem Befehl durchgeführt:

sudo lighty-enable-mod auth

Die Konfiguration führen wir mit sudo nano /etc/lighttpd/conf-enabled/05-auth.conf aus. Folgende Zeilen werden unter server.modules += (“mod_auth”) hinzugefügt:

auth.backend                    = "plain"
auth.backend.plain.userfile     = "/etc/lighttpd/.htcredentials"

auth.require                    = ( "/test1" =>
                                   (
                                    "method" => "digest",
                                    "realm" => "RaspControl",
                                    "require" => "valid-user"
                                   ),
                                   "/test2" =>
                                   (
                                    "method" => "digest",
                                    "realm" => "Test-Area",
                                    "require" => "valid-user|host:192.168.1.7"
                                   ),
                                  )

Kurz erklärt:
auth.backend = “plain”
– Sagt aus, dass die Berechtigungsdatei in Klartext steht, das ist nicht sonderlich sicher, für den privaten Gebrauch sollte das aber nicht das Ärgernis darstellen.
auth.backend.plain.userfile = “/etc/lighttpd/.htcredentials – Zeigt dem Server wo die Datei mit den berechtigten Usern liegt.
auth.require – Gibt an welche Webserverinhalte eine Zugriffberechtigung benötigen. Dabei wird der Ordner (hier /test1 und /test2) angegeben, der beschränkt wird.
“method”=>”digest” – Mit diesem Eintrag wird dem Server mitgeteilt, das ein Hashwert statt Klartext über das Netzwerk versendet wird.
“realm”=>”Beschreibung” – Dem Webbrowser wird eine Beschreibung mitgeteilt, die er für die Berechtigungsanfrage mitteilen soll.
“require”=>”valid-user” – Gibt an, dass ein berechtigter Benutzer in diesen Bereich zugreifen darf. Mit user=username kann man auch speziell nur einen Benutzer zulassen. Mehrere Benutzer werden mit user=username1|user=username2 eingetragen.

Als nächstes muss die Berechtigungsdatei erstellt werden. Dazu sudo nano /etc/lighttpd/.htcredentials in die Konsole eingeben. In der Datei bekommt jeder Benutzer eine neue Zeile. Die Syntax ist username:password. Speichern nicht vergessen! Damit nur lesend auf die Datei zugegriffen wird führe ich noch sudo chmod 444 /etc/lighttpd/.htcredentials aus.

Zum Schluss wird wie immer mit sudo service lighttpd force-reload die Config neu eingelesen. Wenn man nun auf die entsprechenden Unterordner zugreifen möchte kommt die unten gezeigt Abfrage.

Zugriffsbeschränkung-lighttpd

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert