Webserver mit WordPress-Blog auf dem Raspberry Pi einrichten

Kategorien:

Durch Chipknappheit und gestörte Lieferketten ist der Raspberry Pi derzeit kaum zu bekommen oder unverschämt teuer. Unter Umständen kann es sinnvoller und günstiger zu sein, für dein Projekt einen echten Mini-PC wie den HP ProDesk 600* zu kaufen und dort ein Linux-Betriebssystem wie Ubuntu oder Debian zu installieren.

Der Minicomputer Raspberry Pi wurde als Lern- und Bastelcomputer entwickelt. Aufgrund seines äußerst geringen Preises und seiner Flexibilität ist er auch genau dafür außerordentlich gut geeignet. Da er außerdem sehr stromsparend ist, eignet er sich besonders für Projekte, bei denen es erforderlich ist, dass der Raspberry Pi ständig läuft. Beispielsweise ein Homeserver/NAS, oder eben ein Raspberry Pi Webserver.

Wenn man heute eine Webseite erstellt, greift man häufig direkt zu WordPress. Ursprünglich als einfaches System für Blogs gedacht, ist WordPress heute so groß und flexibel, dass es für nahezu jede Art von Webseite genutzt werden kann, vom einfachen Weblog bis zum Onlineshop.

Wer schon eine auf WordPress basierende Seite betreibt und mit dem Gedanken spielt, diese selbst zu hosten, oder wer sich komplett neu mit dem Thema Webhosting auseinander setzen möchte, der findet mit WordPress als Software und dem Raspberry Pi als Hardware gute Plattformen für den Start. Zwar hat der Raspberry Pi nicht genug Power um einen gut besuchten Blog zu betreiben, als Testplattform für WordPress ist der Raspberry Pi Web Server aber hervorragend geeignet.

Das offizielle Betriebssystem Raspbian basiert auf dem Linux-Betriebssystem Debian. Das ebenfalls sehr populäre (Server)-Betriebssystem Ubuntu ist ursprünglich ebenfalls aus Debian hervor gegangen und diesem in der Bedienung bis heute sehr ähnlich.

Wer einen Webserver mit Raspbian auf einem Raspberry Pi einrichten und betreiben kann, der kann auch einen „richtigen“ Webserver auf Basis von Debian, oder (mit leichten Veränderungen) Ubuntu einrichten.

Dieser Beitrag zeigt die Installation und Einrichtung aller, zum Betrieb von WordPress benötigter Software auf dem Raspberry Pi. Der Beitrag ist dabei bewusst einfach und – ich hoffe – einsteigerfreundlich gehalten.

Am Ende soll steht ein fertiger Webserver, auf dem eine WordPress Installation betrieben werden kann.

Dies ist jedoch keine Anleitung für die Einrichtung und den Betrieb eines sicheren und öffentlichen Webservers (siehe unten „Einige Worte zur Sicherheit“), denn dies kann eine Copy & Paste Anleitung nicht leisten. Vielmehr soll dies die Basis dafür sein, sich weiter mit der Einrichtung und Konfiguration eines Webservers zu beschäftigen. Denn irgendwo muss man ja anfangen.
Und was könnte dafür besser geeignet sein als ein Raspberry Pi.

Installation des Betriebssystem Raspbian Lite

Als Basis für den Webserver dient das offizielle Betriebssystem Raspbian. Da der Webserver keinen grafischen Desktop und die dazugehörigen Programme wie Libreoffice, Webbrowser usw. benötigt, wird die Version Raspbian Lite verwendet. Raspbian Lite verfügt über keine grafische Benutzeroberfläche, sondern wird ausschließlich über die Kommandozeile bedient. Dies erhöht einerseits die Geschwindigkeit, da viel weniger Systemressourcen benötigt werden und erhöht außerdem die Sicherheit, da keine unnötige Software installiert wird.

Da der Webserver und alle seine Komponenten ohnehin auf der Kommandozeile installiert und konfiguriert werden müssen, hat die Verwendung von Raspbian in der Lite Version in diesem Fall auch keine Nachteile bei der Bedienung.

Zuerst muss Raspbian Lite von der offiziellen Webseite heruntergeladen werden.

Download Raspbian Lite

Damit erhält man eine ZIP-Datei, die entpackt werden muss. Daraus bekommt man eine IMG-Datei, die ein Abbild der kompletten Raspbian Installation enthält und deren Inhalt noch auf eine MicroSD-Karte übertragen werden muss.

Besonders geeignet ist hierfür das Programm Etcher, da Etcher einfach zu bedienen ist und auf allen gängigen Plattformen wie Windows, MacOS und Linux läuft. Das Programm kann ebenfalls kostenlos von der offiziellen Seite https://etcher.io heruntergeladen werden.

Nachdem das Raspbian Image mit Etcher auf die SD-Karte geschrieben wurde, muss noch eine Datei auf der SD-Karte angelegt werden um den SSH-Zugang zu aktivieren. Standardmäßig ist der Zugang zur Kommandozeile via SSH von einem anderen Computer deaktiviert. Diese sollten wir aber aktivieren, damit wir den Raspberry Pi später von einem anderen Computer aus administrieren können. Außerdem ist darüber eine verschlüsselte Verbindung mit einem FTP-Client wie Filezilla möglich, so dass man Dateien einfach auf den Raspberry Pi hoch- und herunterladen kann.

Auf der SD-Karte wurden zwei Partitionen angelegt. Auf der Partition mit dem Namen „boot“ muss eine leere Datei mit dem Namen „ssh“ angelegt werden. Damit wird der SSH-Zugang auf den Raspberry Pi automatisch beim booten aktiviert.

Um die Datei zu erstellen klickt man unter Windows mit der rechten Maustaste auf eine freie Stelleim Explorer. Hier wählt man Neu > Textdokument. Dieses Dokument nennt man nun ssh und zwar ohne die Endung .txt. Also nicht ssh.txt, sondern einfach nur ssh.

Raspbian SSH-File anlegen

Damit ist die Installation des Betriebssystems abgeschlossen. Die SD-Karte kann nun in den Raspberry Pi eingesetzt und der Pi gestartet werden. Der Raspberry Pi sollte nach Möglichkeit über ein Netzwerkkabel mit dem Router verbunden werden, da dies am ehesten eine zuverlässige und stabile Netzwerkverbindung sicher stellt. Auf die Einrichtung des WLAN beim Raspberry Pi gehe ich daher in diesem Artikel nicht ein.

Für den ersten Start macht es noch Sinn auch einen Bildschirm und eine Tastatur am Raspberry Pi anzuschließen. Für die spätere Nutzung ist das dann nicht mehr nötig. Dann kann der Raspberry Pi irgendwo in einer Ecke seinen Betrieb verrichten, sofern es dort ein Netzwerkkabel und Strom gibt.

Grundkonfiguration des Betriebssystems

Nachdem der Bootvorgang abgeschlossen ist, fordert das System zum Login auf. Da Raspbian Lite wie gesagt keine grafische Benutzeroberfläche hat, ist auch die Bedienung rein textbasiert.

Der Benutzername für den Login lautet pi, das Standardpasswort ist raspberry. Da das System standardmäßig auf englisches Tastaturlayout eingestellt ist, wo Z und Y vertauscht sind, muss auf einer deutschen Tastatur ggf. raspberrz eingegeben werden. Dieses Verhalten wird weiter unten geändert.

Da man sich auf dem Raspberry Pi via SSH auch über das Netzwerk einloggen kann, sollte das Passwort unbedingt als erstes geändert werden. Hierzu tippt man folgenden Befehl ein.

passwd

Beim eintippen des Passworts werden keine Sternchen, oder ähnliches angezeigt. Es gibt also keine visuelle Rückmeldung.

Nach dem Ändern des Passworts kann man einfach testen, ob das neue Passwort auch funktioniert. Hierzu loggt man sich einmal aus und wieder ein. Der Befehl zum ausloggen lautet einfach

exit

Nachdem man sich erneut eingeloggt hat, sollte eine kurze Grundkonfiguration des Systems vorgenommen werden. Beispielsweise sollten die Spracheinstellungen auf deutsch umgestellt werden. Dies erledigen wir über die Raspberry Pi Konfiguration, mit dem Befehl

sudo raspi-config

Die Navigation im Menü erfolgt mit den Pfeiltasten, Eingaben bestätigt man mit Return. Zuerst wechseln wir zu den Spracheinstellungen, die unter dem Punkt „Localisation Options“ zu finden sind. Als nächstes wählen wir die Option „Change Locale„. Damit bekommen wir eine riesige Liste mit verfügbaren Spracheinstellungen vorgelegt.

Für Deutsch scrollen wir nach unten bis zur Auswahl „de_DE.UTF-8 UTF-8„. Diese Option wird mit der Leertaste aktiviert. Alle anderen Optionen, bei denen ein Sternchen gesetzt ist, sollten via Leertaste deaktiviert (also das Sternchen entfernt) werden.

Raspberry Pi set locale

Mit TAB wechselt man zu OK und bestätigt die Auswahl. In der nächsten Abfrage bestätigen wir nochmals die neue Standardeinstellung „de_DE.UTF-8 „. Dann verlässt man das Einstellungsmenü über den Button „Finish„.

Damit die Änderungen auch wirksam werden, sollte der Raspberry Pi einmal neu gestartet werden. Dies geschieht mit dem Befehl

sudo reboot

Nachdem wir uns wieder eingeloggt haben, sollte das System zuerst auf den aktuellen Stand gebracht werden. Es sollten also alle eventuell vorhandenen Updates für das Betriebssystem und andere installierte Software eingespielt werden. Dies sollte man auch später in regelmäßigen Abständen wiederholen. Der Befehl zum abrufen und installieren von Updates lautet

sudo apt update && sudo apt dist-upgrade

Sofern Updates eingespielt wurden, sollte sicherheitshalber nochmals ein reboot durchgeführt werden.

Als letztes notieren wir uns noch die IP-Adresse, die der Raspberry Pi vom Router bekommen hat. Darüber kann man sich anschließend via SSH von einem anderen Computer auf die Kommandozeile des Raspberry Pi einloggen. Zum Anzeigen der IP-Adresse verwenden wir folgenden Befehl.

ip -4 addr show eth0

Damit erhalten wir die IPv4 Adresse des primären Netzwerkinterfaces. Wer kein Kabelnetzwerk sondern das WLAN verwendet, der muss eth0 durch wlan0 ersetzen.

Raspberry Pi IPv4 Adresse anzeigen

Damit können wir uns von einem beliebigen anderen Rechner auf der Kommandozeile des Raspberry Pi einloggen. Der Pi kann damit in eine Ecke verfrachtet werden und nur an den Strom und ein Netzwerkkabel angeschlossen werden.

Der Login auf dem Raspberry Pi via SSH kann unter Windows 10 ganz einfach über die Powershell erfolgen. Bei älteren Windows-Systemen muss man sich mit Zusatzsoftware wie Putty helfen.

Unter Windows 10 öffnet man die Powershell und gibt dort folgenden Befehl ein.

ssh pi@192.168.30.128

Damit ist man auf dem Raspberry Pi eingeloggt und kann die weitere Administration bequem von seinem Windows-Computer aus vornehmen.

Windows 10 Powershell SSH

Feste IP-Adresse über den Router vergeben

Der Zugriff auf den Webserver erfolgt über dessen IP-Adresse, die er vom sogenannten DHCP-Server des Routers bekommen hat. Dieser DHCP-Server teilt allen Geräten im Heimnetz mit, welche IP-Adressen sie verwenden dürfen. Allerdings können sich diese Adressen bei einer neuen Verbindung ändern, was dazu führen würde dass der Raspberry Pi nicht mehr erreichbar werden kann. Es ist daher sinnvoll, den eigenen Router so zu konfigurieren, dass er dem Raspberry Pi immer die selbe IP-Adresse zuteilt.

Hierzu muss man in der Konfigurationsoberfläche seines Routers nach der entsprechenden Einstellung suchen. Die Konfigurationsoberfläche einer Fritz!Box findet man indem man die Adresse http://fritz.box in den Webbrowser eingibt. Dort wechselt man zu Heimnetz -> Netzwerk und wählt das Stiftsymbol hinter dem Homeserver. Hier muss ein Haken bei der Option “diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen” gesetzt werden.

Fritzbox immer gleiche IP vergeben

Apache Webserver auf dem Raspberry Pi installieren

Als Webserver verwende ich in diesem Beitrag Apache, da dieser weit verbreitet und gut dokumentiert ist. Außerdem ist Apache in den offiziellen Paketquellen von Raspbian enthalten, so dass dieser einfach installiert und aktualisiert werden kann. Installiert wird der Webserver mit folgendem Befehl.

sudo apt install apache2

Nach der Installation ist der Raspberry Pi Apache Server direkt einsatzbereit und kann einfache HTML-Seiten direkt ausliefern. Dies kann man testen, indem man auf einem Computer im selben Netzwerk die IP-Adresse des Raspberry Pi in den Webbrowser eingibt. Damit bekommt man die Standardseite des Apache Webserver zu sehen.

Apache Standardseite

Wenn dies funktioniert, kann die Standardseite gelöscht werden. Damit verhindert man spätere Probleme bei der Installation von WordPress.

sudo rm /var/www/html/index.html

Damit auch Dynamische Projekte wie WordPress ausgeliefert werden können, wird jedoch noch die Skriptsprache PHP sowie eine Datenbank benötigt.

MySQL-Datenbank-Server auf dem Raspberry Pi installieren

Der Server für die MySQL-Datenbank für WordPress wird mit folgendem Befehl installiert.

sudo apt install mariadb-server

Tatsächlich wird dabei ein zu MySQL kompatibler und aktiver entwickelter MariaDB-Server installiert.
Um einige, aus Sicherheitsperspektive wichtige Einstellungen zu setzen, sollte nach der Installation noch folgender Befehl ausgeführt werden.

sudo mysql_secure_installation

Die Fragen werden dabei folgendermaßen beantwortet:

  • Enter current password for root: Einfach mit Enter überspringen, da noch kein Passwort gesetzt ist.
  • Set root password?: Y
  • New password: Ein Passwort vergeben
  • Remove anonymous users?: Y
  • Disallow root login remotely?: Y
  • Remove test database and access to it?: Y
  • Reload privilege tables now?: Y

Datenbank für WordPress anlegen

Jetzt kann direkt die Datenbank für WordPress angelegt werden.

sudo mysql -uroot -p

Als Passwort wird das gerade vergebene Passwort benötigt. Wenn dies richtig eingegeben wurde, empfängt einen der Datenbankserver mit folgender Eingabeaufforderung: MariaDB [(none)]>. Dann kann die Datenbank mit dem Namen „WordPress“ angelegt werden.

create database wordpress;

Als Bestätigung sollte man folgende Meldung erhalten: Query OK, 1 row affected (0.00 sec)

Dann wird noch der Datenbankbenutzer für WordPress angelegt und ein Passwort vergeben. In untenstehendem Befehl musst du DEINPASSWORT durch ein eigenes Passwort ersetzen.

GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'DEINPASSWORT';

Als Bestätigung sollte man ein Query OK, 0 rows affected (0.00 sec) erhalten. Um die Änderungen zu aktivieren wird noch folgender Befehl ausgeführt.

FLUSH PRIVILEGES;

Damit ist der Datenbank-Server eingerichtet und die Datenbank bereit für WordPress. Mit einem letzten Befehl verlassen wir die Konfiguration des Datenbankservers und wechseln zurück zur normalen Kommandozeile des Betriebssystems.

quit
Datenbank konfigurieren

PHP installieren

WordPress ist ein dynamisches, in der Programmiersprache PHP geschriebenes Projekt. D.H. eine WordPress-Seite ist nicht statisch, sondern wird bei jedem Webseitenaufruf neu erstellt. Nur so sind beispielsweise Kommentare oder das Schreiben von Artikeln direkt über die Webseite möglich.

Damit der Apache Webserver PHP-Seiten ausliefern kann und außerdem eine Anbindung an die Datenbank erhält, müssen noch folgende Pakete installiert werden.

sudo apt install php php-mysql

Damit Apache über die Änderungen informiert ist, muss der Dienst einmal neu gestartet werden.

sudo systemctl restart apache2

Optional: Testen ob PHP funktioniert

Wer möchte, kann direkt testen ob die Auslieferung von PHP-Seiten funktioniert. Webseiten liegen im Verzeichnis /var/www/html. Zum Testen von PHP wird in diesem Verzeichnis eine Infoseite erstellt, die die Konfiguration von PHP anzeigt. Wenn die Seite im Webbrowser angezeigt wird, funktioniert PHP. Am einfachsten legt man die Infoseite mit Inhalt mit folgendem Befehl an.

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/phpinfo.php > /dev/null 

Anschließend ruft man die IP-Adresse des Raspberry Pi, gefolgt vom Dateiname phpinfo.php im Webbrowser auf. Dieser sollte dann folgende Seite anzeigen.

PHP-Info

Da die Seite viele Informationen über die Konfiguration des Webservers preis gibt, sollte man sie wieder löschen, wenn man die Seite nicht mehr benötigt.

sudo rm /var/www/html/phpinfo.php

Installation von WordPress auf dem Raspberry Pi

Die Vorbereitungen für die Einrichtung von WordPress auf dem Raspberry Pi sind nun abgeschlossen. Nun kann WordPress auf dem Raspberry Pi installiert werden.

Mit dem ersten Befehl wird die aktuellste deutsche Version von WordPress herunter geladen und im Verzeichnis /home/pi gespeichert.

wget -P /home/pi/ https://de.wordpress.org/latest-de_DE.zip

Als nächstes wird das ZIP-Archiv entpackt.

unzip /home/pi/latest-de_DE.zip -d /home/pi

Webseiten werden im Verzeichnis /var/www/html gespeichert. Daher werden die WordPress-Dateien nun in dieses Verzeichnis verschoben.

sudo mv /home/pi/wordpress/* /var/www/html/

Da der Apache mit dem Systembenutzer „www-data“ läuft, die WordPress Dateien aber mit dem Benutzer „pi“ erstellt wurde, müssen die Berechtigungen noch auf den User des Webservers geändert werden. Ansonsten wären beispielsweise keine Updates von WordPress über das Webinterface möglich.

sudo chown -R www-data: /var/www/html/

Die weitere Einrichtung von WordPress kann im Webbrowser erfolgen. Hierzu gib man einfach wieder die IP-Adresse des Raspberry Pi im Webbrowser an. Nun sollte man von der Installationsroutine von WordPress empfangen werden. Mit einem Klick auf „Los geht’s“ wird die Einrichtung gestartet.

Wordpress Setup im Browser

Die Fragen zur Einrichtung der Datenbank werden wie folgt beantwortet.

  • Datenbank-Name: wordpress
  • Benutzername: wordpress
  • Passwort: Das Passwort, welches im Schritt „Datenbank für WordPress anlegen“ vergeben wurde
  • Datenbank-Host: localhost
  • Tabellen-Präfix: Entweder unverändert wp_, oder mit beliebigem Zusatz, z.B. wpraspi_

Wenn die Zugangsdaten für die Datenbank korrekt eingetragen wurden, werden mit einem Klick auf „Senden“ die Tabellen für WordPress in der Datenbank angelegt.

Im nächsten Bildschirm wird bereits die Webseite selbst konfiguriert. Der Benutzer der hier angelegt wird, ist später der Administrator der Seite. Mit einem Klick auf „WordPress Installieren“ wird die Installation abgeschlossen.

Nach einem kurzen Moment sollte die Einrichtung abgeschlossen sein. Über die IP-Adresse kann nun die WordPress-Webseite auf dem Raspberry Pi aufgerufen werden.

http://192.168.30.128

Mit dem Zusatz wp-login.php kann man sich im Backend von WordPress einloggen und Beiträge schreiben und bearbeiten.

http://192.168.30.128/wp-login.php

Wordpress Startseite Raspberry Pi

Einige Worte zum Thema Sicherheit

Dieses Setup ist für die Nutzung in den eigenen vier Wänden gedacht, wo der Rasberry Pi hinter einem Router geschützt ist. Es soll Interessierten einen Einstieg zum Thema „Eigener Webserver“ schaffen. Hier wurde eine Plattform geschaffen, die erste Experimente mit dem Betrieb und der Konfiguration eines eigenen Webservers ermöglicht.

Soll auf dem Raspberry Pi eine öffentliche, aus dem Internet zugängliche Webseite betrieben werden, so sind weitere Maßnahmen erforderlich. Eventuell verfasse ich hierzu noch einen weiteren Beitrag, allerdings scheue ich derzeit noch den Aufwand, da es sehr schnell sehr komplex wird.

Wer trotzdem mit dem Gedanken spielt, die Webseite aus dem Internet, beispielsweise über eine DynDNS-Domain zugänglich zu machen, der sollte sich auf jeden Fall mindestens mit untenstehenden Themen auseinander setzen. Es handelt sich dabei nicht um eine vollständige Checkliste.

Wenn man sich aber Mühe macht, sich mit der sicheren Konfiguration seines Systems und der laufenden Überwachung auseinander zu setzen, dann spricht auch nichts dagegen einen öffentlich verfügbaren Webserver auf einem Raspberry Pi zu betreiben.

Transportverschlüsselung via HTTPS

Die wichtigste Sicherheitsmaßnahme ist wahrscheinlich das Einrichten einer Transportverschlüsselung über https. Wenn der Webserver nur wie oben beschrieben eingerichtet ist, werden alle Daten unverschlüsselt übertragen. Das bedeutet, dass auch Benutzername und Passwort für WordPress unverschlüsselt übertragen werden.

Wenn der Zugang mittels Portfreigabe und DynDNS bereits eingerichtet ist, kann ein Verschlüsselungszertifikat von Let’s Encrypt relativ einfach und automatisiert erstellt werden. Wer die offizielle Software Certbot verwendet, kann sogar Apache automatisch konfigurieren lassen.

Apache restriktiver konfigurieren

Wenn der installierte Apache-Webserver aktuell ist, ist er natürlich nicht unsicher. Standardmäßig ist er aber sehr gesprächig konfiguriert und gibt freudig Auskunft über seine Version und das installierte Betriebssystem. Beides sollte man in der Konfigurationsdatei /etc/apache2/apache2.conf deaktivieren mit den Einträgen ServerTokens Prod und ServerSignature Off.

Außerdem sollte über die .htaccess-Datei im WordPress-Verzeichnis die Verzeichnisauflistung deaktiviert werden. Standardmäßig zeigt Apache beim Aufruf eines Verzeichnisses, in welchem sich keine index.html befindet, eine Liste mit allen in diesem Verzeichnis vorhandenen Dateien an. Dies deaktiviert man mit dem Eintrag Options -Indexes in der .htaccess.

PHP Funktionen einschränken

Die Konfiguration von PHP erfolgt in dieser Konfiguration in der Datei /etc/php/7.0/apache2/php.ini. Grundsätzlich gilt für PHP das selbe wie für Apache. Wenn man die Software auf dem aktuellen Stand hält, ist die Software selbst höchstwahrscheinlich nicht unsicher. Allerdings bietet PHP eine Vielzahl von Funktionen und Möglichkeiten um Code auf dem Computer auszuführen. Wenn also ein PHP-Projekt eine Sicherheitslücke hat, kann dies den kompletten Server kompromittieren. Aus diesem Grund sollte PHP so restriktiv wie möglich konfiguriert werden. Eine Option die nicht angeboten wird, kann auch nicht ausgenutzt werden.

Hervorheben möchte ich drei Einstellungen.

open_basedir: Begrenzt die Dateien, auf die von PHP zugegriffen werden kann, auf einen bestimmten Ordner inklusive seiner Unterordner. Hier sollten alle Ordner angegeben werden, in denen man PHP-Dateien speichert. Beispielsweise /var/www/html. PHP-Dateien in anderen Ordnern werden nicht ausgeführt.

disable_functions: ermöglicht das Deaktivieren einzelner Funktionen aus Sicherheitsgründen. Die Funktionen werden als kommagetrennte Liste von Funktionsnamen übergeben. Mit disable_functions wie untenstehend, sollte WordPress immer noch funktionieren.

disable_functions = show_source,popen,exec,shell_exec,system,passthru,curl_multi_exec,parse_ini_file,pcntl_exec,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,proc_open,

allow_url_fopen: ermöglicht es auf entfernte URL-Objekte wie auf lokale Dateien zuzugreifen. Sofern möglich sollte dies deaktiviert werden.

WordPress sicher konfigurieren

Auch für WordPress gilt: die aktuellste Version ist die sicherste Version. Daher WordPress immer zeitnah, nach Möglichkeit automatisch, updaten. Die häufigsten Angriffspunkte bei WordPress entstehen jedoch über alte, schlecht gepflegte Plugins. Aus diesem Grund sollten Plugins sparsam und nur aus vertrauenswürdigen Quellen installiert werden.

Ansonsten möchte ich, was die Absicherung von WordPress angeht, gerne auf die mehrteilige Artikelreihe „WordPress absichern“ im Blog von Mike Kuketz verweisen. Die Reihe (und den ganzen Blog) halte ich für sehr lesenswert.

SSH-Zugang absichern

Am besten ist es, man gibt den SSH-Zugang, der standardmäßig auf Port 22 lauscht, gar nicht über eine Portfreigabe ins Internet frei. Die Administration des Webservers ist dann nur von zu Hause aus möglich. Will man SSH trotzdem ins Internet freigeben, sollte man den Zugang zusätzlich schützen.

  • Die Sicherheit hängt vom Passwort ab. Je komplexer und länger desto besser
  • Am besten den Standardport 22 auf einen anderen, hohen Port verlegen. Automatisierte Angriffe auf einen geöffneten Port 22 werden garantiert innerhalb sehr kurzer Zeit erfolgen.
  • Zugang über SSH am besten nur via Public-/Private-Key erlauben und den Zugang mittels Passwort verbieten. Dann haben auch die automatisierten Angriffe keine Chance.
  • Wenn Zugang mit Passwort erlaubt werden soll, IP-Adressen von, denen fehlgeschlagene Loginversuche erfolgen, sperren. Z.B. mit fail2ban.

Updates, Updates, Updates

Die wichtigste Maßnahme zum Schutz aller Computersysteme und sind regelmäßige Updates. Für den Webserver auf dem Raspberry Pi bedeutet dies ein regelmäßiges

sudo apt update && sudo apt dist-upgrade

Allerdings wird weder Raspbian, noch die mitgelieferte Software bis in alle Ewigkeit mit Updates versorgt. Wenn eine Raspbian-Version keine Unterstützung mehr bekommt, muss auf die neue Version aktualisiert werden. Dies erfolgt nicht automatisch mit dem oben angegebenen Befehl, sondern muss manuell vorgenommen werden. Infos hierzu werden, nach der Veröffentlichung einer neuen Raspbian-Version, auf der Webseite raspberrypi.org bekannt gegeben.

Unterwegs immer mit Strom versorgt
Anzeige
Powerbank 60W Ladeleistung für Laptop & Handy
20.000 mAh, USB-C und USB-A, Hohe Ladeleistung ermöglicht Laden von Notebooks
Perfekte Reiseladegerät - Hohe Ladeleistung, 3 Ausgänge
USB-C & USB-A, 65W Ladeleistung lädt Laptops & Handys, Power Delivery & Quick Charge
Niko
Niko
Ich bin Niko, betreibe BitReporter und interessiere mich für jede Form von Technologie, die in unseren Alltag Einzug hält. Ich schreibe hier über Software und Hardware die ich verwende, sowie Probleme mit meiner Technik und Lösungen. Schließlich soll Technik nützlich sein und Spaß machen und nicht zusätzliche Arbeit verursachen.

25 Kommentare

  1. Erstmal vielen Dank für den Artikel. Hat alles super geklappt.
    Er müsste vielleicht geupdatet werden, da der Befehl zur Installation von Mysql nicht mehr funktioniert, dort muss stattdessen direkt Maria db eingetragen werden.

    Jetzt habe ich den Server bei mir im Heimnetz laufen. Diesen würde ich jetzt aber auch gerne ins WEB bringen.
    Ich Habe jetzt leider schon einige tutorials durch mit denen ich das versucht habe.
    Es klappt aber leider nicht so wie ich mir das vorstelle.

    Ich würde mich freuen, wenn du ein dort auch ein HOW-TO zu erstellen könntest.
    Am besten wäre es mit sogar mit dem Dienst von SPDYN.
    Dieser Dienst gefällt mir am besten, da er hier auf deutschen Servern liegt.

    Bei den HOW-TO´s die ich bis jetzt verwendet habe, klappt es mit er Portfreigabe nicht so wie es soll.
    Meine Fritzbox ist zwar über den Port 40156 zu erreichen. Aber der Webserver leider nicht über Port 80.

    Freundliche Grüße
    Marcel

    • Hallo Marcel,

      ja, da hast du recht. Seit Raspbian Buster muss mann direkt das Paket mariadb-server installieren, Raspbian Buster wurde aber erst vor einer Woche veröffentlicht. Ich hoffe dass ich dieses Wochenende noch meinen Raspberry Pi 4 bekomme. Dann werde ich die Anleitungen Stück für Stück mit dem neuen Pi und dem neuen Betriebssystem testen.

      Wenn du deine Fritzbox über deine SPDYN-Adresse erreichst, den Webserver aber nicht, dann liegt der Fehler bei den Portfreigaben der Fritzbox, denn die Konfiguration der SPDYN-Adresse scheint ja korrekt zu sein. Hast du in der FritzBox unter Internet > Freigaben > Portfreigaben Portfreigaben für deinen Webserver eingerichtet?

      Gruß
      Niko

  2. Hallo Niko,

    vielen Dank für deine tolle Anleitung. Bei mir läuft soweit alles. Ein Frage habe ich noch. Kann man den raspbian so einrichten, dass ich keine Internetverbindung benötige? Wenn das Netzwerkkabel steckt, kann ich die Seite über localhost aufrufen, sobald ich das Kabel entferne und die Seite erneut aufrufe, wird die Seite nicht mehr angezeigt.

    Über eine Antwort würde ich mich sehr freuen.
    Viele Grüße
    Björn

    • Hallo Björn,
      dafür musst du eigentlich nichts einstellen. Über http://localhost solltest du die Seite auf dem selben Computer immer aufrufen können, egal ob ein Netzwerkkabel eingesteckt ist oder nicht.
      Habe es eben nochmal getestet, mit einer frischen Raspbian Installation und WordPress installiert, wie ein diesem Beitrag beschrieben. Bei mir funktioniert es.
      Sorry, habe leider keine Ahnung warum das bei dir nicht klappt.

  3. Hallo Niko,

    Danke für deine Antwort. Ich hatte einen Denkfehler, jetzt funktionier es.

    Ich möchte den raspi als eine Art Digital Signage verwenden. Soweit klappt das jetzt auch. Ich habe chromium im Kiosk Mode laufen und die Seite wird aufgerufen. Ich möchte das System gerne auf meinem Foodtruck einsetzen und die Speisekarte und ein paar Infos anzeigen lassen. Gibt es eine Möglichkeit, dass der raspi ein eigenes Netzwerk herstellt damit ich unterwegs Änderungen von z.b. einem iPad an der Seite vornehmen kann? Ich hoffe du verstehst was meine und kannst mir evtl. einen Lösungsansatz geben!? Ich bin noch ganz neu auf dem Gebiet unterwegs.

    Vielen Dank und beste Grüße
    Björn

    • Klingt nach einem coolen Projekt. Ist, glaube ich, aber nicht ganz so einfach. Damit der Raspi ein eigenes WLAN aufmachen kann, mit dem du dein iPad verbinden kannst, muss der Pi ja nicht nur WLAN funken. Es wird auch noch ein DHCP-Server benötigt, damit das iPad eine IP-Adresse bekommt. Außerdem muss der Raspi das Routing übernehmen (auch wenn nur zwei Geräte verwendet werden).
      Ich habe unter Raspberry Pi als WLAN-Hotspot nutzen eine Software beschrieben, die sowas auf dem Pi einrichtet. Dabei wird ein lighttpd-Webserver installiert, den du für deine Speisekarte nutzen kannst. Ist vielleicht eine Lösung, wenn du Spaß am basteln hat.

      Ansonsten reicht vielleicht auch eine kabellose Maus und Tastatur. Damit beendest du den Kiosk-Modus, nimmst deine Änderungen vor und startest den Browser wieder im Kiosk-Modus.

      Gruß
      Niko

    • Andersherum wird ein Schuh draus. Das iPad kann sicherlich Internet frei geben (Tethering) und der Raspy sich dort einloggen. Oder deluxe Variante mit einem mobilen Router.

  4. Hi Niko,
    Danke für die Anleitung. Auch ein „fast“ Blinder kriegt damit WordPress Am RasPi zum Installieren.
    Will einfach mal ein wenig rumspielen mit dem CMS-System
    Viele Grüße
    Roman

  5. Ich bin ein absoluter Neuling auf diesem Gebiet ich experementiere allerdings schon seit ein paar Tagen mit dem Raspberry. Viele Seiten hab ich besucht, viel gelesen und ausprobiert, nix hat funktioniert. Erst durch diese Schritt für Schritt Anleitung hat es geklappt. Bin sehr glücklich darüber.
    Tausend Dank für deine Mühe zur Erstellung dieses Beitrages.
    Du bist der Beste.

  6. Immer noch ne tolle Idee für „WordPress auf dem RaspberryPi“ (von Automattic) gibt es hier:
    https://inabox.blog
    Blog In A Box – A quick and easy way of putting WordPress onto a Raspberry Pi […] Contains everything you need to develop with WordPress and Node[…] Comes bundled with PHP7, Nginx, and the latest version of WordPress.

    • Blog in a Box wollte ich eigentlich auch schon empfehlen. Allerdings läuft es bei mir nur auf dem Pi 3B+, auf dem Raspberry Pi 4 funktioniert es nicht. Das hat sich auch in den letzten Monaten nicht geändert. Darum habe ich auf eine Erwähnung verzichtet.

  7. Lieber Niko,

    vielen, vielen Dank für diese mit Abstand (!) beste Anleitung zur WP Installation auf der Himbeere. Du hast es geschafft in einer kompakten und unmissverständlichen Form es JEDEM zu ermöglichen eine erfolgreiche Installation durchzuführen.
    – Danke dafür –
    Habe bereits mehr als 5 Installationen mit Deiner Anleitung erfolgreich geschafft. Bitte weiter so. Vielleicht noch das WP ZIP löschen mit aufnehmen. “ Wir haben doch sooo wenig Platz“

    Weiter so & Danke Mosy

  8. Moin.

    Vielen Dank für die tolle Anleitung.
    Bei mir hat die Verbindung zwischen PHP und apache2 nicht auf Anhieb funktioniert.

    Ich musste noch libapache2-mod-php installieren, damit alles klappt.

    • Hallo Robin,
      Ja, libapache2-mod-php wird auf jeden Fall benötigt, wie es aussieht habe ich das vergessen. Dankeschön.
      Ich ergänze das, wenn ich aus dem Urlaub zurück bin.

    • Habe es gerade nochmal getestet. libapache2-mod-php7.3 (passend zur installierten PHP-Version) wurde automatisch als Abhängigkeit mitinstalliert. Eine manuelle Installation war somit nicht nötig.
      Wenn das nicht passiert, muss es natürlich manuell installiert werden.

  9. Auch bei mir funktioniert es nur so, dass wenn das Netzwerkkabel steckt und ich die Seite über localhost aufrufe…
    Die Seite wird nicht mehr angezeigt, sobald ich das Kabel entferne und die Seite erneut aufrufe…

  10. Hallo Niko,
    herzlichen Dank für dieses Tutorial. Ich habe mehrfach versucht, WorPress auf einem Raspberry zu installieren. Erst mit deiner Beschreibung ist mir das gelungen. Da ich WorPress erst einmal kennelernen und ausprobieren möchte, sollen die erstellten Seiten nicht öffentlich gemacht werden. Deshalb habe ich – nachdem WordPress lief – das Tutorial ab den Sicherheitserklärungen verlassen.

    Jetzt habe ich aber folgendes Problem: Nachdem ich relativ vorsichtig die Grundeinstellungen in WordPress vorgenommen habe, wobei ich mich am Youtube-Video von Tim „WordPress Website erstellen -2021- …“ orientiert habe, folgendes Problem: Beim Erstellen einer neuen Seite und dem anschließenden 2* „Veröffentlichen“ kommt die Fehlermeldung „Veröffentlichung fehlgeschlagen. Die Antwort ist keine gültige JSON-Antwort.“ Bisher habe ich im Netz nur Antworten gefunden, die sich auf WordPress-Installationen bei entsprechenden Host-Anbietern beziehen, mit denen ich nichts anfangen konnte.

    Kannst Du helfen bzw. kennst Du vielleicht einen Lösungsansatz?

    Schon ‚mal herzliche Grüße Detlef

  11. Hallo Niko,

    noch eine Ergänzung: Ich habe zwischenzeitlich das Plugin Health Check laufen lassen. Dabei wird folgende Fehlermeldung generiert:
    „Der Aufruf der REST-API führte zu folgendem unerwarteten Ergebnis: (404)
    Not Found

    The requested URL was not found on this server.
    Apache/2.4.51 (Raspbian) Server at 192.168.178.52 Port 80“

    Leider kann ich mit der Info jetzt nicht soviel anfangen. Allerdings interpretiere ich die Meldung so, dass ein Ablegen der erstellten Seite auf dem Server nicht möglich ist. Allerdings weiß ich echt nicht, wie ich dieses Manko beseitigen kann, ohne vllt. andere Dateien oder Ordner abzuschiessen… Die ursprünglichen, in deinem Tutorial genannten Pfade und so habe ich in WordPress nicht geändert!

    Schöne Grüße Detlef

    • Hallo Detlef,
      mein Verdacht ist, dass es an der URL-Umschreibung mit Apache mod rewrite liegt. Ist aber nur ein Verdacht. Aus der Ferne ist das immer schwer zu sagen.
      Evtl funktioniert es, wenn du in WordPress unter Einstellungen > Permalinks auf „Einfach“ änderst. Das wäre natürlich eine unschöne Lösung.
      Alternativ kannst du folgendes versuchen. Aktiviere in Apache mod rewrite.
      sudo a2enmod rewrite

      Ändere in der Datei sudo nano /etc/apache2/apache2.conf im Block /var/www/ bei AllowOverride das None in ein All
      Directory /var/www/
      Options Indexes FollowSymLinks
      AllowOverride All
      Require all granted
      /Directory

      in

      Directory /var/www/
      Options Indexes FollowSymLinks
      AllowOverride All
      Require all granted
      /Directory

      Starte Apache neu.

      sudo systemctl restart apache2

      Dann funktioniert es hoffentlich auch mit den schönen URLs. Aber wie gesagt, ist nur ein Verdacht.

  12. Hallo Niko,
    ganz herzlichen Dank für Deine schnelle Reaktion.

    Richtig erfolgreich war die letzte Änderung in der in der apache2.confg. Jetzt erfolgt keine Fehlermeldung mehr.

    Die erste Änderung war auch erfolgreich, allerdings stünden dann ja nur einfache URL-Strukturen zur Verfügung.

    So, jetzt wird weiter geübt. Schließlich will ja irgendwannn mal eine (bereits bestehende) Website gepflegt werden.
    Noch mal herzlichen Dank und alles Gute. Bleib gesund.
    Viele dankbare Grüße Detlef

Hinterlasse einen Kommentar

Bitte geben Sie Ihren Kommentar ein!
Die Angabe von Name oder Webseite ist optional. Weitere Informationen: siehe Datenschutzerklärung

Bitte geben Sie hier Ihren Namen ein