LUKS Verschlüsselung nachträglich zu Nextcloud hinzufügen

Info: Vor der Durchführung des Artikels sollte der Nachtrag am Ende gelesen werden, da diese Einrichtung einen erheblichen Nachteil bei der Nutzung des Nextcloud Desktop Clients mit sich bringt.

Wer die Installation seiner Nextcloud Instanz nicht auf einem durch LUKS verschlüsselten Gerät vornehmen kann / möchte, der kann seine gespeicherten Daten dennoch im nachhinein auf einem solchen Gerät verschlüsselt speichern.
Wie dies gelingt, werde ich in diesem Artikel erläutern.

Der Plan hierbei ist es, eine Containerdatei mittels LUKS zu erstellen, welche dann an einem spezifischen Ort im Dateisystem gemountet wird. An diesem Ort werden dann Unterverzeichnisse für die jeweiligen Nextcloud Benutzer erstellt, welche in der Nextcloud als externer Speicher eingebunden und den Benutzern zur Verfügung gestellt werden.

Hiermit wird erreicht, dass die Dateien nicht unverschlüsselt auf z.B. der Festplatte des Servers liegen, sondern sich in der verschlüsselten Containerdatei befinden. Die Dateien an sich werden hierbei nicht verschlüsselt. Mit den Nextcloud Bordmitteln und entsprechend aktivierter Verschlüsselung können die Dateien in der Containerdatei allerdings auch noch einmal zusätzlich verschlüsselt werden. Weitere Informationen dazu sind hier zu finden.

Ein weiterer Vorteil ist, dass die Nextcloud weiterhin ohne Probleme funktioniert, auch wenn der Container nicht zur Verfügung stehen sollte. (z.B. nach einem Neustart des Servers)

Containerdatei einrichten

Zu Beginn muss der Container erstellt werden. Hierzu wird mit dem folgenden Kommando eine Datei mit zufälligen Daten geschrieben (das Ziel der Datei ist frei wählbar und bei mir nur ein Beispiel):

sudo dd if=/dev/urandom of=/var/data/nextcloud_container_file bs=1M count=20000

Das Resultat ist eine 20 GB große Datei, welche im nächsten Schritt zu einer LUKS Datei formatiert wird.

sudo cryptsetup -c aes-xts-plain64 -s 512 -h sha512 -y luksFormat /var/data/nextcloud_container_file

Nachdem die Datei formatiert wurde und ein entsprechendes sicheres Passwort festgelegt wurde, kann sie mit LUKS geöffnet werden.

sudo cryptsetup luksOpen /var/data/nextcloud_container_file nextcloud_container

Die Containerdatei ist nach diesen Schritten größtenteils vorbereitet. Alles was noch fehlt ist ein entsprechendes Dateisystem für den Container. Ohne dieses könnte er nicht gemountet werden.

sudo mkfs.ext4 /dev/mapper/nextcloud_container

Weitere Informationen zur Containerdatei sind hier zu finden.

Verzeichnis einrichten

Um die eben erstellte Containerdatei für die spätere Nutzung durch die Nextcloud zu mounten, muss ein Mountpoint erstellt werden. Hierbei handelt es sich um ein einfaches Verzeichnis, in welches die Daten später hineingeschrieben werden.

sudo mkdir /media/mount-nextcloud_container

Nun kann der Container in das Verzeichnis gemountet werden.

sudo mount /dev/mapper/nextcloud_container /media/mount-nextcloud_container

Anschließend habe ich die Berechtigungen auf das neue Verzeichnis angepasst. Der Benutzer „www-data“, welcher zum Apache Webserver gehört, benötigt volle Berechtigungen. Alle sonstigen Rechte habe ich entfernt.

sudo chown www-data /media/mount-nextcloud_container

sudo chmod 700 /media/mount-nextcloud_container

Die Grundvorraussetzungen wurden mit den eben beschriebenen Schritten erfüllt.

zusätzliche Einstellungen in Nextcloud

Im Zuge der Umstellung auf die Containerdatei habe ich außerdem noch die folgenden Einstellungen vorgenommen, bevor ich den Benutzern das neue Volume zur Verfügung gestellt habe.

Damit die maximale Speichermenge der einzelnen Benutzer auch für Dateien auf dem externen Speicher zählt, habe ich folgenden Parameter in der config.php Datei meiner Nextcloud eingefügt. Somit wird vermieden, dass die Benutzer über ihre Begrenzung hinaus Dateien speichern können.

'quota_include_external_storage' => true

Des Weiteren habe ich die App „Deleted Files“ über die App-Verwaltung deaktiviert. Sollte sie aktiviert sein, werden gelöschte Dateien temporär (Standard sind 30 Tage) in einen Papierkorb verschoben, welcher sich im ursprünglichen Datenverzeichnis der Nextcloud befindet (nicht verschlüsselt). Durch deaktivieren der App wird die Funktion des Papierkorbes komplett entfernt.

Das gleiche habe ich mit der App „Versions“ gemacht, da diese ebenfalls ältere Versionen von abgeänderten Dateien aufhebt, um diese eventuell zurückzuspielen. Diese Funktion geht dann auch entsprechend verloren.

Um im nächsten Schritt den externen Speicher einzubinden, muss außerdem sichergestellt sein, dass die App „External storage support“ aktiviert ist.

Verzeichnis für Nextcloud Benutzer erstellen und einbinden

Damit Benutzer der Nextcloud ihre Dateien zukünftig auch auf dem verschlüsselten Volume speichern können, muss ihnen dieses entsprechend zur Verfügung gestellt werden.

Da nicht alle Benutzer auf das gleiche Verzeichnis zugreifen sollen, habe ich für jeden Benutzer noch ein einzelnes angelegt. Hier am Beispiel des Benutzers „bjarne“.

sudo mkdir /media/mount-nextcloud_container/bjarne

Je nachdem, mit welchen Berechtigungen das Verzeichnis angelegt wird, müssen sie eventuell noch angepasst werden.

sudo chown www-data /media/mount-nextcloud_container/bjarne

sudo chmod 700 /media/mount-nextcloud_container/bjarne

Nachdem das Verzeichnis erstellt wurde, wird es dem Benutzer in der Nextcloud zugewiesen.

Hierzu wird in den Verwaltungs-Einstellungen der Nextcloud zum Punkt „Externe Speicher“ navigiert und ein neuer Speicher mit den folgenden Parametern konfiguriert:

  • Ordnername (frei wählbar): verschlüsselte_Dateien
  • Externer Speicher: Lokal
  • Authentifizierung: Keine
  • Konfiguration (der Pfad zum eben erstellten Ordner): /media/mount-nextcloud_container/bjarne
  • Verfügbar für: bjarne

Nachdem der kleine Haken am Ende der Zeile betätigt wurde, um die Konfiguration abzuschließen, sollte der Benutzer den ihm zu gewiesenen Speicher sehen.

Der jeweilige Benutzer kann seine Dateien nun in dem neuen Ordner speichern.

Dieser Abschnitt kann nun für alle weiteren Benutzer wiederholt werden.

Abschluss

Es ist zu beachten, dass die Schritte zum Öffnen und Mounten des LUKS Containers nach einem Neustart des Servers manuell durchgeführt werden müssen. Ich habe die Kommandos einfach in ein kleines Skript gepackt, welches ich nach dem Neustart meines Systems einmal ausführe.

#!/bin/bash
cryptsetup luksOpen /var/data/nextcloud_container_file nextcloud_container
mount /dev/mapper/nextcloud_container /media/mount-nextcloud_container

Sollte der LUKS Container nicht gemountet sein ist das aber auch kein Problem. Die Benutzer haben in diesem Zeitraum nur keinen Zugriff auf die dort gespeicherten Dateien.

Nachtrag

Nach verfassen des Artikels ist mir eine unschöne Eigenschaft aufgefallen.

Wenn der Container nicht gemounted ist (z.B. nach einem Neustart des Servers) und ein Client versucht die Dateien zu synchronisieren, wird er die lokale Kopie der Dateien, welche sich in dem Container befinden, löschen. Dies macht er, da er diese Dateien nicht mehr vorfinden kann und daher davon ausgeht, dass sie auf dem Server gelöscht wurden. Wenn der Container im Anschluss wieder gemounted wird, lädt der Client alle darauf befindlichen Dateien neu herunter.

Ich habe dieses Verhalten bereits in einem Github issue adressiert: https://github.com/nextcloud/desktop/issues/2454


Quelle Vorschaubild:

By Nextcloud GmbH – https://raw.githubusercontent.com/nextcloud/promo/master/nextcloud-logo-inverted.png

One Comment

Add a Comment

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