Verschlüsseltes Backup für Nextcloud Kontakte

Diese Anleitung ist für Benutzer der Kontaktverwaltung in Nextcloud (mittels Contacts-App), die ein sicheres und verschlüsseltes Backup der synchronisierten Kontaktdaten erstellen möchten.

Voraussetzungen

  • Rootzugriff auf den Server, auf welchem eure Nextcloudinstanz läuft.
  • Ihr benutzt die Contacts App um eure Kontakte über mehrere Geräte mittels Nextcloud zu synchronisieren.
  • Berechtigung zur Erstellung eines Cronjobs.

Backupskript einrichten

Meldet euch an der Shell eures Servers (üblicherweise mittels SSH) an. Erstellt ein Verzeichnis wo das Skript abgelegt werden soll.

mkdir bin
cd bin

Wir benutzen an dieser Stelle git um eine Kopie des Skripts frisch aus dem Repositorium zu klonen. Dazu prüfen wir zunächst ob git installiert ist. Für Derivate von Debian oder Ubuntu lautet der Befehl:

sudo apt update
sudo apt install git

Nun klonen wir das Skript in unser Verzeichnis bin.

git clone https://codeberg.org/BernieO/calcardbackup.git

Die Zugriffsrechte auf das Verzeichnis müssen auf den Systembenutzer des Webservers eingestellt werden, da derselbe Zugriffsrechte auf euer Nextcloud besitzt. In vielen Fällen ist dies der Benutzer www-data. Die Zeile lautet entsprechend:

sudo chown -R www-data:www-data calcardbackup/

Nun können wir das Skript bereits ausführen um ein Backup unserer Kontakte herzustellen. Wie Nextcloud selbst muß auch dieses Skript mit dem Benutzer des Webservers ausgeführt werden. In diesem Beispiel wieder www-data.

Außerdem muß als Parameter das Installationsverzeichnis von Nextcloud angegeben werden. Dies kann je nach Linuxdistribution und verwendeten Webserver variieren. Das von mir bevorzugte Nginx verwendet /usr/share/nginx/html/. Unter dem häufig gebrauchten Apache kann die Installation sich auch unter /var/www/html/ befinden. Zunächst springen wir ins Verzeichnis des Skripts und benennen dann die Befehlszeile wie folgt, um beim erstgenannten Beispiel zu bleiben:

cd calcardbackup
sudo -u www-data ./calcardbackup /usr/share/nginx/html/nextcloud

Die Backupdatei wird im Unterverzeichnis backups abgelegt.

Automatisieren durch Cronjob

Soweit so nützlich. Nun möchten wir das Backup natürlich vollautomatisiert durchführen lassen. Durch Erstellung eines einfachen Cronjobs lässt sich dies ganz einfach bewerkstelligen. Zunächst erstellen wir jedoch noch eine Datei, welche dem Skript als Log dient. Da das Skript durch den Systembenutzer des Webservers (www-data) ausgeführt wird, muß auch die Logdatei für diesen zugänglich sein.

sudo mkdir /var/log/calcardbackup.log
sudo chown www-data:www-data /var/log/calcardbackup.log

Nun können wir einen Cronjob für den Benutzer www-data eintragen.

sudo crontab -u www-data -e

Folgende Zeilen können wir benutzen, wenn das Backup jeweils am ersten Tag jedes Monats ausgeführt werden soll.

# Backup Kontakte & Kalender Backups zu Mega.nz
15 4 1 * * /home/benutzer/bin/calcardbackup/calcardbackup /usr/share/nginx/html/nextcloud/ -d _\%Y\%m\%d

Das Skript wird am ersten Tag jedes Monats um 04:15 Uhr ausgeführt. Überprüft bitte die Pfadangaben zum installierten Skript, sowie der zweite Pfad der auf eure Nextcloud-Installation verweist. Die Zeichenkette am Ende dient der Benennung der Backupdatei und hängt das aktuelle Datum im Dateinamen an. Wurde das Skript also zum Beispiel am 01.08.2020 ausgeführt, so hieße die Datei „calcardbackup_20200801.tar.gz.

Sicherung auf Cloudspeicherdienst

Nun haben wir bereits alles getan um regelmäßige Backups automatisch auszuführen. Die Backupdateien liegen nun in einem Verzeichnis auf unserem Server. Wir könnten diese händisch kopieren. Eleganter ist es natürlich diesen Schritt ebenfalls zu automatisieren, sodass der gesamte Prozess keine Benutzerinteraktion mehr benötigt.

Verschlüsselung der Backupdateien

Kontaktdaten sind stets vertraulich zu behandeln, da es sich um persönliche Daten unserer Kontaktpersonen handelt, für deren Weitergabe an Dritte wir in der Regel nicht berechtigt sind. Um unsere eigene Privatsphäre und die Rechte jener Personen zu schützen, ist es unverzichtbar die Daten mit einer sicheren Verschlüsselung zu versehen, bevor diese unseren Rechner bzw. Server verlassen. Ein einfaches, überall verfügbares aber lang erprobtes Mittel und zudem mit einfachen Kommandozeilen zu bewerktelligendes Verfahren ist gpg.

GPG-Schlüsselpaar erstellen

Der eigentliche Einsatzzweck für GPG ist bekanntermaßen der Austausch verschlüsselter E-mails, doch damit lassen sich auch Dateien an andere Personen oder auch an sich selbst zuverlässig verschlüsseln. Wer bereits über ein Schlüsselpaar verfügt, der mag dieses Kapitel gerne überspringen und bei der nächsten Überschrift wieder einsteigen, wenn es um die Übertragung des Schlüssels auf den Server geht. Nun in aller Kürze zur Erstellung eines Schlüsselpaars.

Zunächst stellen wir sicher, daß GnuPG im System installiert ist. Es ist in allen bekannten Linuxdistributionen in den Repositorien enthalten. Diese aktualisieren wir zunächst.

sudo apt update

Dann installieren wir das Paket. Versionen ab 2.x sollten nun Standard in jeder Distribution sein. Vereinzelt können diese aber auch noch unter dem Paketnamen gpg2 vorhanden sein. Für die meisten aktuellen Repositorien gilt:

sudo apt install gnupg

Zur Erstellung eines Schlüssels mit Standardeinstellungen benutzen wir:

gpg --gen-key

Nach Eingabe des Namens und wichtig, einer gültigen E-mailadresse, wird das Schlüsselpaar erzeugt und in einem Unterverzeichnis des Heimverzeichnisses (~/home/benutzer/.gnupg/) abgelegt.

Öffentlichen GPG-Schlüssel auf Server übertragen

Zunächst prüfen wir den Hash unseres erzeugten Schlüssels.

gpg -K

Hier werden nur geheime Schlüssel, also solche für den wir den öffentlichen wie auch den geheimen Teil besitzen, aufgelistet. So wie der eben erzeugte. Eine Ausgabe könnte so aussehen (ist nur ein Beispiel):

pub   dsa1024 2002-03-06 [SCA]
      DD878C06E8C2BEDDD4A440D3E573346992AB3FF7
uid        [ unbekannt] Benutzername <benutzer@domain.de>
sub   elg1024 2002-03-06 [E]

Den Hash in der zweiten Zeile kopieren wir, da wir ihn in den nächsten Kommandos gleich verwenden werden.

gpg --keyserver keyserver.ubuntu.com --send-key DD878C06E8C2BEDDD4A440D3E573346992AB3FF7

Das alles erledigen wir auf einen Client, wo wir den Schlüssel erzeugen. Natürlich handelt es sich beim hochgeladenen Schlüssel nur um den öffentlichen Teil. Der geheime sollte niemals unseren Rechner verlassen. Der öffentliche Schlüssel ist jedoch alles was wir benötigen, um auf unserem Server Dateien an uns selbst zu verschlüsseln. So melden wir uns zunächst an unserem Server an um den öffentlichen Schlüssel dort zu importieren.

Zunächst gehen wir auch hier sicher, daß gnupg installiert ist. Die Befehle hierzu sind identisch mit der oben geschilderten Installation.

sudo apt update
sudo apt install gnupg

Auf unserem Server müssen wir keine verschlüsselten Daten empfangen, sondern nur versenden. Der Prozess zur Erstellung eines Schlüsselpaars muß also nicht noch einmal wiederholt werden. Wir erstellen lediglich in unserem Homeverzeichnis das Unterverzeichnis .gnupg.

mkdir .gnupg

Sodann machen wir uns an den Import des vorab hochgeladenen Schlüssels.

gpg --keyserver keyserver.ubuntu.com --receive-key DD878C06E8C2BEDDD4A440D3E573346992AB3FF7

Damit sind alle Voraussetzungen erfüllt um Dateien zu verschlüsseln, die nur mit unserem privaten Schlüssel entschlüsselt werden können und per Kommandozeile einfach erstellt und auf einen Cloudspeicher hochgeladen werden können.

Verschlüsselung der Backupdateien automatisieren und zu Cloudspeicherdienst kopieren

Wir erstellen ein Skript welches in regelmäßigen Abständen durch einen Cronjob aufgerufen wird und folgende Schritte in einem Ablauf durchführen soll:

  • Backup der Kontakte erstellen und in einer Datei speichern
  • Backupdatei mit gnupg verschlüsseln
  • Hochladen der verschlüsselten Datei auf einen Cloudspeicherdienst (in diesem Beispiel mega.nz)
  • Reinigen des Verzeichnisses von temporären Dateien

Dazu melden wir uns auf unserem Nextcloud-Server via SSH an und erstellen das Skript. Um dieses in unserem Heimverzeichnis in einem Unterverzeichnis „bin“ abzulegen erstellen wir erst eines, falls noch nicht vorhanden.

mkdir bin

Dann wechseln wir in dieses Verzeichnis und erstellen die Datei.

cd bin
nano upload_calcardbackup.sh

Dort geben können wir folgende Codezeilen hineinkopieren.

# Kalender & Kontakte Backups verschlüsseln und zu Mega.nz hochladen
gpg -r meine@email.de -o /home/benutzer/calcardbackup_`date +\%Y\%m\%d`.tar.gz.gpg --always-trust -e /home/bin/calcardbackup/backups/calcardbackup_`date +\%Y\%m\%d`.tar.gz
megaput --path=/Root/Backup/ /home/benutzer/calcardbackup_`date +\%Y\%m\%d`.tar.gz.gpg
rm /home/benutzer/calcardbackup_`date +\%Y\%m\%d`.tar.gz.gpg

Dabei geschieht Folgendes:

  • Die erste Zeile verschlüsselt vorhandene Backupdateien für den per E-mailadresse identifizierten Benutzer und legt es in unserem Homeverzeichnis ab.
  • Dann wird die Backupdatei zu mega.nz hochgeladen
    Anmerkung: Da das Skript nach Dateien mit dem aktuellen Datum im Dateinamen sucht, muß der Cronjob dazu am selben Tag ausgeführt werden wie die Erstellung der Backupdatei (wie weiter oben beschrieben). Dazu muß das angegebene Verzeichnis „Backup“ in eurem Konto auf mega.nz existieren, oder ihr ändert den Wert nach eigenem Gutdünken.
  • Schließlich wird das Verzeichnis wieder aufgeräumt. Nachdem das Backup zum Cloudspeicher übertragen wurde, wird die verschlüsselte Datei gelöscht.

Die Skriptdatei muß nun auch ausführbar gemacht werden.

chmod +x /home/benutzer/bin/upload_calcardbackup.sh

Für die Übertragung zu mega.nz wird ein Kommando verwendet, welches in den Repositorien in Debian und Ubuntu als „megatools“ verfügbar ist. Dieses muß also installiert sein. Um dieses sicherzustellen können wir es auf unserem Nextcloud-Server installieren:

sudo apt install megatools

Cronjob erstellen

Abschließend möchten wir das Skript ebenso automatisch ausführen lassen, wie die Erstellung der Backupdateien wie oben beschrieben. Der Cronjob muß am gleichen Tag ausgeführt werden wie der weiter oben Beschriebene. Da wir uns weiter oben dafür entschieden haben die Backups an jedem Ersten des Monats um 04:14 Uhr auszuführen, führen wir das Skript dazu eine Viertelstunde danach aus. Wir erstellen hier also einen Cronjob mittels

crontab -e

Und kopieren die folgende Zeile hinein:

# Nextcloud Kontakte & Kalender Backup verschlüsseln und hochladen zu Mega.nz
30 4 1 * * /home/benutzer/bin/upload_calcardbackup.sh

Dabei nicht vergessen den „benutzer“ durch euren eigenen Systempfad auszutauschen.

Abschließend legen wir eine Konfigurationsdatei in unserem Heimverzeichnis an, damit wir Passwort und Zugangsdaten nicht direkt in die Crontab eingetragen werden muß, wo diese auch in Logs auftauchen und durch andere Benutzer gelesen werden könnte. Wir wechseln in unser Heimverzeichnis.

cd /home/benutzer

Dort erstellen wir eine Konfigurationsdatei für Megatools.

nano .megarc

Die Datei wird aufgebaut wie folgt:

[Login]
Username = benutzername
Password = passwort

Benutzername und Passwort müsst ihr natürlich entsprechend eurer eigenen Kontodaten ergänzen. Dann ändern wir die Zugriffsrechte der Datei, damit sie nur durch uns gelesen werden kann.

chmod 600 .megarc

Damit wäre diese Anleitung abgeschlossen, welche nun doch recht umfangreich geraten ist. Mit etwas Übung im Umgang mit einer Kommandozeile können alle Schritte jedoch sicherlich innerhalb von etwa 30 Minuten durchlaufen werden.

Schreibe einen Kommentar