Private Cloud mit Seafile und Baïkal Radicale auf einem Raspberry Pi (Teil 1)

In dieser Artikelserie möchte ich meine Erfahrungen zusammenfassen, die ich beim Einrichten meiner eigenen privaten Wolke auf einem Raspberry Pi gemacht habe. Dabei haben mir hauptsächlich die Artikel von Jan Karres sehr weitergeholfen. Da ich aber ein anderes Setup hatte und seine Artikel nun auch schon einige Jährchen auf dem Buckel haben, möchte ich meine einzelnen Schritte (auch für mich zum späteren Erinnern) hier aufzeigen. Insbesondere, was das Setup von Radicale und Seafile angeht, hat sich da einiges geändert.

Ich habe mich entschlossen, dies als Artikelserie umzusetzen, da für einige Nutzer vielleicht nur das eine (oder andere) von Interesse ist. Los geht es mit dem Wichtigsten: der Inbetriebnahme des Raspberry Pi. Die weiteren Teile findet man hier:

Bevor es los geht, möchte ich allerdings darauf hinweisen, dass dieser Artikel nach bestem Wissen und Gewissen zusammengestellt wurde. Es funktioniert bei mir alles tadellos, aber ob es im Endeffekt ein sicheres Setup ist, kann nur ein IT-Fachmann beurteilen. Da ich so einer nicht bin, kann ich auch keine Gewährleistung für auftretende Schäden übernehmen. Einen Großteil der Informationen in diesem Artikel habe ich neben den oben genannten Quellen auch in anderen Quellen von Fachleuten wiedergefunden, sodass es ein gängiges Setup darstellen sollte. Für Hinweise und Verbesserungen bin ich natürlich offen und passe diese Anleitung dann auch dementsprechend an.

Vorwort

Um auf meinen Computern und Telefon Dateien sowie Kontakt- und Kalenderdaten austauschen zu können, hatte ich am Anfang verschieden Clouddienste wie Dropbox, UbuntuOne, Google Kontakte und Google Kalender genutzt.

Irgendwann wollte ich die Daten aber gerne unter der eigenen Kontrolle haben und habe angefangen, meine eigenen Dienste dafür auf dem eigenen Webspace aufzusetzen. Am Anfang habe ich mit Owncloud experimentiert, bin dann aber schnell bei Seafile als Dropbox-Ersatz gelandet, da es performanter und zuverlässiger war als die damaligen Owncloud-Versionen. Gleichzeitig entdeckte ich Baïkal-Server als Kontakt- und Terminserver. Mittlerweile nutze ich diese Kombination seit mehreren Jahren auf einem gehosteten Server ohne jegliche Probleme.

Somit war für mich schnell klar, dass ich diese Software auch für meine eigene kleine Wolke nutzen wollte. Bei der Recherche stellte sich nun aber heraus, dass Baïkal (vorerst) nicht weiter entwickelt wird. Daher macht es keinen Sinn, eine Anleitung für eine Software zu schreiben, welche schnell veraltet sein wird. Als Alternative werde ich daher Radicale nutzen, ein ebenso schlanker Open-Source-Kontakt- und Terminserver.

Hardware und Software

Für meine Wolke nutze ich folgende Hardware-Ausstattung:

  • Raspberry Pi 1 Modell B+ als Server
  • SanDisk microSD-Karte mit 16 GB Kapazität für das Betriebssystem
  • Western Digital PiDrive mit 314 GB als Datenspeicher
  • Netzteil mit mindestens 2A Output, da die Festplatte mitversorgt werden muss
  • Fritz!Box als Router

Diese Anleitung basiert auf folgenden Software-Versionen:

  • Raspbian 9 (Stretch)
  • Seafile Server 6.2.3 for Raspberry Pi
  • Baïkal Server 0.4.6
  • Radicale 2.1.8
  • Nginx Webserver 1.10.3

Für die Einrichtung werden keine zusätzlichen Monitore, Tastaturen oder Mäuse benötigt. Es wird alles über einen externen Rechner bzw. über SSH eingerichtet.

Vielleicht auch wichtig vorab: Ich nutze nur Linux auf meinen Rechnern bzw. Android auf meinem Telefon als Betriebssystem, sodass ich keine Aussagen zu MacOS oder Windows tätigen kann.

Schritt 1: Raspbian installieren

Als Betriebssystem habe ich mich für Raspbian entschieden, da es zum Einen als offizielles Betriebssystem von der Raspberry Pi Foundation zur Verfügung gestellt wird und speziell an den Raspberry Pi angepasst ist. Zum Anderen benötigte ich ein Betriebssystem, welches sehr stabil läuft, da ich möglichst immer an meine Daten herankommen möchte.

Schritt 1a: Raspbian herunterladen
Eine aktuelle Version von Raspbian findet man auf der Downloadseite der Raspberry Pi Foundation. Ist die Datei heruntergeladen, kann man sie entpacken und erhält eine Image-Datei (IMG).

Schritt 1b: Das Image auf die SD-Karte übertragen
Mit Hilfe des Linux-Werkzeugs dd wird das Image dann auf die SD-Karte übertragen. Dabei nutzt man folgenden Befehl:

dd bs=1M if=/Pfad/zur/Image-Datei of=/Pfad/zur/SD-Karte

Dabei bedeutet die Option bs=1M, dass das Image nur in 1-Megabyte-Blöcken gelesen und geschrieben werden soll. Bei der Angabe if= muss der richtige Pfad zur Imagedatei angegeben werden. Bei der Angabe of= muss der richtige Pfad zur SD-Karte angegeben werden.

Nachdem das Image auf die SD-Karte übertragen wurde, sollten auf dieser 2 Partitionen vorhanden sein: eine ca. 40 MB kleine FAT32-Partition (die Boot-Partition) und eine ca. 1,7 GB große ext4-Partition (die Raspbian-Partition)).

Da diese Anleitung für den Fall gedacht ist, dass man keinen zusätzlichen Monitor für den RasPi hat bzw. benötigt, muss man auf diesen per SSH zugreifen. Seit November 2016 ist SSH bei den Raspbian-Releases standardmäßig deaktiviert. Um es zu aktivieren, erstellt man eine Textdatei mit dem Namen ssh. Dabei ist es vollkommen egal, was in der Datei drin steht. Sie kann auch leer sein. Hauptsache, sie heißt ssh ohne eine Endung.

Diese Datei kopiert man dann in die Boot-Partition der SD-Karte. Wenn im nächsten Schritt der RasPi gestartet wird, sucht das System nach der ssh-Datei. Wenn sie gefunden wird, wird automatisch SSH aktiviert und die Datei gelöscht.

Schritt 1c: Raspberry Pi für die Installation von Raspbian vorbereiten
Die SD-Karte kann man dann in den Raspberry Pi einsetzen. Bevor der Raspberry Pi mit Strom versorgt wird, sollte er dann noch über ein Ethernet-Kabel mit der Fritzbox verbunden werden. Danach kann der RasPi gestartet werden.

 

Schritt 2: Raspbian Konfigurieren

Schritt 2a: Grundeinstellungen konfigurieren
Nun kann man sich über SSH mit dem RasPi verbinden. Dazu öffnet man ein Terminalfenster und gibt folgenden Befehl ein:

ssh pi@192.168.200.101

Die IP-Adresse muss dabei an die eigene angepasst werden. Hier ist es empfehlenswert, dem RasPi in der Weboberfläche des Routers eine feste IP zuzuweisen.

Nach der Eingabe des Befehls wird man nach dem Passwort gefragt, welches standardmäßig raspberry lautet.

Ist man eingeloggt, ruft man mit folgendem Befehl dann das Konfigurationsmenü des RasPi auf:

sudo raspi-config

Es öffnet sich ein Konfigurationsmenü, in dem man als Erstes den Punkt Advanced Options >> Expand Filesystem auswählt. Damit wird die Partition, auf der sich das Raspbian befindet auf die ganze SD-Karte erweitert.

Als nächstes geht man zum Punkt Localisation Options >> Change locale. Man wählt die Option de_DE.UTF-8 UTF-8 mit der Leertaste aus und bestätigt dies mit der Auswahl der OK-Schaltfläche. Danach wird man gefragt, welche Sprache anderssprachige Anwendungen wählen sollen. Hier wählt man en_GB.UTF-8 aus.

Zurück im Hauptmenü wählt man Localisation Options >> Change Timezone und stellt die richtige Zeitzone ein.

Alle anderen Optionen lassen wir erst einmal unangetastet. Als Abschluss geht man im Hauptmenü auf Finish und bestätigt, dass man den RasPi neu starten möchte. Damit wäre der Raspberry Pi erstmal konfiguriert und vollständig lauffähig.

Man sollte allerdings noch einige weiterführende Schritte durchführen, um das System für den eigentlichen Bestimmungszweck vorzubereiten

Schritt 2b: Raspbian aktualisieren
Mit dem unten stehenden Befehl bringt man das Betriebssystem erst einmal auf den aktuellsten Stand.

sudo apt-get update && sudo apt-get upgrade

 

Schritt 2c: Den SWAP erweitern (optional)
Nicht zwingend notwendig, bei manchen Modellen aber hilfreich, ist es, einen Zwischenspeicher (SWAP) zu nutzen, um im Fall der Fälle den RAM virtuell erweitern zu können. Das ist zwar nicht so performant, wie echter RAM, aber immer noch besser, als zu wenig RAM zur Verfügung zu haben. Dafür muss man zunächst mit den beiden Zeilen unten zunächst eine SWAP-Datei erzeugen.

sudo su -c 'echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile'
sudo dphys-swapfile setup

Im Anschluss muss der SWAP noch aktiviert werden:

sudo dphys-swapfile swapon

 

Schritt 3: Raspbian absichern

Vier weitere (optionale) Schritte betreffen die Absicherung des Systems. Sie sind nicht zwingend notwendig, aber wenn man den RasPi mit der Zielstellung betreibt, auch aus dem Internet darauf zugreifen zu wollen, dann sind diese Schritte für eine bessere Absicherung empfehlenswert.

Schritt 3a: SSH-Port ändern
Der Standard-SSH-Port ist 22. Um es potentiellen Angreifern ein bisschen schwieriger zu machen, kann man den SSH-Port ändern:

Zunächst meldet man sich wieder am RasPi an (falls man nicht schon aus den vorherigen Schritten sowieso schon angemeldet ist). Dann öffnet man die SSH-Konfiguration mit dem Konsolen-Editor nano.

sudo nano /etc/ssh/sshd_config

Ziemlich weit am Anfang steht ein Zeile:

#Port 22

Diese ersetzt man durch den gewünschten Port (!!!Achtung!!!: die Raute # am Anfang entfernen):

Port 1027

Dabei ist darauf zu achten, dass der Port durch keinen anderen Dienst beansprucht wird (Eine Liste standardisierter Portnutzungen findet man in Wikipedia).

Man verlässt den Editor mit Strg+X und bestätigt mit Y und Enter, dass man die Datei auch speichern möchte. Danach muss der SSH-Dienst noch neu gestartet werden.

sudo /etc/init.d/ssh restart

 

In Zukunft wird einfaches Einloggen wie in Schritt 2a nicht mehr funktionieren. Man muss nun zusätzlich den Port mit angeben, da der Standard-Port ja geändert wurde:

ssh pi@192.168.200.101 -p 1027

 

Schritt 3b: Standard-Benutzer ändern
Ein noch wichtigerer Schritt ist aber eigentlich den Standard-Nutzer zu ändern, da dieser allgemein bekannt ist. Dadurch muss ein potentieller Angreifer nicht nur den SSH-Port ermitteln, sondern auch den Benutzernamen und das Passwort.

Dafür muss man zunächst einen temporären Nutzer anlegen, mit dem man dann den Benutzer pi umbenennen kann:

sudo adduser --no-create-home temp

temp ist in diesem Fall der temporäre Nutzer. Die Option no-create-home sorgt dafür, dass für diesen Nutzer kein Home-Verzeichnis angelegt wird. Man wird auch direkt zur Eingabe eines Passworts aufgefordert. Die restlichen Fragen kann man mit Enter einfach die Default-Werte setzen.

Den temporären Nutzer muss man in die sudoers-Datei schreiben, damit er später auch Root-Rechte bekommen kann:

sudo visudo

Als letzte Zeile fügt man folgende ein (wobei temp für den Namen des temporären Nutzers steht):

temp ALL=(ALL) NOPASSWD: ALL

Den Editor kann man wieder mit Strg+X, Y und Enter verlassen. Man loggt sich nun mit dem Befehl logout aus und loggt sich als temporärer Nutzer temp wieder ein.

Als nächstes wird der Benutzername und das Home-Verzeichnis von pi geändert (in diesem Beispiel soll der neue Benutzer hotzenplotz heißen):

sudo usermod --move-home --login hotzenplotz --home /home/hotzenplotz pi

Die Benutzergruppe sollte genauso heißen wie der neue Benutzername (in diesem Beispiel wieder hotzenplotz):

sudo groupmod -n hotzenplotz pi

Der temporäre Benutzer temp hat seine Schuldigkeit getan, sodass wir ihn aus der sudoers-Datei wieder herausnehmen können. Wir tauschen ihn einfach durch den neuen Benutzer (in diesem Beispiel hotzenplotz) aus.

sudo visudo
temp ALL=(ALL) NOPASSWD: ALL
wird geändert in
hotzenplotz ALL=(ALL) NOPASSWD: ALL

Nach erfolgter Änderung und Abspeichern mit Strg+X, Y und Enter loggt man sich wieder aus und meldet sich mit dem neuen Benutzer an (da ja nur Name und Home-Verzeichnis umbenannt wurde, lautet das Passwort weiterhin (noch) raspberry). Den temporären Benutzer braucht man nun nicht mehr, sodass er gelöscht werden kann:

sudo deluser temp

Als letzten Schritt sollte man noch das Passwort in ein weniger leicht erratbares ändern.

passwd

 

Schritt 3c: Root-Login über SSH verhindern
Da man sich mit dem neuen Benutzer auf dem RasPi einloggt und mittels sudo Root-Rechte erlangt, wird ein direkter Root-Zugriff über SSH nicht benötigt, sodass dieser sicherheitshalber deaktiviert werden kann. Dazu öffnet man wieder die SSH-Config und ändert den Wert für PermitRootLogin in no.

sudo nano /etc/ssh/sshd_config

PermitRootLogin no

Nach dem Abspeichern muss der SSH-Dienst neu gestartet werden:

sudo /etc/init.d/ssh restart

 

Schritt 3d: Brute-Force-Attacken verhindern
Um Brute-Force-Attacken zum Ausprobieren von Passwortkombinationen zu verhindern, kann man das Paket Fail2Ban installieren. Die Standard-Einstellungen sollten dabei ausreichen, sodass hier außer der Installation nichts weiter konfiguriert werden muss.

sudo apt-get install fail2ban

 

Damit ist der Raspberry Pi soweit vorbereitet, seinen Dienst als Cloudserver zu verrichten. Im nächsten Teil wird es zur Einrichtung des Kontakt- und Terminservers gehen.

 

 

Private Cloud mit Seafile und Baïkal Radicale auf einem Raspberry Pi (Teil 1)

8 Gedanken zu „Private Cloud mit Seafile und Baïkal Radicale auf einem Raspberry Pi (Teil 1)

  1. X schreibt:

    Hi,
    danke für den spannenden Artikel. Ich bin aktuell auch auf der Suche nach einer Lösung für meine Datensynchronisation inkl. integrierter Verschlüsselung und bin dabei auch auf Seafile gestoßen und würde mich dabei sehr über den zweiten Teil freuen. Da ich selbst momentan aus Zeitgründen mich nicht ausführlich genug mit dem Thema beschäftigen kann, wäre es cool eine Anleitung dafür zu bekommen.

    1. Soweit ich weiß, nicht. Habe mich aber das letzte Mal vor ein paar Monaten intensiver damit beschäftigt. Wie es derzeit aussieht, weiß ich leider (noch) nicht.

  2. Jürgen schreibt:

    sudo usermod –move-home –login hotzenplotz –home /home/hotzenplotz pi

    wenn ich diese unter Schritt 3b mache, kommt :
    user pi is currently used by process 434

    Eine Idee wie ich hier weiterkomme ?

      1. chris schreibt:

        Habe ein ähnliches Problem. Auch wenn ich pi auslogge, ich die raspberry neu starte oder ausschalte wird user pi ständig von einem Prozess benutzt.

    1. wowbagger schreibt:

      Bootet dein System in die Desktopumgebung? Falls ja, probiere es mal in der raspi-config das Booten in die Eingabeauforderung zu aktivieren. Danach blieb die mir Fehlermeldung aus, scheinbar handelte es sich um Prozesse die mit dem Desktop in Zusammenhang standen.

Schreibe einen Kommentar

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