Die eigene Cloud
Die neue US-Regierung hat den Behörden den Zugriff auf Cloud-Daten erleichtert. Wer sein Adressbuch und seine Fotosammlung nicht mehr bei US-Diensten lagern möchte, baut sich seine eigene Cloud.
D ie Dienste von Google und Apple mögen bequem sein für die Adressbuch- und Kalendersynchronisation und das Backup der mit dem Smartphone geschossenen Fotos. Aber mit dem Ausbau der Überwachungsbefugnisse durch US-Behörden kann schon ein ungutes Gefühl aufkommen. Alternativen gibt es mit günstigen und teils kostenlosen Hostern auch in Deutschland, doch gerade wenn mehrere Nutzer – in Familien oder kleinen Unternehmen – auch gemeinsame Kalender und Ordner nutzen sollen, lohnt der Aufbau eines eigenen Synchronisationsservers. Als Software für diese Aufgabe setzen wir das freie Nextcloud ein, als Hardware verwenden wir einen Raspberry Pi oder ähnlichen Single Board Computer. Bei der Kon gura- tion achten wir darauf, dass sie nicht mit der im letzten Heft vorgestellten Pi-Hole (Werbeblocker per DNS, Artikel auf DVD) kollidiert. Als Hardware für die hier vorgestellte Softwarelösung empfehlen wir einen Single Board Computer mit einem Debian-basierten Linux-System (das kann auch ein Ubuntu sein), Raspberry Pi & Co. sind bis zu einem Dutzend Nutzern für die Aufgabe gut geeignet, allerdings sollten Sie bei diesen Single Board Computern wichtige Daten auf einer USB-Festplatte lagern, da die SDKarten gerne kaputtgehen. Falls Sie – beispielsweise als Medienserver zu Hause oder als Dateiserver in der Firma – bereits einen Linux-Server betreiben, können Sie diesen selbstverständlich erweitern.
Apache-Installation
Nextcloud harmoniert am besten mit Apache. Um Apache neben dem von Pi-Hole eingesetzten Lighttpd zu installieren, sind kleinere Kniffe erforderlich, die ein wenig Aufmerksamkeit erfordern. Zunächst installieren Sie das PHP5-Modul für Apache, dessen Installation zieht den Apache Webserver und einige Abhängigkeiten nach: apt-get install libapache2-mod-php5 Im Falle eines bereits installierten Pi-Hole erstellen Sie ein neues Verzeichnis für die HTML-Dateien der Nextcloud: mkdir -p /var/www/html.apache Anschließend tragen Sie dieses Verzeichnis und einen geänderten Port für den ApacheServer (beispielsweise 8080 statt 80) in die beiden Kon gurationsdateien
/etc/apache2/ports.conf /etc/apache2/sites-enabled/000-default. conf ein. Da NextCloud in einer .htaccess viele Standardeinstellungen des Apache-Servers überschreibt, ist es ratsam, in der Datei /etc/apache2/apache2.conf direkt unterhalb des Blockes <Directory /var/www/>
[...] </Directory> einen neuen Block einzufügen: <Directory /var/www/html.apache> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> Sind alle Änderungen vorgenommen, starten Sie den Webserver neu: service apache2 restart Wenn Sie nun im Browser die IP-Adresse des Pi mit dem geänderten Port ansurfen, sollten Sie eine Verzeichnislistung zu sehen bekommen: http://10.76.23.253:8080/
PHP-Kon guration
Der nächste Schritt ist die Kon guration der Scriptsprache PHP. Nextcloud verwendet in der einfachsten Kon guration die Dateibasierte Datenbank SQLite und verzichtet so auf die Einrichtung eines MySQL-Servers. Dies kürzt die Kon guration deutlich ab und hat erst bei größeren Nutzerzahlen (mehr als ein Dutzend Nutzer mit engen Synchronisationsintervallen) PerformanceProbleme zur Folge. Das rührt daher, dass ein einzelner Schreibzugriff die gesamte Datenbank sperrt. In solchen Fällen ist ein späterer Umstieg auf MySQL problemlos möglich. apt-get install php5-sqlite php5-gd php5-curl service apache2 restart Legen Sie nun eine Datei /var/www/html. apache/test.php mit dem folgenden Inhalt an: <?php phpinfo(); ?> Wenn Sie diese test.php nun im Browser öffnen, bekommen Sie die PHP-Kon guration angezeigt. Vergewissern Sie sich, dass die eben installierten Module aktiv sind und achten Sie auf Timeouts und Dateigrößen. Passen Sie gegebenenfalls die Datei / etc/php5/apache2/php.ini an und starten Sie danach den Webserver erneut. Installation von NextCloud Die grundlegende Installation von Nextcloud ist einfach: Entpacken Sie das Zip- Archiv in /tmp und kopieren Sie dann alle Dateien in den HTML-Ordner, hier verwenden wir rsync. Der Slash am Ende des Verzeichnisnamens ist dabei obligatorisch, um die Ordnerinhalte, nicht aber den Ordner selbst zu kopieren: cd /tmp unzip nextcloud-x.y.z.zip rsync -avHP nextcloud/ /var/www/html.apache/ Anschließend müssen Sie ein neues Verzeichnis für Daten erstellen und noch zwei weitere Verzeichnisse dem Nutzer zuweisen, unter dessen Kennung der ApacheServer läuft: cd /var/www/html.apache mkdir data chown -R www-data:www-data config chown -R www-data:www-data apps chown -R www-data:www-data data Ist dies geschehen, können Sie im Browser den Nextcloud-Server unter http://10.76.23.253:8080/ ansurfen und Nutzernamen und Passwort für den ersten Nutzer – der Administratorrechte erhält – vergeben. Je nachdem, auf welchem Datenträger Nextcloud liegt und welche Einstellungen für die maximale Ausführungszeit von PHP-Scripten gesetzt sind, werden Sie beim Login eine Warnung erhalten, dass die Integritätsprüfung von Dateien fehlgeschlagen ist. Ursache hierfür ist in der Regel ein Abbruch des Scriptes, das die Prüfung durchführt, die Warnung kann daher ignoriert werden. Auch werden Sie darauf hingewiesen, dass Sie sich momentan über eine unverschlüsselte HTTP-Verbindung mit dem Nextcloud-Server verbunden haben. Hieraus erwächst zumindest im Heimnetz ein überschaubares Risiko.
Dynamic-DNS-Kon guration
Der nächste Schritt ist die Anmeldung eines Dynamic-DNS-Dienstes wie No-IP.org oder duckdns.org. DuckDNS ist ein schlanker, nicht kommerzieller Anbieter, der mittlerweile auch die kostenlosen SSL-Zerti kate von Let’s Encrypt unterstützt und der ein einfaches IP-Update per HTTP-GET-Request zulässt. Dies funktioniert mit DSL-Routern wie Fritzbox oder auf der Linux-Kommandozeile mit curl oder wget: wget -O /dev/null https://www.duckdns. org/update?domains=meinedomain&token=m eintoken Ist die Kon guration des dynamischen DNS abgeschlossen, richten Sie im DSL-Router eine Portweiterleitung ein: Reichen Sie sowohl auf Port 443 als auch Port 8080 den eingehenden Datenverkehr an die IP-Adresse des Raspberry Pi mit Nextcloud durch. Prüfen Sie anschließend, beispielsweise mit dem Mobiltelefon bei deaktiviertem WLAN, ob die eigene Nextcloud-Instanz nun von außen erreichbar ist: http://meinedomain.duckdns.org:8080/ Loggen Sie sich nicht ein, da Ihre Daten unverschlüsselt übers Mobilfunknetz übertragen würden.
Apache und Let’s encrypt
Bei Let’s encrypt handelt es sich um einen kostenlosen Dienst, der kostenlose SSLZerti kate mit relativ kurzer Gültigkeit anbietet. Die Validierung ndet hier lediglich darüber statt, ob derjenige, der den Webserver administriert, bestimmte Dateien ins Root-Verzeichnis des Servers schreiben darf. In der Praxis übernimmt die Erstinstallation und das künftige Update ein certbot genanntes Script, das auch die ApacheKon guration anpasst. Tragen Sie zunächst die Zeile deb http://ftp.debian.org/debian jessie-backports main in Ihre Datei /etc/apt/sources.list.d/backports.list ein. Legen Sie diese Datei an, falls sie noch nicht existiert. Anschließend aktualisieren Sie die Paketquellen mit apt-get update und installieren den Certbot mittels: apt-get install certbot -t jessiebackports apt-get install python-certbot-apache -t jessie-backports Tragen Sie nun den vollständigen Hostnamen ( meinedomain.duckdns.org) in der Direktive ServerName in die Datei /etc/apache2/sites-enabled/000-default. conf ein und starten Sie den Apache noch einmal neu. Noch ist SSL nicht aktiv, aber die Kon guration enthält nun alles, um Certbot den Rest einrichten zu lassen: certbot --apache Das Script fragt noch einige Daten wie Kontakt-E-Mail-Adresse ab und lässt sich den Hostnamen bestätigen. Lassen Sie HTTPSZugriff optional ( 1: Easy), um im lokalen Netz einfacher zugreifen zu können. Nach Abschluss der Einrichtung ist die Nextcloud-Installation auch per HTTPS erreichbar: https://meinedomain.duckdns.org/ Beim Aufruf über diesen Hostnamen werden Sie nun eine Fehlermeldung von Nextcloud erhalten, die besagt, dass über einen nicht vertrauenswürdigen Domainnamen zugegriffen wurde. Sie müssen nun noch einmal die Kon gurationsdatei con g/con g.php anpassen und hier den Array trusted_domains erweitern: 'trusted_domains' => array (
0 => '10.76.23.253:8080', 1 => 'meinedomain.duckdns.org', ), Beim erneuten HTTPS-verschlüsselten Aufruf über die DuckDNS-Adresse sollte Nextcloud nicht mehr meckern und das Login ohne Probleme funktionieren. Um die HTTPS-Verschlüsselung dauerhaft zu machen, müssen Sie die Zerti katserstellung als wöchentlich wiederkehrenden Cronjob eintragen. Verwenden Sie crontab -e um den Editor für wiederkehrende Aufgaben zu öffen. Nutzer mit wenig Linux-Erfahrung werden oft zum vorgeschlagenen Editor nano greifen. Wer etwas Linux-Erfahrung hat, ist mit vim.tiny besser bedient. Mit der Zeile 30 0 * * 2 /usr/bin/certbot renew >> /var/log/le-renew.log wird jeden Dienstag (2. Wochentag) um 0:30 ein neues Zerti kat generiert. Verwenden Sie den Wochentag Ihrer Erstinstallation von Let’s encrypt, um die Last auf die Server des Anbieters gleichmäßig zu verteilen.
Feinheiten
Nach abgeschlossener Aktivierung von SSL und erfolgreichem Test des Zugriffs via HTTPS sollten Sie im DSL-Router wieder das Portforwarding für Port 8080 entfernen. Löschen Sie zudem die Datei /var/www/html. apache/test.php, denn diese könnte potenziellen Angreifern zu viel über ihr System verraten. Alternativ sorgen Sie mit chmod 0600 test.php dafür, dass nur der Eigentümer root diese Datei lesen und ausführen darf. Bei Bedarf sind die Rechte 0644 schnell erneut gesetzt. Wenn Sie Pi-Hole oder einen OpenWRT-basierten Router benutzen, können Sie noch den DuckDNS-Hostnamen lokal au ösen und so die SSL-Verschlüsselung auch im LAN nutzen.
Zu Hause oder gehostet?
Falls bereits ein Raspberry Pi oder Ähnliches im Einsatz ist, dürfte die Antwort auf die Frage nach dem Standort der eigenen Cloudlösung einfach sein: zu Hause. Steht aber die Frage nach Beschaffung eines Raspberry Pi für diesen Einsatz im Raum, ist die Antwort schon etwas schwieriger: Je nachdem, ob eine externe Festplatte oder ein großer USB-Stick zum Einsatz kommen, fällt die Leistungsaufnahme eines Kleincomputers auf der Stromrechnung auf: Ein Raspberry Pi benötigt typischerweise bei kleiner Last etwa drei Watt, bei voller Last etwa fünf Watt. Ein USB-Stick schlägt mit weniger als einem Watt zu Buche, eine 2,5-Zoll-Platte kann bis zu fünf Watt benötigen (USB-SSDs liegen dazwischen). Die Folge können bereits Stromkosten von bis zu drei Euro pro Monat sein. Von dort ist es nicht mehr weit zu den typischerweise ab vier Euro monatlich bei deutschen Anbietern mietbaren vServern.
Fazit
Mit Nextcloud 11, einem aktuellen Debian oder Ubuntu und dem Certbot wird die Einrichtung des eigenen Cloud-Servers zwar nicht zum Kinderspiel, aber doch so weit vereinfacht, dass man auch mit Linux-Anfängerkenntnissen schnell zu einem stabilen und sicheren Ergebnis kommt.