Auf einem entfernten Linux-Server sollen nachträglich das HOME-Verzeichnis eines Benutzers und weitere einzelne Verzeichnisse im Dateisystem verschlüsselt werden. Nach einer ersten Recherche im Internet kommen für diese Aufgabe ecryptfs, EncFS und VeraCrypt in Frage.
In diesem Artikel möchte ich mich im Folgenden näher mit der Zielstellung auseinandersetzen und die damit zusammenhängenden Fragen diskutieren. Daher freue ich mich, wenn ihr euch an der Diskussion beteiligt und weitere Informationen und Quellen zum Thema beisteuert.
Zielstellung
Es sind Verzeichnisse eines entfernten Linux-Servers zu verschlüsseln. Auf den Server kann via SSH zugegriffen werden. Bei den zu verschlüsselnden Verzeichnissen handelt es sich um das HOME-Verzeichnis eines Benutzers und um weitere Verzeichnisse innerhalb des Dateisystems, wie z.B. /var/www/sitename/data.
Mit der Verschlüsselung sollen die Verzeichnisse vor unberechtigtem Zugriff geschützt werden für den Fall,
- dass die Festplatten des Servers gestohlen werden.
- dass der Server von einem anderen Bootmedium gestartet wird, um auf das Dateisystem zuzugreifen.
Beim Start des Servers sollen die verschlüsselten Verzeichnisse eingehängt werden, so dass sie unabhängig von einer Benutzeranmeldung zur Verfügung stehen.
Fragen
Um die beschriebene Zielstellung zu erreichen, sind im Vorfeld folgende Fragen zu beantworten:
- Ist es mit einer der genannten Lösungen prinzipiell möglich, nachträglich Verzeichnisse eines entfernten Linux-Servers zu verschlüsseln, wenn diese Verzeichnisse bereits existieren und Daten enthalten?
- Ist es mit einer der genannten Lösungen möglich, die verschlüsselten Verzeichnisse nach dem Bootvorgang einzuhängen, ohne dass sich ein Benutzer dazu am Server anmelden muss?
- Gibt es bekannte Schwachstellen in den genannten Lösungen, die einen Einsatz obsolet erscheinen lassen?
- Welche Angriffsvektoren bestehen bei der in der Zielstellung beschriebenen Verschlüsselung?
Eigene Gedanken und Diskussion
Besonders was den zweiten Stichpunkt betrifft, bin ich skeptisch, ob dies überhaupt möglich ist. Denn um ein verschlüsseltes Verzeichnis entschlüsseln zu können, ist in der Regel die Eingabe von Passwort oder Passphrase erforderlich.
Bei einem Desktop-System wird meist bei Eingabe des Benutzerpassworts bei der Anmeldung der Benutzer-Keyring entsperrt, in dem sich die Passphrase zum Entschlüsseln des Verzeichnisses befindet.
Es leuchtet ja auch ein, dass ein Schlüssel bzw. eine Passphrase nicht aus einem verschlüsselten Bereich geladen werden kann. Daher glaube ich nicht, dass sich oben beschriebenes Vorhaben umsetzen lässt.
Was ist eure Meinung dazu? Habt ihr vielleicht andere Ideen, wie oben genannte Anforderungen erfüllt werden können?
Nicht das ich in der Materie stecken würde aber warum soll ein Verzeichnis entschlüsselt werden, bevor sich ein user eingeloggt hat. Für wen wird es dann entschlüsselt? Könnte nicht eine Lösung sein, dass die Entschlüsselung bei allen usern, die sich anmelden, angestoßen wird?
Ich stimme dir zu, dass es wenig Sinn macht, wenn Verzeichnisse entschlüsselt werden, ohne dass dies durch den Benutzer erfolgt, dem die Daten gehören. Eine solche Funktion würde die Verschlüsselung obsolet werden lassen.
Das Erfordernis, dass eine Benutzeranmeldung erforderlich ist, hat für einen Server jedoch einen entschiedenen Nachteil. Ich möchte in der Lage sein, den Server nach der automatischen Installation von Updates auch automatisch Neustarten zu lassen. Während die installierten Dienste dabei entsprechend ihrer Konfiguration wieder starten, bleiben die verschlüsselten Verzeichnisse bis zu einer Benutzeranmeldung verschlüsselt. Das macht es unmöglich ein Verzeichnis zu verschlüsseln, auf welches zum Beispiel der Webserver zugreifen soll.
Eine Möglichkeit das Problem zu umgehen, wäre die Verschlüsselung der Applikation zu überlassen, die gewöhnlich für den Zugriff auf die Daten verwendet wird. Evtl. bietet die ownCloud Encryption App eine Lösung (https://owncloud.org/blog/encryption-2-0-in-owncloud-server-8-1/). Soweit ich mich erinnere lassen sich hiermit jedoch nur externe Speicher verschlüsseln. Weiss jemand, ob sich dies inzwischen geändert hat? Betreibt jemand vielleicht so eine Umgebung und mag seine Erfahrungen teilen?
Viele Grüße
Tronde
Mir würde schon was einfallen…
Lassen den Server doch eine verschlüsselte Verbindung zu einem andern aufbauen, über die er sich Passwort / Key holt. Diese Verbindung wird vom entfernten Server überwacht und ist nur genau einmal zulässig. Danach wird sie gesperrt und muss vom einem Benutzer des entfernten Servers wieder für einen einmaligen Zugriff rückgesetzt werden.
Zur Sperre dieser Verbindung kannst du z.B. geeignete iptables-Regeln benützen, über die auch gleich der Zugriff nur von dieser einen IP-Adresse aus gewährleistet wird.
Liebe Grüße,
Gerald
Wenn du die Verzeichnisse automatisch entschlüsselt haben willst, wirst du nie eine (nach aktuellem Stand der Technik) 100%ige Sicherheit erreichen, da der Schlüssel unsicher gespeichert werden muss.
Du könntest den Schlüssel aber auslagern, zB auf einen Rechner, der dauerhaft (oder zumindest beim Starten des Servers) an ist. Wenn dieser „Schlüsselrechner“ nur vom aktuellen Standort deines Servers erreichbar ist (kann durch Firewall reguliert werden), hättest du einen gewissen Diebstahlschutz.
Je nach dem wie du an den entfernten Rechner drankommst könnte es sich auch anbieten, den Schlüssel auf einem externen Medium (USB-Stick) zu speichern. Wenn du den (relativ) sicher gegen Diebstahl sichern kannst (durch geeignete Befestigung), würde das deine Ziele vielleicht auch erfüllen.
Du könntest diese Lösungen auch kombienieren, also von einem Schlüsselrechner einen Schlüssel holen, der den eigentlichen Schlüssel auf einem USB-Key entsperrt, mit dem du dann die eigentlichen Verzeichnisse entschlüsselst.
Oder du leitest einen Schlüssel aus Netzwerkkomponenten in deiner Nähe ab, zB von einer MAC-Adresse von nur lokal erreichbaren Switches oder ähnlichem. Solang diese relativ diebstahlsicher verbaut sind und nur lokal erreichbar und nicht leicht zu erraten sind, erhälst du dadurch auch einen gewissen Schutz.
Ich merke grade, dass das Thema sehr spannend ist. Bitte berichte weiter davon :-).
Guten Morgen,
danke für eure Rückmeldungen. Die Idee, den Schlüssel über eine verschlüsselte Verbindung von einem weiteren Server abzuholen finde ich interessant.
Zwar habe ich noch keine genaue Vorstellung davon, wie eine Lösung im Detail aussehen kann, doch werde ich mich mal etwas damit auseinander setzen.
Voraussetzung damit das ganze funkioniert, ist denke ich, dass sich das verschlüsselte Verzeichnis über ein Script entsperren lässt. Ich schaue mir die drei genannten Lösungen noch einmal darauf hin an, welche Kommandozeilenoptionen sie bieten.
Viele Grüße
Tronde
Ich habe vor einer Weile von einem solchen Szenario gelesen. Habe auch auf anhib zwei Links gefunden.
Soltte deinen Anforderungen entsprechen. Man muss halt mal ausprobieren.
http://blog.neutrino.es/2011/unlocking-a-luks-encrypted-root-partition-remotely-via-ssh/
Oder hier im Arch Wiki unter der Überschrift „Remote unlocking of the root (or other) partition“
https://wiki.archlinux.org/index.php/Dm-crypt/Specialties
VG Nedy