Diese Artikelreihe basiert auf Ubuntu Server 14.04 und ist teilweise veraltet. Es existiert eine aktualisierte und verbesserte Version dieser Artikelreihe, basierend auf Ubuntu Server 18.04 unter Homeserver/NAS mit Ubuntu 18.04


Dieser Artikel ist Teil der Reihe Selbstgebauter Homeserver/NAS mit Ubuntu Server


In Teil 4 wurde mit SAMBA der erste Dienst installiert. Damit ist es nun möglich im eigenen Heimnetz Dateien mit dem Homeserver auszutauschen. In diesem Teil wird der Apache Webserver mit PHP und MySQL Datenbank installiert. Dies ist nötig um anschließend Owncloud installieren zu können und damit auch über das Internet zugriff auf den Homeserver zu bekommen. bzw um Dateien über mehrere Rechner zu synchronisieren.

MySQL wird einerseits als Datenbank für Owncloud, als auch als gemeinsame Datenbank für mehrere Kodi Mediacenter verwendet.

Apache installieren und konfigurieren

Installiert wird der Apache und PHP aus den offiziellen Paketquellen

sudo apt-get install apache2 php5

Anschließend ist der Webserver direkt einsatzbereit. Wenn man in seinen Browser die Adresse des Homeservers (in unserem Fall also http://192.168.178.100) eingibt, erschein die Apache2 Standardseite.

Da allerdings auch Informationen über das unsicheren Internet ausgetauscht werden sollen, muss noch die Verschlüsselung der Seiten konfiguriert werden. Ich werde hier die Einrichtung mit einem selbstsignierten Zertifikat beschreiben. Dies führt zwar zu einer Warnung im Browser, ist aber einfacher einzurichten und die Qualität der Verschlüsselung ist völlig unabhängig davon ob das Zertifikat selbst- oder von einer anerkannten CA signiert ist. Ich werde diesen Teil ergänzen wenn ich selbst wieder ein Zertifikat benötige und die einzelnen Schritte dokumentieren kann.

Zuerst öffnen wir eine Rootkonsole und erstellen das Verzeichnis /etc/apache2/ssl in dem die Schlüssel gespeichert werden. Dann erstellen wir den privaten Schlüssel in diesem Verzeichnis und ändern die Dateirechte so, dass nur Root den Schlüssel lesen und bearbeiten darf. Die unten stehenden Befehle müssen dazu nacheinander ausgeführt werden.

$ sudo -i
$ mkdir /etc/apache2/ssl
$ cd /etc/apache2/ssl
$ openssl genrsa -out homeserver.key 2048
$ chmod 600 homeserver.key

Jetzt wird das eigentliche Zertifikat erstellt werden. -days 730 gibt die Gültigkeit des Zertifikats in Tagen an, hier 2 Jahre.

$ openssl req -new -x509 -key homeserver.key -days 730 -sha256 -out homeserver.crt

Nach Eingabe dieses Befehls werden einige Details zum Zertifikat abgefragt, welche beliebig beantwortet werden können. Wirkliche Bedeutung hat nur die Abfrage CommonName. Wer eine eigene Domain nutzt sollte hier den Domainnamen (z.B. meinedomain.de) angeben. Wer keine Domain nutzt kann auch localhost angeben.

Wenn das System nach einem „Challenge Password“ fragt sollte die Frage einfach mit Enter übersprungen werden. Ansonsten muss bei jedem Neustart des Webservers das Passwort eingegeben werden.

Damit Apache verschlüsselte Seiten ausliefert muss noch das SSL Modul aktiviert werden mit

a2enmod ssl

Webseiten werden bei Apache 2.4 standardmäßig unter /var/www/html gespeichert. Die Konfiguration für verschiedene Webseiten liegen unter /etc/apache2/sites-available, Konfigurationen die sich in Verwendung befinden werden nach /etc/apache2/sites-enabled verlinkt.

Die Standardseite benötigen wir nicht und deaktivieren diese und erstellen unsere eigene Konfigurationsdatei

$ a2dissite 000-default.conf
$ touch /etc/apache2/sites-available/00-homeserver.conf

in diese Datei fügen wir folgenden Inhalt ein

<VirtualHost *:80>

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/homeserver_error.log
CustomLog ${APACHE_LOG_DIR}/homeserver_access.log combined

</VirtualHost>

<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/homeserver.crt
SSLCertificateKeyFile /etc/apache2/ssl/homeserver.key
SSLProtocol All -SSLv2 -SSLv3
SSLCompression Off
SSLHonorCipherOrder on
SSLCipherSuite  ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
</VirtualHost>

Jetzt muss die neue Konfiguration noch aktiviert und Apache neu gestartet werden

$ a2ensite 00-homeserver.conf
$ service apache2 restart

Jetzt kann die Beispielseite auch verschlüsselt über https aufgerufen werden, indem https://192.168.178.100 in den Browser eingegeben wird. Dies erzeugt aufgrund des selbstsignierten Zertifikats eine Warnung des Browsers, welche in diesem Fall getrost ignoriert werden kann.

sslerror

Jetzt können alle HTML oder PHP Seiten welche in /var/www/html gespeichert werden auch verschlüsselt aufgerufen werden. Somit ist sichergestellt dass niemand die übertragenen Daten, oder sogar die Zugangsdaten zu z.B. Owncloud mitlesen kann.

MySQL installieren und konfigurieren

Als nächstes ist die Installation der MySQL Datenbank an der Reihe. Auch diese kann über die Ubuntu Paketquellen installiert werden.

$ sudo apt-get install mysql-server php5-mysql

Dabei kann ein Rootpasswort für den Mysql Server angelegt werden, was auch unbedingt gemacht werden sollte. Der Datenbankserver ist nach der Installation direkt einsatzbereit.

MySQL absichern

Anschließend sollte das Skript mysql_secure_installation ausgeführt werden, welches einige Einstellungen zur Absicherung abfragt und entsprechende Einstellungen vornimmt. Mit Ausnahme der Frage ob das Rootpasswort geändert werden soll sollten alle Fragen mit Ja, bzw. mit Y bestätigt werden.

$ mysql_secure_installation

Dabenbank für Kodi im Netzwerk freigeben

Dieser Punkt ist nur für Nutzer des Kodi Mediacenters interessant. Wer Kodi nicht, oder nur auf einem einzigen Rechner nutzt kann diesen Punkt ignorieren.

Kodi bietet die Möglichkeit die Mediendatenbank in das Netzwerk auszulagern. Dies macht immer dann Sinn, wenn man mehr als ein Mediacenter im Haushalt hat. Damit Kodi auf Mysql auf dem Homeserver zugreifen kann muss dieser für den Zugriff aus dem Netzwerk konfiguriert werden. Standardmäßig ist aus Sicherheitsgründen nur der Zugriff vom Homeserver selbst möglich.

Die Konfigurationsdatei für MySQL ist /etc/mysql/my.cnf welche wir im Texteditor öffnen.

$ sudo nano /etc/mysql/my.cnf

Hier suchen wir den Eintrag bind-address und ersetzen die lokale IP Adresse 127.0.0.1 durch 0.0.0.0, so dass der Eintrag folgendermaßen aussieht:

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0

Jetzt muss der MySQL Server noch neu gestartet werden

sudo mysql restart

phpMyAdmin installieren

Zur einfacheren Administration der Datenbanken kann das Tool phpMyAdmin installiert werden, welches über den Browser aufgerufen wird und eine grafische Benutzeroberfläche zur Administration des Mysql Servers anbietet.

phpMyAdmin kann den Webserver bei der Installation selbst konfigurieren, sofern (wie in unserem Fall) ein Apache webserver verwendet wird. Installiert wird phpMyAdmin mit

$ sudo apt-get install phpmyadmin

Das Installationsprogramm fragt außerdem ob die eigen Konfigurationsdatenbank automatisch erstellt werden soll. Die Frage “ Konfigurieren der Datenbank für phpmyadmin mit dbconfig-common?“ sollte also mit <Ja> beantwortet werden.

Daraufhin wird das bei der Installation vergeben Administrations-/Rootpasswort abgefragt.

Im nächsten Schritt fragt das Installationsprogramm nach dem „MySQL-Anwendungspasswort für phpmyadmin„. Dieser Punkt kann mit Enter übersprungen werden, da dieses Paddwort von uns nicht benötigt wird und das Programm daraufhin selbst ein Passwort festlegt.

Daraufhin ist phpMyAdmin unter https://192.168.178.100/phpmyadmin erreichbar. Da hier sensible Daten übertragen werden sollte darauf geachtet werden dass die Seite nur über HTTPS aufgerufen wird. Wie sich Verschlüsselung für phpMyAdmin erzwingen lässt habe ich im Artikel „SSL für phpMyAdmin erzwingen“ beschrieben.

Nach diesem trockenen, aber notwendigen Kapitel ist der Homeserver bereit zu Installation der eigentlichen Dienste wie z.B. Owncloud oder Tiny-Tiny RSS.

 

Nächster Artikel:
Teil 6 – Selbstgebauter Homeserver/NAS: Dateizugriff via Browser und Dateisync mit Owncloud


Dieser Artikel ist lizensiert unter einer Creative Commons Namensnennung 4.0 International Lizenz.

9 Comments

  1. Hallihalo,

    erstmal vielen Dank für das sehr gute und ausführliche Tutorial.

    Ich habe alle Schritte soweit durchgeführt, jedoch ist die phpmyadmin Seite für mich nicht erreichtbar.
    Es erscheint immer nur die Fehlermeldung
    „Not Found
    The requested URL /phpmyadmin was not found on this server.“

    Irgendwelche Vorschläge wie ich das beheben kann?

    Viele Grüße !

    • Niko

      schwer zu sagen. Wahrscheinlich ist die phpMyAdmin Konfiguration für den Apache nicht vorhanden oder nicht aktiv. Diese sollte bei der Installation unter /etc/apache2/conf-available/phpmyadmin.conf erstellt und aktiviert werden. Falls es diese Datei nicht gibt kannst du sie durch setzen eines Symlinks zu phpmyadmin Installation erstellen

      sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf

      und aktivieren mit

      sudo a2enconf phpmyadmin
      sudo service apache2 restart

      Evtl hilft das schon.
      Falls du Adminer (https://www.adminer.org/) noch nicht kennst kannst du dir das als Alternative zu phpMyAdmin einmal anschauen. Es handelt sich ebenfalls um eine Weboberfläche zur Administration von Datenbanken. Allerdings besteht Adminer nur aus einer einzigen PHP-Datei und ist damit wesentlich weniger komplex als das riesige phpMyAdmin.

  2. Hallöchen,

    ich bekomm nur den Quelltext der Seite im IE angezeigt. Ansonsten hat bisher alles gut funktioniert.

    Gibt es eine Lösung für das Problem?

    Viele Grüße

    • aymenbest

      hallo,
      dass liegt anscheinen daran dass du einen Ubuntu 16.04 benutzest und dafür php 7.XX instaliert hast weil php5 kann man auf 16.04 versionen nicht instalieren.
      dieses Befehl sollte das problem lösen

      sudo apt-get install libapache2-mod-php

      LG

  3. Icematiker

    Hallo, vielen Dank für ihren Artikel. Bei mir klappt alles, bis auf die Verbindung zur Datenbank. Hab eine PHP Seite mit select Abfrage gebaut. Jedoch wird nichts angezeigt.

    Macht es einen Unterschied wenn man ein Standart Linux (mint) nutzt?

  4. Erst einmal vielen Dank für diese großartige Anleitung!
    Ich habe nur eine Frage bzgl. der .conf-Dateien, da die Nextcloud Installationsanleitung noch das Anlegen einer nextcloud.conf erfordert. Inwiefern kommen sich die hier erstellte homeserver.conf und die nextcloud.conf ins Gehege? Wenn ich mich mittels IP auf meinen Server verbinde, so zeigt mir Firefox aktuell zwei Ordner (html und nextcloud) an, statt sich direkt auf die Nextcloud-Instanz zu verbinden.

  5. Niko

    Die auf der Nextcloud Homepage beschriebene nextcloud.conf ergänzt die default Konfiguration (homeserver.conf oder 000-default.conf). Die dort hinterlegten Einstellungen greifen aber nur wenn du ein /nextcloud an deine IP-Adresse anhängst.
    Welches Verzeichnis dein Webserver standardmäßig anzeigt ist wahrscheinlich in der anderen .conf Datei unter dem Punkt DocumentRoot definiert.

  6. Erst einmal vielen Dank für das HOWTO!
    ich bin bei dem punkt Apache installieren und konfigurieren:
    ich habe alles befolgt nach anleitung und es funktioniert auch alles!
    aber da ich immer auf google chrome und im firefox diese lästige fehlermeldung bekomme „nicht sicher HTTPS“ möchte ich gerne mit Let’s Encrypt das ganze verschlüsseln! kannst du mir sagen wie ich mein jetziges Self-Signed SSL Zertifikat deaktiviere, bzw alles auf „Standarte Einstellungen zurücksetze“?? wenn ich zb. a2dismod ssl mache stürzt mir owncloud/apache ab!